mirror of
https://github.com/nginx/nginx.git
synced 2024-12-01 13:09:10 -06:00
there may be several "Connection" header lines and each may have several tokens
This commit is contained in:
parent
51082f7f1d
commit
ec67b19ea0
@ -21,6 +21,8 @@ static ngx_int_t ngx_http_process_header_line(ngx_http_request_t *r,
|
||||
ngx_table_elt_t *h, ngx_uint_t offset);
|
||||
static ngx_int_t ngx_http_process_unique_header_line(ngx_http_request_t *r,
|
||||
ngx_table_elt_t *h, ngx_uint_t offset);
|
||||
static ngx_int_t ngx_http_process_connection(ngx_http_request_t *r,
|
||||
ngx_table_elt_t *h, ngx_uint_t offset);
|
||||
static ngx_int_t ngx_http_process_cookie(ngx_http_request_t *r,
|
||||
ngx_table_elt_t *h, ngx_uint_t offset);
|
||||
|
||||
@ -71,7 +73,7 @@ ngx_http_header_t ngx_http_headers_in[] = {
|
||||
ngx_http_process_unique_header_line },
|
||||
|
||||
{ ngx_string("Connection"), offsetof(ngx_http_headers_in_t, connection),
|
||||
ngx_http_process_unique_header_line },
|
||||
ngx_http_process_connection },
|
||||
|
||||
{ ngx_string("If-Modified-Since"),
|
||||
offsetof(ngx_http_headers_in_t, if_modified_since),
|
||||
@ -1198,6 +1200,21 @@ ngx_http_process_unique_header_line(ngx_http_request_t *r, ngx_table_elt_t *h,
|
||||
}
|
||||
|
||||
|
||||
static ngx_int_t
|
||||
ngx_http_process_connection(ngx_http_request_t *r, ngx_table_elt_t *h,
|
||||
ngx_uint_t offset)
|
||||
{
|
||||
if (ngx_strstr(h->value.data, "close")) {
|
||||
r->headers_in.connection_type = NGX_HTTP_CONNECTION_CLOSE;
|
||||
|
||||
} else if (ngx_strstr(h->value.data, "keep-alive")) {
|
||||
r->headers_in.connection_type = NGX_HTTP_CONNECTION_KEEP_ALIVE;
|
||||
}
|
||||
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
|
||||
static ngx_int_t
|
||||
ngx_http_process_cookie(ngx_http_request_t *r, ngx_table_elt_t *h,
|
||||
ngx_uint_t offset)
|
||||
@ -1317,26 +1334,11 @@ ngx_http_process_request_header(ngx_http_request_t *r)
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
if (r->headers_in.connection) {
|
||||
if (r->headers_in.connection->value.len == 5
|
||||
&& ngx_strcasecmp(r->headers_in.connection->value.data,
|
||||
(u_char *) "close")
|
||||
== 0)
|
||||
{
|
||||
r->headers_in.connection_type = NGX_HTTP_CONNECTION_CLOSE;
|
||||
|
||||
} else if (r->headers_in.connection->value.len == 10
|
||||
&& ngx_strcasecmp(r->headers_in.connection->value.data,
|
||||
(u_char *) "keep-alive")
|
||||
== 0)
|
||||
{
|
||||
r->headers_in.connection_type = NGX_HTTP_CONNECTION_KEEP_ALIVE;
|
||||
|
||||
if (r->headers_in.keep_alive) {
|
||||
r->headers_in.keep_alive_n =
|
||||
ngx_atotm(r->headers_in.keep_alive->value.data,
|
||||
r->headers_in.keep_alive->value.len);
|
||||
}
|
||||
if (r->headers_in.connection_type == NGX_HTTP_CONNECTION_KEEP_ALIVE) {
|
||||
if (r->headers_in.keep_alive) {
|
||||
r->headers_in.keep_alive_n =
|
||||
ngx_atotm(r->headers_in.keep_alive->value.data,
|
||||
r->headers_in.keep_alive->value.len);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user