From e1128dbdbca14e1884b2eeb5eda235736a5b1d3e Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Fri, 22 Sep 2023 01:47:21 +0200 Subject: 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. --- net/http/server.lua | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'net') diff --git a/net/http/server.lua b/net/http/server.lua index 7d2fec34..4613783f 100644 --- a/net/http/server.lua +++ b/net/http/server.lua @@ -107,7 +107,12 @@ end function runner_callbacks:error(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(); end -- cgit v1.2.3