Hi, On Tuesday, Jun 20, 2017 11:53 PM +0300, Maxim Dounin wrote:
>> >On Tue, Jun 20, 2017 at 12:56:15AM +0800, 胡聪 (hucc) wrote: >> > >> >> Returning 415 does not conform to the HTTP protocol when image and >> >> proxy_pass >> >> configured in same location. >> >> >> >> # HG changeset patch >> >> # User hucongcong <[email protected]> >> >> # Date 1497890354 -28800 >> >> # Tue Jun 20 00:39:14 2017 +0800 >> >> # Node ID af3a94de6a6549dec5e1205514eda1893313a14c >> >> # Parent d1816a2696de8c2faa1cd913a151e5f62a8620f3 >> >> Http image_filter: return 405 when method is HEAD and body is empty. >> >> >> >> diff -r d1816a2696de -r af3a94de6a65 >> >> src/http/modules/ngx_http_image_filter_module.c >> >> --- a/src/http/modules/ngx_http_image_filter_module.c Fri Jun 16 >> >> 18:15:58 2017 +0300 >> >> +++ b/src/http/modules/ngx_http_image_filter_module.c Tue Jun 20 >> >> 00:39:14 2017 +0800 >> >> @@ -330,6 +330,12 @@ ngx_http_image_body_filter(ngx_http_requ >> >> } >> >> } >> >> >> >> + if (r->method & NGX_HTTP_HEAD) { >> >> + return ngx_http_filter_finalize_request(r, >> >> + >> >> &ngx_http_image_filter_module, >> >> + NGX_HTTP_NOT_ALLOWED); >> >> + } >> >> + >> >> return ngx_http_filter_finalize_request(r, >> >> >> >> &ngx_http_image_filter_module, >> >> >> >> NGX_HTTP_UNSUPPORTED_MEDIA_TYPE); >> > >> >Please clarify why you think that the current code is wrong. I >> >don't see any problems with returning 415 to HEAD requests as long >> >we are going to return 415 to GETs. >> >> Ok, the problem is that nginx will return 200 to GET request and >> 415 to HEAD request. >> >> The configuration looks like: >> #proxy_method GET;#not configured >> location / { >> image resize 180 360; >> #... >> proxy_pass http://test_upstream$uri; >> } > >Ok, so the problem appears when using proxy_pass without >additional configuration, image_filter, and a HEAD request. > >Unfortunately, the suggested change will also break the correct >behaviour in other cases, for example, when serving static files. >Using "proxy_method GET;" might be a better option. Thanks for the reply. Which behaviour will be breaked? Is the following change right? + if (r->method & NGX_HTTP_HEAD && ngx_buf_size(in->buf) == 0) { + return ngx_http_filter_finalize_request(r, + &ngx_http_image_filter_module, + NGX_HTTP_NOT_ALLOWED); + } _______________________________________________ nginx-devel mailing list [email protected] http://mailman.nginx.org/mailman/listinfo/nginx-devel
