]> git.kaiwu.me - nginx.git/commitdiff
Fixed incorrect use of r->http_version in scgi module.
authorMaxim Dounin <mdounin@mdounin.ru>
Mon, 19 Dec 2011 11:23:16 +0000 (11:23 +0000)
committerMaxim Dounin <mdounin@mdounin.ru>
Mon, 19 Dec 2011 11:23:16 +0000 (11:23 +0000)
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.

src/http/modules/ngx_http_scgi_module.c

index 41cf23bc648566b59bb1c2316fd86b6ae09bc7b7..550697bba8290c9abeca4acb8cdd1531c12642b3 100644 (file)
@@ -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");