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

Reply via email to