Quantcast

client_max_body_size and 100 Continue/413 Request Entity Too Large

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

client_max_body_size and 100 Continue/413 Request Entity Too Large

Joe Shaw
Hi,

I have a web app that accepts uploads from clients.  We have a relatively high client_max_body_size set, and I'd like for clients to be able to be quickly rejected if they intend to upload files larger than the max body size.  The "Expect: 100-continue" header seems ideally suited for this.

However, when I try to upload a large file with curl (which uses the Expect header), nginx responds with "100 Continue" instead of "413 Request Entity Too Large":

> POST /test HTTP/1.1
> User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8r zlib/1.2.5
> Host: example.com
> Accept: */*
> Content-Length: 454327718
> Content-Type: application/octet-stream
> Expect: 100-continue
< HTTP/1.1 100 Continue
< HTTP/1.1 413 Request Entity Too Large
< Server: nginx/1.2.0
< Content-Type: text/html; charset=utf-8
< Date: Fri, 16 Nov 2012 20:40:24 GMT
< Connection: Keep-Alive
< Content-Length: 198

I would have expected nginx to return the 413 error instead of the 100 status code.  As it is now, the client will continue to upload its data because it got the go ahead via the 100 status code.

Is this a bug (or unimplemented feature) in nginx?  Is there any way around this?  As you can see from the response, I'm using nginx 1.2.0, which I realize isn't the latest, but I couldn't find anything related to this in the CHANGES file.

Thanks,
Joe

_______________________________________________
nginx mailing list
[hidden email]
http://mailman.nginx.org/mailman/listinfo/nginx
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: client_max_body_size and 100 Continue/413 Request Entity Too Large

Maxim Dounin
Hello!

On Fri, Nov 16, 2012 at 03:58:51PM -0500, Joe Shaw wrote:

> Hi,
>
> I have a web app that accepts uploads from clients.  We have a relatively
> high client_max_body_size set, and I'd like for clients to be able to be
> quickly rejected if they intend to upload files larger than the max body
> size.  The "Expect: 100-continue" header seems ideally suited for this.
>
> However, when I try to upload a large file with curl (which uses the Expect
> header), nginx responds with "100 Continue" instead of "413 Request Entity
> Too Large":
>
> > POST /test HTTP/1.1
> > User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0
> OpenSSL/0.9.8r zlib/1.2.5
> > Host: example.com
> > Accept: */*
> > Content-Length: 454327718
> > Content-Type: application/octet-stream
> > Expect: 100-continue
> >
> < HTTP/1.1 100 Continue
> < HTTP/1.1 413 Request Entity Too Large
> < Server: nginx/1.2.0
> < Content-Type: text/html; charset=utf-8
> < Date: Fri, 16 Nov 2012 20:40:24 GMT
> < Connection: Keep-Alive
> < Content-Length: 198
>
> I would have expected nginx to return the 413 error instead of the 100
> status code.  As it is now, the client will continue to upload its data
> because it got the go ahead via the 100 status code.
>
> Is this a bug (or unimplemented feature) in nginx?  Is there any way around
> this?  As you can see from the response, I'm using nginx 1.2.0, which I
> realize isn't the latest, but I couldn't find anything related to this in
> the CHANGES file.

As of now nginx is only capable of recognizing "Expect:
100-continue" and returning "100 Continue" response to avoid
upload delays.  It's not able to recognize it is going to return
fatal error and isn't able to avoid sending "100 Continue" in this
case.

--
Maxim Dounin
http://nginx.com/support.html

_______________________________________________
nginx mailing list
[hidden email]
http://mailman.nginx.org/mailman/listinfo/nginx
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: client_max_body_size and 100 Continue/413 Request Entity Too Large

Igor Sysoev-2
In reply to this post by Joe Shaw
On Nov 17, 2012, at 0:58 , Joe Shaw wrote:

Hi,

I have a web app that accepts uploads from clients.  We have a relatively high client_max_body_size set, and I'd like for clients to be able to be quickly rejected if they intend to upload files larger than the max body size.  The "Expect: 100-continue" header seems ideally suited for this.

However, when I try to upload a large file with curl (which uses the Expect header), nginx responds with "100 Continue" instead of "413 Request Entity Too Large":

> POST /test HTTP/1.1
> User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8r zlib/1.2.5
> Host: example.com
> Accept: */*
> Content-Length: 454327718
> Content-Type: application/octet-stream
> Expect: 100-continue
< HTTP/1.1 100 Continue
< HTTP/1.1 413 Request Entity Too Large
< Server: nginx/1.2.0
< Content-Type: text/html; charset=utf-8
< Date: Fri, 16 Nov 2012 20:40:24 GMT
< Connection: Keep-Alive
< Content-Length: 198

I would have expected nginx to return the 413 error instead of the 100 status code.  As it is now, the client will continue to upload its data because it got the go ahead via the 100 status code.

Is this a bug (or unimplemented feature) in nginx?  Is there any way around this?  As you can see from the response, I'm using nginx 1.2.0, which I realize isn't the latest, but I couldn't find anything related to this in the CHANGES file.

The attached patch should fix the bug.



_______________________________________________
nginx mailing list
[hidden email]
http://mailman.nginx.org/mailman/listinfo/nginx

patch.expect.txt (556 bytes) Download Attachment
Loading...