# HG changeset patch # User Maxim Dounin # Date 1316114555 0 # Node ID e5df04b05e75cb6e02a3ade377f8d091993d431c # Parent 0c30976f5bfa04d62bb2805dd616888841f87dcc Protocol version parsing in ngx_http_parse_status_line(). Once we know protocol version, set u->headers_in.connection_close to indicate implicitly assumed connection close with HTTP before 1.1. diff -r 0c30976f5bfa -r e5df04b05e75 src/http/modules/ngx_http_proxy_module.c --- a/src/http/modules/ngx_http_proxy_module.c Thu Sep 15 19:21:19 2011 +0000 +++ b/src/http/modules/ngx_http_proxy_module.c Thu Sep 15 19:22:35 2011 +0000 @@ -1210,6 +1210,7 @@ r->http_version = NGX_HTTP_VERSION_9; u->state->status = NGX_HTTP_OK; + u->headers_in.connection_close = 1; return NGX_OK; } @@ -1234,6 +1235,10 @@ "http proxy status %ui \"%V\"", u->headers_in.status_n, &u->headers_in.status_line); + if (ctx->status.http_version < NGX_HTTP_VERSION_11) { + u->headers_in.connection_close = 1; + } + u->process_header = ngx_http_proxy_process_header; return ngx_http_proxy_process_header(r); diff -r 0c30976f5bfa -r e5df04b05e75 src/http/ngx_http.h --- a/src/http/ngx_http.h Thu Sep 15 19:21:19 2011 +0000 +++ b/src/http/ngx_http.h Thu Sep 15 19:22:35 2011 +0000 @@ -52,6 +52,7 @@ typedef struct { + ngx_uint_t http_version; ngx_uint_t code; ngx_uint_t count; u_char *start; diff -r 0c30976f5bfa -r e5df04b05e75 src/http/ngx_http_parse.c --- a/src/http/ngx_http_parse.c Thu Sep 15 19:21:19 2011 +0000 +++ b/src/http/ngx_http_parse.c Thu Sep 15 19:22:35 2011 +0000 @@ -1403,6 +1403,7 @@ return NGX_ERROR; } + r->http_major = ch - '0'; state = sw_major_digit; break; @@ -1417,6 +1418,7 @@ return NGX_ERROR; } + r->http_major = r->http_major * 10 + ch - '0'; break; /* the first digit of minor HTTP version */ @@ -1425,6 +1427,7 @@ return NGX_ERROR; } + r->http_minor = ch - '0'; state = sw_minor_digit; break; @@ -1439,6 +1442,7 @@ return NGX_ERROR; } + r->http_minor = r->http_minor * 10 + ch - '0'; break; /* HTTP status code */ @@ -1516,6 +1520,7 @@ status->end = p; } + status->http_version = r->http_major * 1000 + r->http_minor; r->state = sw_start; return NGX_OK;