From 181d11c337213c1d0d23fae25ea27229540277b1 Mon Sep 17 00:00:00 2001
From: Matthew Wild <mwild1@gmail.com>
Date: Tue, 13 Oct 2020 11:55:28 +0100
Subject: net.http.server: Don't send Content-Length on 1xx/204 responses, per
 RFC (fixes #1596)

---
 net/http/server.lua | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

(limited to 'net')

diff --git a/net/http/server.lua b/net/http/server.lua
index 18704962..3873bbe0 100644
--- a/net/http/server.lua
+++ b/net/http/server.lua
@@ -295,7 +295,10 @@ _M.prepare_header = prepare_header;
 function _M.send_response(response, body)
 	if response.finished then return; end
 	body = body or response.body or "";
-	response.headers.content_length = #body;
+	-- Per RFC 7230, informational (1xx) and 204 (no content) should have no c-l header
+	if response.status_code > 199 and response.status_code ~= 204 then
+		response.headers.content_length = #body;
+	end
 	local output = prepare_header(response);
 	t_insert(output, body);
 	response.conn:write(t_concat(output));
-- 
cgit v1.2.3