aboutsummaryrefslogtreecommitdiffstats
path: root/net/http
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2023-09-22 01:47:21 +0200
committerKim Alvefur <zash@zash.se>2023-09-22 01:47:21 +0200
commite1128dbdbca14e1884b2eeb5eda235736a5b1d3e (patch)
tree9744904857cc95de79764b8be53eddd4143366e9 /net/http
parentdf4bde023ba33f3a84538aa5cd10a0e1bda64990 (diff)
downloadprosody-e1128dbdbca14e1884b2eeb5eda235736a5b1d3e.tar.gz
prosody-e1128dbdbca14e1884b2eeb5eda235736a5b1d3e.zip
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.
Diffstat (limited to 'net/http')
-rw-r--r--net/http/server.lua7
1 files changed, 6 insertions, 1 deletions
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