mirror of
https://github.com/nginx/nginx.git
synced 2025-06-08 10:12:39 +08:00
allow any status
This commit is contained in:
parent
ecd822809d
commit
395f895900
@ -61,7 +61,8 @@ static ngx_str_t ngx_http_status_lines[] = {
|
|||||||
|
|
||||||
/* ngx_null_string, */ /* "207 Multi-Status" */
|
/* ngx_null_string, */ /* "207 Multi-Status" */
|
||||||
|
|
||||||
#define NGX_HTTP_LEVEL_200 7
|
#define NGX_HTTP_LAST_LEVEL_200 207
|
||||||
|
#define NGX_HTTP_LEVEL_200 (NGX_HTTP_LAST_LEVEL_200 - 200)
|
||||||
|
|
||||||
/* ngx_null_string, */ /* "300 Multiple Choices" */
|
/* ngx_null_string, */ /* "300 Multiple Choices" */
|
||||||
|
|
||||||
@ -74,7 +75,8 @@ static ngx_str_t ngx_http_status_lines[] = {
|
|||||||
/* ngx_null_string, */ /* "306 unused" */
|
/* ngx_null_string, */ /* "306 unused" */
|
||||||
/* ngx_null_string, */ /* "307 Temporary Redirect" */
|
/* ngx_null_string, */ /* "307 Temporary Redirect" */
|
||||||
|
|
||||||
#define NGX_HTTP_LEVEL_300 4
|
#define NGX_HTTP_LAST_LEVEL_300 305
|
||||||
|
#define NGX_HTTP_LEVEL_300 (NGX_HTTP_LAST_LEVEL_300 - 301)
|
||||||
|
|
||||||
ngx_string("400 Bad Request"),
|
ngx_string("400 Bad Request"),
|
||||||
ngx_string("401 Unauthorized"),
|
ngx_string("401 Unauthorized"),
|
||||||
@ -106,7 +108,8 @@ static ngx_str_t ngx_http_status_lines[] = {
|
|||||||
/* ngx_null_string, */ /* "423 Locked" */
|
/* ngx_null_string, */ /* "423 Locked" */
|
||||||
/* ngx_null_string, */ /* "424 Failed Dependency" */
|
/* ngx_null_string, */ /* "424 Failed Dependency" */
|
||||||
|
|
||||||
#define NGX_HTTP_LEVEL_400 17
|
#define NGX_HTTP_LAST_LEVEL_400 417
|
||||||
|
#define NGX_HTTP_LEVEL_400 (NGX_HTTP_LAST_LEVEL_400 - 400)
|
||||||
|
|
||||||
ngx_string("500 Internal Server Error"),
|
ngx_string("500 Internal Server Error"),
|
||||||
ngx_string("501 Method Not Implemented"),
|
ngx_string("501 Method Not Implemented"),
|
||||||
@ -120,6 +123,9 @@ static ngx_str_t ngx_http_status_lines[] = {
|
|||||||
/* ngx_null_string, */ /* "508 unused" */
|
/* ngx_null_string, */ /* "508 unused" */
|
||||||
/* ngx_null_string, */ /* "509 unused" */
|
/* ngx_null_string, */ /* "509 unused" */
|
||||||
/* ngx_null_string, */ /* "510 Not Extended" */
|
/* ngx_null_string, */ /* "510 Not Extended" */
|
||||||
|
|
||||||
|
#define NGX_HTTP_LAST_LEVEL_500 508
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -153,7 +159,7 @@ ngx_http_header_filter(ngx_http_request_t *r)
|
|||||||
{
|
{
|
||||||
u_char *p;
|
u_char *p;
|
||||||
size_t len;
|
size_t len;
|
||||||
ngx_str_t host;
|
ngx_str_t host, *status_line;
|
||||||
ngx_buf_t *b;
|
ngx_buf_t *b;
|
||||||
ngx_uint_t status, i, port;
|
ngx_uint_t status, i, port;
|
||||||
ngx_chain_t out;
|
ngx_chain_t out;
|
||||||
@ -199,17 +205,21 @@ ngx_http_header_filter(ngx_http_request_t *r)
|
|||||||
|
|
||||||
if (r->headers_out.status_line.len) {
|
if (r->headers_out.status_line.len) {
|
||||||
len += r->headers_out.status_line.len;
|
len += r->headers_out.status_line.len;
|
||||||
|
status_line = &r->headers_out.status_line;
|
||||||
#if (NGX_SUPPRESS_WARN)
|
#if (NGX_SUPPRESS_WARN)
|
||||||
status = NGX_INVALID_ARRAY_INDEX;
|
status = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
if (r->headers_out.status < NGX_HTTP_MOVED_PERMANENTLY) {
|
status = r->headers_out.status;
|
||||||
/* 2XX */
|
|
||||||
status = r->headers_out.status - NGX_HTTP_OK;
|
|
||||||
|
|
||||||
if (r->headers_out.status == NGX_HTTP_NO_CONTENT) {
|
if (status >= NGX_HTTP_OK
|
||||||
|
&& status < NGX_HTTP_LAST_LEVEL_200)
|
||||||
|
{
|
||||||
|
/* 2XX */
|
||||||
|
|
||||||
|
if (status == NGX_HTTP_NO_CONTENT) {
|
||||||
r->header_only = 1;
|
r->header_only = 1;
|
||||||
r->headers_out.content_type.len = 0;
|
r->headers_out.content_type.len = 0;
|
||||||
r->headers_out.content_type.data = NULL;
|
r->headers_out.content_type.data = NULL;
|
||||||
@ -219,30 +229,50 @@ ngx_http_header_filter(ngx_http_request_t *r)
|
|||||||
r->headers_out.content_length_n = -1;
|
r->headers_out.content_length_n = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (r->headers_out.status < NGX_HTTP_BAD_REQUEST) {
|
status -= NGX_HTTP_OK;
|
||||||
/* 3XX */
|
status_line = &ngx_http_status_lines[status];
|
||||||
status = r->headers_out.status - NGX_HTTP_MOVED_PERMANENTLY
|
len += ngx_http_status_lines[status].len;
|
||||||
+ NGX_HTTP_LEVEL_200;
|
|
||||||
|
|
||||||
if (r->headers_out.status == NGX_HTTP_NOT_MODIFIED) {
|
} else if (status >= NGX_HTTP_MOVED_PERMANENTLY
|
||||||
|
&& status < NGX_HTTP_LAST_LEVEL_300)
|
||||||
|
{
|
||||||
|
/* 3XX */
|
||||||
|
|
||||||
|
if (status == NGX_HTTP_NOT_MODIFIED) {
|
||||||
r->header_only = 1;
|
r->header_only = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (r->headers_out.status < NGX_HTTP_INTERNAL_SERVER_ERROR) {
|
status = status - NGX_HTTP_MOVED_PERMANENTLY + NGX_HTTP_LEVEL_200;
|
||||||
|
status_line = &ngx_http_status_lines[status];
|
||||||
|
len += ngx_http_status_lines[status].len;
|
||||||
|
|
||||||
|
} else if (status >= NGX_HTTP_BAD_REQUEST
|
||||||
|
&& status < NGX_HTTP_LAST_LEVEL_400)
|
||||||
|
{
|
||||||
/* 4XX */
|
/* 4XX */
|
||||||
status = r->headers_out.status - NGX_HTTP_BAD_REQUEST
|
status = status - NGX_HTTP_BAD_REQUEST
|
||||||
+ NGX_HTTP_LEVEL_200
|
+ NGX_HTTP_LEVEL_200
|
||||||
+ NGX_HTTP_LEVEL_300;
|
+ NGX_HTTP_LEVEL_300;
|
||||||
|
|
||||||
} else {
|
status_line = &ngx_http_status_lines[status];
|
||||||
|
len += ngx_http_status_lines[status].len;
|
||||||
|
|
||||||
|
} else if (status >= NGX_HTTP_INTERNAL_SERVER_ERROR
|
||||||
|
&& status < NGX_HTTP_LAST_LEVEL_500)
|
||||||
|
{
|
||||||
/* 5XX */
|
/* 5XX */
|
||||||
status = r->headers_out.status - NGX_HTTP_INTERNAL_SERVER_ERROR
|
status = status - NGX_HTTP_INTERNAL_SERVER_ERROR
|
||||||
+ NGX_HTTP_LEVEL_200
|
+ NGX_HTTP_LEVEL_200
|
||||||
+ NGX_HTTP_LEVEL_300
|
+ NGX_HTTP_LEVEL_300
|
||||||
+ NGX_HTTP_LEVEL_400;
|
+ NGX_HTTP_LEVEL_400;
|
||||||
}
|
|
||||||
|
|
||||||
|
status_line = &ngx_http_status_lines[status];
|
||||||
len += ngx_http_status_lines[status].len;
|
len += ngx_http_status_lines[status].len;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
len += NGX_INT_T_LEN;
|
||||||
|
status_line = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
|
clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
|
||||||
@ -400,13 +430,11 @@ ngx_http_header_filter(ngx_http_request_t *r)
|
|||||||
b->last = ngx_cpymem(b->last, "HTTP/1.1 ", sizeof("HTTP/1.x ") - 1);
|
b->last = ngx_cpymem(b->last, "HTTP/1.1 ", sizeof("HTTP/1.x ") - 1);
|
||||||
|
|
||||||
/* status line */
|
/* status line */
|
||||||
if (r->headers_out.status_line.len) {
|
if (status_line) {
|
||||||
b->last = ngx_copy(b->last, r->headers_out.status_line.data,
|
b->last = ngx_copy(b->last, status_line->data, status_line->len);
|
||||||
r->headers_out.status_line.len);
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
b->last = ngx_copy(b->last, ngx_http_status_lines[status].data,
|
b->last = ngx_sprintf(b->last, "%ui", status);
|
||||||
ngx_http_status_lines[status].len);
|
|
||||||
}
|
}
|
||||||
*b->last++ = CR; *b->last++ = LF;
|
*b->last++ = CR; *b->last++ = LF;
|
||||||
|
|
||||||
|
@ -275,14 +275,16 @@ static ngx_str_t ngx_http_error_pages[] = {
|
|||||||
|
|
||||||
ngx_null_string, /* 201, 204 */
|
ngx_null_string, /* 201, 204 */
|
||||||
|
|
||||||
#define NGX_HTTP_LEVEL_200 1
|
#define NGX_HTTP_LAST_LEVEL_200 202
|
||||||
|
#define NGX_HTTP_LEVEL_200 (NGX_HTTP_LAST_LEVEL_200 - 201)
|
||||||
|
|
||||||
/* ngx_null_string, */ /* 300 */
|
/* ngx_null_string, */ /* 300 */
|
||||||
ngx_string(ngx_http_error_301_page),
|
ngx_string(ngx_http_error_301_page),
|
||||||
ngx_string(ngx_http_error_302_page),
|
ngx_string(ngx_http_error_302_page),
|
||||||
ngx_null_string, /* 303 */
|
ngx_null_string, /* 303 */
|
||||||
|
|
||||||
#define NGX_HTTP_LEVEL_300 3
|
#define NGX_HTTP_LAST_LEVEL_300 304
|
||||||
|
#define NGX_HTTP_LEVEL_300 (NGX_HTTP_LAST_LEVEL_300 - 301)
|
||||||
|
|
||||||
ngx_string(ngx_http_error_400_page),
|
ngx_string(ngx_http_error_400_page),
|
||||||
ngx_string(ngx_http_error_401_page),
|
ngx_string(ngx_http_error_401_page),
|
||||||
@ -302,7 +304,8 @@ static ngx_str_t ngx_http_error_pages[] = {
|
|||||||
ngx_string(ngx_http_error_415_page),
|
ngx_string(ngx_http_error_415_page),
|
||||||
ngx_string(ngx_http_error_416_page),
|
ngx_string(ngx_http_error_416_page),
|
||||||
|
|
||||||
#define NGX_HTTP_LEVEL_400 17
|
#define NGX_HTTP_LAST_LEVEL_400 417
|
||||||
|
#define NGX_HTTP_LEVEL_400 (NGX_HTTP_LAST_LEVEL_400 - 400)
|
||||||
|
|
||||||
ngx_string(ngx_http_error_495_page), /* 495, https certificate error */
|
ngx_string(ngx_http_error_495_page), /* 495, https certificate error */
|
||||||
ngx_string(ngx_http_error_496_page), /* 496, https no certificate */
|
ngx_string(ngx_http_error_496_page), /* 496, https no certificate */
|
||||||
@ -318,6 +321,9 @@ static ngx_str_t ngx_http_error_pages[] = {
|
|||||||
ngx_null_string, /* 505 */
|
ngx_null_string, /* 505 */
|
||||||
ngx_null_string, /* 506 */
|
ngx_null_string, /* 506 */
|
||||||
ngx_string(ngx_http_error_507_page)
|
ngx_string(ngx_http_error_507_page)
|
||||||
|
|
||||||
|
#define NGX_HTTP_LAST_LEVEL_500 508
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -402,16 +408,22 @@ ngx_http_special_response_handler(ngx_http_request_t *r, ngx_int_t error)
|
|||||||
/* 204 */
|
/* 204 */
|
||||||
err = 0;
|
err = 0;
|
||||||
|
|
||||||
} else if (error < NGX_HTTP_BAD_REQUEST) {
|
} else if (error >= NGX_HTTP_MOVED_PERMANENTLY
|
||||||
|
&& error < NGX_HTTP_LAST_LEVEL_300)
|
||||||
|
{
|
||||||
/* 3XX */
|
/* 3XX */
|
||||||
err = error - NGX_HTTP_MOVED_PERMANENTLY + NGX_HTTP_LEVEL_200;
|
err = error - NGX_HTTP_MOVED_PERMANENTLY + NGX_HTTP_LEVEL_200;
|
||||||
|
|
||||||
} else if (error < NGX_HTTP_OWN_CODES) {
|
} else if (error >= NGX_HTTP_BAD_REQUEST
|
||||||
|
&& error < NGX_HTTP_LAST_LEVEL_400)
|
||||||
|
{
|
||||||
/* 4XX */
|
/* 4XX */
|
||||||
err = error - NGX_HTTP_BAD_REQUEST + NGX_HTTP_LEVEL_200
|
err = error - NGX_HTTP_BAD_REQUEST + NGX_HTTP_LEVEL_200
|
||||||
+ NGX_HTTP_LEVEL_300;
|
+ NGX_HTTP_LEVEL_300;
|
||||||
|
|
||||||
} else {
|
} else if (error >= NGX_HTTP_OWN_CODES
|
||||||
|
&& error < NGX_HTTP_LAST_LEVEL_500)
|
||||||
|
{
|
||||||
/* 49X, 5XX */
|
/* 49X, 5XX */
|
||||||
err = error - NGX_HTTP_OWN_CODES + NGX_HTTP_LEVEL_200
|
err = error - NGX_HTTP_OWN_CODES + NGX_HTTP_LEVEL_200
|
||||||
+ NGX_HTTP_LEVEL_300
|
+ NGX_HTTP_LEVEL_300
|
||||||
@ -423,6 +435,10 @@ ngx_http_special_response_handler(ngx_http_request_t *r, ngx_int_t error)
|
|||||||
r->err_status = NGX_HTTP_BAD_REQUEST;
|
r->err_status = NGX_HTTP_BAD_REQUEST;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
/* unknown code, zero body */
|
||||||
|
err = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ngx_http_send_special_response(r, clcf, err);
|
return ngx_http_send_special_response(r, clcf, err);
|
||||||
|
Loading…
Reference in New Issue
Block a user