mirror of
https://github.com/nginx/nginx.git
synced 2025-06-17 01:01:28 +08:00
allow spaces in URI
This commit is contained in:
parent
d50e53e675
commit
da7b5e15de
@ -911,7 +911,7 @@ ngx_http_proxy_create_request(ngx_http_request_t *r)
|
|||||||
loc_len = (r->valid_location && ctx->vars.uri.len) ?
|
loc_len = (r->valid_location && ctx->vars.uri.len) ?
|
||||||
plcf->location.len : 0;
|
plcf->location.len : 0;
|
||||||
|
|
||||||
if (r->quoted_uri || r->internal) {
|
if (r->quoted_uri || r->space_in_uri || r->internal) {
|
||||||
escape = 2 * ngx_escape_uri(NULL, r->uri.data + loc_len,
|
escape = 2 * ngx_escape_uri(NULL, r->uri.data + loc_len,
|
||||||
r->uri.len - loc_len, NGX_ESCAPE_URI);
|
r->uri.len - loc_len, NGX_ESCAPE_URI);
|
||||||
}
|
}
|
||||||
|
@ -824,10 +824,6 @@ ngx_http_handler(ngx_http_request_t *r)
|
|||||||
r->phase_handler = cmcf->phase_engine.server_rewrite_index;
|
r->phase_handler = cmcf->phase_engine.server_rewrite_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (r->unparsed_uri.len) {
|
|
||||||
r->valid_unparsed_uri = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
r->valid_location = 1;
|
r->valid_location = 1;
|
||||||
#if (NGX_HTTP_GZIP)
|
#if (NGX_HTTP_GZIP)
|
||||||
r->gzip_tested = 0;
|
r->gzip_tested = 0;
|
||||||
|
@ -112,8 +112,10 @@ ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b)
|
|||||||
sw_schema_slash_slash,
|
sw_schema_slash_slash,
|
||||||
sw_host,
|
sw_host,
|
||||||
sw_port,
|
sw_port,
|
||||||
|
sw_host_http_09,
|
||||||
sw_after_slash_in_uri,
|
sw_after_slash_in_uri,
|
||||||
sw_check_uri,
|
sw_check_uri,
|
||||||
|
sw_check_uri_http_09,
|
||||||
sw_uri,
|
sw_uri,
|
||||||
sw_http_09,
|
sw_http_09,
|
||||||
sw_http_H,
|
sw_http_H,
|
||||||
@ -357,7 +359,7 @@ ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b)
|
|||||||
*/
|
*/
|
||||||
r->uri_start = r->schema_end + 1;
|
r->uri_start = r->schema_end + 1;
|
||||||
r->uri_end = r->schema_end + 2;
|
r->uri_end = r->schema_end + 2;
|
||||||
state = sw_http_09;
|
state = sw_host_http_09;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return NGX_HTTP_PARSE_INVALID_REQUEST;
|
return NGX_HTTP_PARSE_INVALID_REQUEST;
|
||||||
@ -383,13 +385,35 @@ ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b)
|
|||||||
*/
|
*/
|
||||||
r->uri_start = r->schema_end + 1;
|
r->uri_start = r->schema_end + 1;
|
||||||
r->uri_end = r->schema_end + 2;
|
r->uri_end = r->schema_end + 2;
|
||||||
state = sw_http_09;
|
state = sw_host_http_09;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return NGX_HTTP_PARSE_INVALID_REQUEST;
|
return NGX_HTTP_PARSE_INVALID_REQUEST;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
/* space+ after "http://host[:port] " */
|
||||||
|
case sw_host_http_09:
|
||||||
|
switch (ch) {
|
||||||
|
case ' ':
|
||||||
|
break;
|
||||||
|
case CR:
|
||||||
|
r->http_minor = 9;
|
||||||
|
state = sw_almost_done;
|
||||||
|
break;
|
||||||
|
case LF:
|
||||||
|
r->http_minor = 9;
|
||||||
|
goto done;
|
||||||
|
case 'H':
|
||||||
|
r->http_protocol.data = p;
|
||||||
|
state = sw_http_H;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return NGX_HTTP_PARSE_INVALID_REQUEST;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
/* check "/.", "//", "%", and "\" (Win32) in URI */
|
/* check "/.", "//", "%", and "\" (Win32) in URI */
|
||||||
case sw_after_slash_in_uri:
|
case sw_after_slash_in_uri:
|
||||||
|
|
||||||
@ -401,7 +425,7 @@ ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b)
|
|||||||
switch (ch) {
|
switch (ch) {
|
||||||
case ' ':
|
case ' ':
|
||||||
r->uri_end = p;
|
r->uri_end = p;
|
||||||
state = sw_http_09;
|
state = sw_check_uri_http_09;
|
||||||
break;
|
break;
|
||||||
case CR:
|
case CR:
|
||||||
r->uri_end = p;
|
r->uri_end = p;
|
||||||
@ -466,7 +490,7 @@ ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b)
|
|||||||
break;
|
break;
|
||||||
case ' ':
|
case ' ':
|
||||||
r->uri_end = p;
|
r->uri_end = p;
|
||||||
state = sw_http_09;
|
state = sw_check_uri_http_09;
|
||||||
break;
|
break;
|
||||||
case CR:
|
case CR:
|
||||||
r->uri_end = p;
|
r->uri_end = p;
|
||||||
@ -503,6 +527,30 @@ ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
/* space+ after URI */
|
||||||
|
case sw_check_uri_http_09:
|
||||||
|
switch (ch) {
|
||||||
|
case ' ':
|
||||||
|
break;
|
||||||
|
case CR:
|
||||||
|
r->http_minor = 9;
|
||||||
|
state = sw_almost_done;
|
||||||
|
break;
|
||||||
|
case LF:
|
||||||
|
r->http_minor = 9;
|
||||||
|
goto done;
|
||||||
|
case 'H':
|
||||||
|
r->http_protocol.data = p;
|
||||||
|
state = sw_http_H;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
r->space_in_uri = 1;
|
||||||
|
state = sw_check_uri;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
/* URI */
|
/* URI */
|
||||||
case sw_uri:
|
case sw_uri:
|
||||||
|
|
||||||
@ -549,7 +597,9 @@ ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b)
|
|||||||
state = sw_http_H;
|
state = sw_http_H;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return NGX_HTTP_PARSE_INVALID_REQUEST;
|
r->space_in_uri = 1;
|
||||||
|
state = sw_uri;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -756,6 +756,7 @@ ngx_http_process_request_line(ngx_event_t *rev)
|
|||||||
r->unparsed_uri.len = r->uri_end - r->uri_start;
|
r->unparsed_uri.len = r->uri_end - r->uri_start;
|
||||||
r->unparsed_uri.data = r->uri_start;
|
r->unparsed_uri.data = r->uri_start;
|
||||||
|
|
||||||
|
r->valid_unparsed_uri = r->space_in_uri ? 0 : 1;
|
||||||
|
|
||||||
r->method_name.len = r->method_end - r->request_start + 1;
|
r->method_name.len = r->method_end - r->request_start + 1;
|
||||||
r->method_name.data = r->request_line.data;
|
r->method_name.data = r->request_line.data;
|
||||||
|
@ -437,6 +437,9 @@ struct ngx_http_request_s {
|
|||||||
/* URI with "+" */
|
/* URI with "+" */
|
||||||
unsigned plus_in_uri:1;
|
unsigned plus_in_uri:1;
|
||||||
|
|
||||||
|
/* URI with " " */
|
||||||
|
unsigned space_in_uri:1;
|
||||||
|
|
||||||
unsigned invalid_header:1;
|
unsigned invalid_header:1;
|
||||||
|
|
||||||
unsigned add_uri_to_alias:1;
|
unsigned add_uri_to_alias:1;
|
||||||
|
Loading…
Reference in New Issue
Block a user