Re: [patch] Slice filter: support for empty file.

2017-06-21 Thread 胡聪 (hucc)
Hi,

On Tuesday, Jun 20, 2017 11:01 PM +0300, Maxim Dounin wrote:

>On Tue, Jun 20, 2017 at 10:39:44AM +0800, 胡聪 (hucc) wrote:
>
>> >416 will be returned when the request has no Range HEADER and the target 
>> >file is
>> >empty.  Apparently, it does not conform to the HTTP protocol. Empty file 
>> >seems
>> >inevitable in the CDN service where Nginx is heavily used.
>
>Returning the 416 response with some headers deleted and status
>code changed to 200 doesn't look like a safe solution.
>
>On the other hand, changing nginx's range filter to allow range
>requests to 0-byte files should make this unneeded.  I've reopened
>ticket #1031 which is about range requests to 0-byte files, see
>https://trac.nginx.org/nginx/ticket/1031.

Looking forward to this feature! I've tried to implement this feature, and it's
a bit hard for me now.
___
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel

Re: [patch] Slice filter: support for empty file.

2017-06-20 Thread Maxim Dounin
Hello!

On Tue, Jun 20, 2017 at 10:39:44AM +0800, 胡聪 (hucc) wrote:

> Hi,
> 
> >416 will be returned when the request has no Range HEADER and the target 
> >file is
> >empty.  Apparently, it does not conform to the HTTP protocol. Empty file 
> >seems
> >inevitable in the CDN service where Nginx is heavily used.
> >
> ># HG changeset patch
> ># User hucongcong 
> ># Date 1497892764 -28800
> >#  Tue Jun 20 01:19:24 2017 +0800
> ># Node ID 79d38b2d27d4eb92395cf1ff43bbfe23498bc69a
> ># Parent  d1816a2696de8c2faa1cd913a151e5f62a8620f3
> >Slice filter: support for empty file.
> 
> The following modifications may be more appropriate.
> 
> # HG changeset patch
> # User hucongcong 
> # Date 1497926137 -28800
> #  Tue Jun 20 10:35:37 2017 +0800
> # Node ID e42abb7e28c4f0dd3d66cb81aa2623e7fae8b4da
> # Parent  a39bc74873faf9e5bea616561b43f6ecc55229f9
> Slice filter: support for empty file.
> 
> diff -r a39bc74873fa -r e42abb7e28c4 
> src/http/modules/ngx_http_slice_filter_module.c
> --- a/src/http/modules/ngx_http_slice_filter_module.c   Mon Jun 19 14:25:42 
> 2017 +0300
> +++ b/src/http/modules/ngx_http_slice_filter_module.c   Tue Jun 20 10:35:37 
> 2017 +0800
> @@ -114,7 +114,21 @@ ngx_http_slice_header_filter(ngx_http_re
>  }
> 
>  if (r->headers_out.status != NGX_HTTP_PARTIAL_CONTENT) {
> +
>  if (r == r->main) {
> +if (r->headers_in.range == NULL
> +&& r->headers_out.status == NGX_HTTP_RANGE_NOT_SATISFIABLE)
> +{
> +r->header_only = 1;
> +ngx_str_null(>headers_out.content_type);
> +
> +r->headers_out.status = NGX_HTTP_OK;
> +r->headers_out.status_line.len = 0;
> +r->headers_out.content_length_n = 0;
> +r->headers_out.content_range->hash = 0;
> +r->headers_out.content_range = NULL;
> +}
> +
>  ngx_http_set_ctx(r, NULL, ngx_http_slice_filter_module);
>  return ngx_http_next_header_filter(r);
>  }

Returning the 416 response with some headers deleted and status 
code changed to 200 doesn't look like a safe solution.

On the other hand, changing nginx's range filter to allow range 
requests to 0-byte files should make this unneeded.  I've reopened 
ticket #1031 which is about range requests to 0-byte files, see 
https://trac.nginx.org/nginx/ticket/1031.

-- 
Maxim Dounin
http://nginx.org/
___
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel

Re:[patch] Slice filter: support for empty file.

2017-06-19 Thread 胡聪 (hucc)
Hi,

>416 will be returned when the request has no Range HEADER and the target file 
>is
>empty.  Apparently, it does not conform to the HTTP protocol. Empty file seems
>inevitable in the CDN service where Nginx is heavily used.
>
># HG changeset patch
># User hucongcong 
># Date 1497892764 -28800
>#  Tue Jun 20 01:19:24 2017 +0800
># Node ID 79d38b2d27d4eb92395cf1ff43bbfe23498bc69a
># Parent  d1816a2696de8c2faa1cd913a151e5f62a8620f3
>Slice filter: support for empty file.

The following modifications may be more appropriate.

# HG changeset patch
# User hucongcong 
# Date 1497926137 -28800
#  Tue Jun 20 10:35:37 2017 +0800
# Node ID e42abb7e28c4f0dd3d66cb81aa2623e7fae8b4da
# Parent  a39bc74873faf9e5bea616561b43f6ecc55229f9
Slice filter: support for empty file.

diff -r a39bc74873fa -r e42abb7e28c4 
src/http/modules/ngx_http_slice_filter_module.c
--- a/src/http/modules/ngx_http_slice_filter_module.c   Mon Jun 19 14:25:42 
2017 +0300
+++ b/src/http/modules/ngx_http_slice_filter_module.c   Tue Jun 20 10:35:37 
2017 +0800
@@ -114,7 +114,21 @@ ngx_http_slice_header_filter(ngx_http_re
 }

 if (r->headers_out.status != NGX_HTTP_PARTIAL_CONTENT) {
+
 if (r == r->main) {
+if (r->headers_in.range == NULL
+&& r->headers_out.status == NGX_HTTP_RANGE_NOT_SATISFIABLE)
+{
+r->header_only = 1;
+ngx_str_null(>headers_out.content_type);
+
+r->headers_out.status = NGX_HTTP_OK;
+r->headers_out.status_line.len = 0;
+r->headers_out.content_length_n = 0;
+r->headers_out.content_range->hash = 0;
+r->headers_out.content_range = NULL;
+}
+
 ngx_http_set_ctx(r, NULL, ngx_http_slice_filter_module);
 return ngx_http_next_header_filter(r);
 }
___
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel