net.http.server: Support setting Content-Type of uncaught HTTP errors

mod_http_errors normally sets the Content-Type header via the response
object, which isn't available when handling these uncaught errors.

Without a Content-Type header the browser is forced to guess, which may
or may not result in something sensible.
This commit is contained in:
Kim Alvefur 2023-09-22 01:47:21 +02:00
parent df4bde023b
commit e1128dbdbc

View file

@ -107,7 +107,12 @@ end
function runner_callbacks:error(err) function runner_callbacks:error(err)
log("error", "Traceback[httpserver]: %s", err); log("error", "Traceback[httpserver]: %s", err);
self.data.conn:write("HTTP/1.0 500 Internal Server Error\r\n\r\n"..events.fire_event("http-error", { code = 500, private_message = err })); local response = { headers = { content_type = "text/plain" }; body = "" };
response.body = events.fire_event("http-error", { code = 500; private_message = err; response = response });
self.data.conn:write("HTTP/1.0 500 Internal Server Error\r\n\z\
X-Content-Type-Options: nosniff\r\n\z\
Content-Type: " .. response.header.content_type .. "\r\n\r\n");
self.data.conn:write(response.body);
self.data.conn:close(); self.data.conn:close();
end end