I tried patching nginx to produce a '210 Custom Response' which is just a 2xx
success response but without any content. As it doesn't use content I thought
it should behave like the existing HTTP_NO_CONTENT response.
Is there any problem in doing it this way? Is there a better way to add it?
diff -crB /usr/src/redhat/BUILD/nginx-0.7.61/src/http/modules/ngx_http_headers_filter_module.c nginx-0.7.61/src/http/modules/ngx_http_headers_filter_module.c
*** /usr/src/redhat/BUILD/nginx-0.7.61/src/http/modules/ngx_http_headers_filter_module.c 2009-03-26 21:34:37.000000000 +0800
--- nginx-0.7.61/src/http/modules/ngx_http_headers_filter_module.c 2009-07-08 10:25:54.000000000 +0800
***************
*** 145,150 ****
--- 145,151 ----
|| r != r->main
|| (r->headers_out.status != NGX_HTTP_OK
&& r->headers_out.status != NGX_HTTP_NO_CONTENT
+ && r->headers_out.status != NGX_HTTP_CUSTOM_RESPONSE
&& r->headers_out.status != NGX_HTTP_MOVED_PERMANENTLY
&& r->headers_out.status != NGX_HTTP_MOVED_TEMPORARILY
&& r->headers_out.status != NGX_HTTP_NOT_MODIFIED))
diff -crB /usr/src/redhat/BUILD/nginx-0.7.61/src/http/modules/perl/nginx.pm nginx-0.7.61/src/http/modules/perl/nginx.pm
*** /usr/src/redhat/BUILD/nginx-0.7.61/src/http/modules/perl/nginx.pm 2009-06-22 17:23:35.000000000 +0800
--- nginx-0.7.61/src/http/modules/perl/nginx.pm 2009-07-08 10:23:53.000000000 +0800
***************
*** 16,21 ****
--- 16,22 ----
HTTP_CREATED
HTTP_NO_CONTENT
HTTP_PARTIAL_CONTENT
+ HTTP_CUSTOM_RESPONSE
HTTP_MOVED_PERMANENTLY
HTTP_MOVED_TEMPORARILY
***************
*** 61,66 ****
--- 62,68 ----
use constant HTTP_CREATED => 201;
use constant HTTP_NO_CONTENT => 204;
use constant HTTP_PARTIAL_CONTENT => 206;
+ use constant HTTP_CUSTOM_RESPONSE => 210;
use constant HTTP_MOVED_PERMANENTLY => 301;
use constant HTTP_MOVED_TEMPORARILY => 302;
diff -crB /usr/src/redhat/BUILD/nginx-0.7.61/src/http/ngx_http_header_filter_module.c nginx-0.7.61/src/http/ngx_http_header_filter_module.c
*** /usr/src/redhat/BUILD/nginx-0.7.61/src/http/ngx_http_header_filter_module.c 2009-05-18 20:58:19.000000000 +0800
--- nginx-0.7.61/src/http/ngx_http_header_filter_module.c 2009-07-08 10:36:55.000000000 +0800
***************
*** 58,67 ****
ngx_string("204 No Content"),
ngx_null_string, /* "205 Reset Content" */
ngx_string("206 Partial Content"),
/* ngx_null_string, */ /* "207 Multi-Status" */
! #define NGX_HTTP_LAST_LEVEL_200 207
#define NGX_HTTP_LEVEL_200 (NGX_HTTP_LAST_LEVEL_200 - 200)
/* ngx_null_string, */ /* "300 Multiple Choices" */
--- 58,71 ----
ngx_string("204 No Content"),
ngx_null_string, /* "205 Reset Content" */
ngx_string("206 Partial Content"),
+ ngx_null_string,
+ ngx_null_string,
+ ngx_null_string,
+ ngx_string("210 Custom Response"),
/* ngx_null_string, */ /* "207 Multi-Status" */
! #define NGX_HTTP_LAST_LEVEL_200 211
#define NGX_HTTP_LEVEL_200 (NGX_HTTP_LAST_LEVEL_200 - 200)
/* ngx_null_string, */ /* "300 Multiple Choices" */
***************
*** 220,226 ****
{
/* 2XX */
! if (status == NGX_HTTP_NO_CONTENT) {
r->header_only = 1;
r->headers_out.content_type.len = 0;
r->headers_out.content_type.data = NULL;
--- 224,230 ----
{
/* 2XX */
! if (status == NGX_HTTP_NO_CONTENT || status == NGX_HTTP_CUSTOM_RESPONSE) {
r->header_only = 1;
r->headers_out.content_type.len = 0;
r->headers_out.content_type.data = NULL;
diff -crB /usr/src/redhat/BUILD/nginx-0.7.61/src/http/ngx_http_request.c nginx-0.7.61/src/http/ngx_http_request.c
*** /usr/src/redhat/BUILD/nginx-0.7.61/src/http/ngx_http_request.c 2009-06-22 17:31:33.000000000 +0800
--- nginx-0.7.61/src/http/ngx_http_request.c 2009-07-08 10:23:21.000000000 +0800
***************
*** 1852,1858 ****
if (rc >= NGX_HTTP_SPECIAL_RESPONSE
|| rc == NGX_HTTP_CREATED
! || rc == NGX_HTTP_NO_CONTENT)
{
if (rc == NGX_HTTP_CLOSE) {
ngx_http_close_request(r, rc);
--- 1852,1859 ----
if (rc >= NGX_HTTP_SPECIAL_RESPONSE
|| rc == NGX_HTTP_CREATED
! || rc == NGX_HTTP_NO_CONTENT
! || rc == NGX_HTTP_CUSTOM_RESPONSE)
{
if (rc == NGX_HTTP_CLOSE) {
ngx_http_close_request(r, rc);
diff -crB /usr/src/redhat/BUILD/nginx-0.7.61/src/http/ngx_http_request.h nginx-0.7.61/src/http/ngx_http_request.h
*** /usr/src/redhat/BUILD/nginx-0.7.61/src/http/ngx_http_request.h 2009-05-22 19:05:26.000000000 +0800
--- nginx-0.7.61/src/http/ngx_http_request.h 2009-07-08 10:22:48.000000000 +0800
***************
*** 67,72 ****
--- 67,74 ----
#define NGX_HTTP_NO_CONTENT 204
#define NGX_HTTP_PARTIAL_CONTENT 206
+ #define NGX_HTTP_CUSTOM_RESPONSE 210
+
#define NGX_HTTP_SPECIAL_RESPONSE 300
#define NGX_HTTP_MOVED_PERMANENTLY 301
#define NGX_HTTP_MOVED_TEMPORARILY 302
diff -crB /usr/src/redhat/BUILD/nginx-0.7.61/src/http/ngx_http_script.c nginx-0.7.61/src/http/ngx_http_script.c
*** /usr/src/redhat/BUILD/nginx-0.7.61/src/http/ngx_http_script.c 2009-04-27 19:32:33.000000000 +0800
--- nginx-0.7.61/src/http/ngx_http_script.c 2009-07-08 10:27:24.000000000 +0800
***************
*** 1281,1287 ****
e->status = code->status;
! if (code->status == NGX_HTTP_NO_CONTENT) {
e->request->header_only = 1;
e->request->zero_body = 1;
}
--- 1281,1289 ----
e->status = code->status;
! if (code->status == NGX_HTTP_NO_CONTENT
! || code->status == NGX_HTTP_CUSTOM_RESPONSE) {
!
e->request->header_only = 1;
e->request->zero_body = 1;
}
diff -crB /usr/src/redhat/BUILD/nginx-0.7.61/src/http/ngx_http_special_response.c nginx-0.7.61/src/http/ngx_http_special_response.c
*** /usr/src/redhat/BUILD/nginx-0.7.61/src/http/ngx_http_special_response.c 2009-05-25 17:06:29.000000000 +0800
--- nginx-0.7.61/src/http/ngx_http_special_response.c 2009-07-08 10:28:09.000000000 +0800
***************
*** 404,410 ****
err = 0;
r->header_only = 1;
! } else if (error == NGX_HTTP_NO_CONTENT) {
/* 204 */
err = 0;
--- 404,410 ----
err = 0;
r->header_only = 1;
! } else if (error == NGX_HTTP_NO_CONTENT || error == NGX_HTTP_CUSTOM_RESPONSE) {
/* 204 */
err = 0;