autoindex module error handling
Maxim Dounin
mdounin at mdounin.ru
Tue Dec 15 01:53:57 UTC 2015
Hello!
On Mon, Dec 14, 2015 at 11:23:26PM +0000, Joel Cunningham wrote:
Just a side note: sending html email with an empty text/plain
alternative isn't a best way to ensure the message will be
seen.
> Hi,
>
> I'm seeing an issue with the autoindex module (version 1.9.5) where
> when an error is encountered while generating the index, NGINX does not
> send any response back to the client.
>
> I ran through the debugging and what I found is that the header is
> sent, but doesn't actually make it to the socket buffer because in
> ngx_http_write_filter returns early because size <
> clcf->postpone_output. This seemed normal to me.
>
> Then during generation of the index, an error is encountered and
> ngx_http_autoindex_error() is called. Since r->header_sent is 1,
> NGX_ERROR is returned and the socket is closed without sending the
> header or any additional error response
>
> Chrome and Firefox end up displaying error pages about "no response" or
> "the connection was reset" when TCP connection was closed without a
> response.
>
> Should NGINX be doing something better? Since the response is chunk
> encoded, I understand the header is already sent, but is there a better
> way to report errors while generating a chunked response? (although
> autoindex doesn't seem to actually generate multiple chunks).
As long as the header is sent, it's already too late to do
anything with the response or otherwise indicate an error to the
client. So we have two basic options to handle errors which
happen after the header is send:
1) generate the response, ignoring/handling errors somehow;
2) terminate the connection.
Depending on a particular error approach (1) may or may not be
possible. E.g., SSI module handles cases when subrequests to
other resources fail. But if memory allocation fails, likely it
won't be possible to "handle" it somehow. The default behaviour
is (2), as it's always possible. And that's what happens in this
particular case. If you think that (1) is possible for the
particular error you've seen, and it worth the effort - feel free
to provide patches.
--
Maxim Dounin
http://nginx.org/
More information about the nginx-devel
mailing list