mirror of
https://github.com/nginx/nginx.git
synced 2025-02-25 18:55:26 -06:00
Fixed incorrect use of r->http_version in scgi module.
The r->http_version is a version of client's request, and modules must not set it unless they are really willing to downgrade protocol version used for a response (i.e. to HTTP/0.9 if no response headers are available). In neither case r->http_version may be upgraded. The former code downgraded response from HTTP/1.1 to HTTP/1.0 for no reason, causing various problems (see ticket #66). It was also possible that HTTP/0.9 requests were upgraded to HTTP/1.0.
This commit is contained in:
parent
afb7f22c03
commit
4d1e32d9d8
@ -857,11 +857,7 @@ ngx_http_scgi_process_status_line(ngx_http_request_t *r)
|
||||
}
|
||||
|
||||
if (rc == NGX_ERROR) {
|
||||
|
||||
r->http_version = NGX_HTTP_VERSION_9;
|
||||
|
||||
u->process_header = ngx_http_scgi_process_header;
|
||||
|
||||
return ngx_http_scgi_process_header(r);
|
||||
}
|
||||
|
||||
@ -961,12 +957,12 @@ ngx_http_scgi_process_header(ngx_http_request_t *r)
|
||||
ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
||||
"http scgi header done");
|
||||
|
||||
if (r->http_version > NGX_HTTP_VERSION_9) {
|
||||
u = r->upstream;
|
||||
|
||||
if (u->headers_in.status_n) {
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
u = r->upstream;
|
||||
|
||||
if (u->headers_in.status) {
|
||||
status_line = &u->headers_in.status->value;
|
||||
|
||||
@ -978,12 +974,10 @@ ngx_http_scgi_process_header(ngx_http_request_t *r)
|
||||
return NGX_HTTP_UPSTREAM_INVALID_HEADER;
|
||||
}
|
||||
|
||||
r->http_version = NGX_HTTP_VERSION_10;
|
||||
u->headers_in.status_n = status;
|
||||
u->headers_in.status_line = *status_line;
|
||||
|
||||
} else if (u->headers_in.location) {
|
||||
r->http_version = NGX_HTTP_VERSION_10;
|
||||
u->headers_in.status_n = 302;
|
||||
ngx_str_set(&u->headers_in.status_line,
|
||||
"302 Moved Temporarily");
|
||||
|
Loading…
Reference in New Issue
Block a user