Thread overview | ||||||
---|---|---|---|---|---|---|
|
March 13, 2021 vibe.d throws HTTPServerErrorInfo if a file upload is too large before any of my code executes | ||||
---|---|---|---|---|
| ||||
I'm using vibe-d-0.9.3. I have file uploads working fine, but if the file it too large, it triggers this: enforceBadRequest(settings.maxRequestSize <= 0 || contentLength <= settings.maxRequestSize, "Request size too big"); inside the handleRequest function, long before my handler function is called. This prevents me from returning a useful error. Vibe sends a 400 error page: <!DOCTYPE html> <html> <head> <title>Error</title> </head> <body> <h1>Error Happened</h1><p>400</p><p></p><p>Request size too big</p><p>Request size too big</p><p>/home/chris/.dub/packages/vibe-d-0.9.3/vibe-d/http/vibe/http/server.d:2237</p> </body> </html> Does anyone have a solution for this? I guess I could catch the error in my main function, but I wouldn't know the context. Also, since Errors are not intended to be caught, shouldn't this be an Exception instead? |
March 13, 2021 Re: vibe.d throws HTTPServerErrorInfo if a file upload is too large before any of my code executes | ||||
---|---|---|---|---|
| ||||
Posted in reply to Chris Bare | On 3/13/21 3:53 PM, Chris Bare wrote: > I'm using vibe-d-0.9.3. I have file uploads working fine, but if the file it too large, it triggers this: > enforceBadRequest(settings.maxRequestSize <= 0 || contentLength <= settings.maxRequestSize, "Request size too big"); > > inside the handleRequest function, long before my handler function is called. > > This prevents me from returning a useful error. Vibe sends a 400 error page: > > <!DOCTYPE html> > <html> > <head> > <title>Error</title> > </head> > <body> > <h1>Error Happened</h1><p>400</p><p></p><p>Request size too big</p><p>Request size too big</p><p>/home/chris/.dub/packages/vibe-d-0.9.3/vibe-d/http/vibe/http/server.d:2237</p> > > </body> > </html> > > Does anyone have a solution for this? The boolean condition identifies exactly how to fix it, set maxRequestSize to -1 to disable, or to a value that's large enough. e.g.: auto settings = new HTTPServerSettings; settings.bindAddresses = ["0.0.0.0"]; .... // and all the other stuff settings.maxRequestSize = 50_000_000; auto listener = listenHTTP(settings, router); ... > I guess I could catch the error in my main function, but I wouldn't know the context. I would think that the error should be handled fine by vibe-d. Note, you can override error handling to put out a page of your choice based on the exception. > Also, since Errors are not intended to be caught, shouldn't this be an Exception instead? The thing you should get is HTTPStatusException, not an Error. -Steve |
March 14, 2021 Re: vibe.d throws HTTPServerErrorInfo if a file upload is too large before any of my code executes | ||||
---|---|---|---|---|
| ||||
Posted in reply to Steven Schveighoffer | On Saturday, 13 March 2021 at 21:22:05 UTC, Steven Schveighoffer wrote: I don't want to change the size limit. > I would think that the error should be handled fine by vibe-d. Note, you can override error handling to put out a page of your choice based on the exception. It does return my custom error page, but that is not what I want to return. at that point I have no session so I can't send back the page with the form that was submitted marked with an error. > >> Also, since Errors are not intended to be caught, shouldn't this be an Exception instead? > > The thing you should get is HTTPStatusException, not an Error. > > -Steve You are right, it causes an HTTPStatusException. |
March 14, 2021 Re: vibe.d throws HTTPServerErrorInfo if a file upload is too large before any of my code executes | ||||
---|---|---|---|---|
| ||||
Posted in reply to Chris Bare | On 3/14/21 4:55 PM, Chris Bare wrote: > On Saturday, 13 March 2021 at 21:22:05 UTC, Steven Schveighoffer wrote: > > I don't want to change the size limit. Well, I'm not sure what you expect then. > >> I would think that the error should be handled fine by vibe-d. Note, you can override error handling to put out a page of your choice based on the exception. > > It does return my custom error page, but that is not what I want to return. > at that point I have no session so I can't send back the page with the form that was submitted marked with an error. Hm... looks like it's failing before establishing the session. It's doing it based on the Content-Length. The only way I can imagine to make it work without changing vibe-d is to set the max size to -1, and then handle it manually in your code. Technically, the fact that the request is too large is really an anti-denial-of-service measure, and arguably you could say that you shouldn't look at any requests bigger than your maximum size. To draw a comparison, php will actually not send ANYTHING back if the max request size is exceeded. Possibly you could file an enhancement request on vibe-d to still process the session even if the request size is too big. -Steve |
Copyright © 1999-2021 by the D Language Foundation