aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Squires <julian@cipht.net>2020-10-16 12:18:46 -0230
committerThijs <thijs@thijsschreijer.nl>2022-03-22 09:38:14 +0100
commit2a76cb906cb955a83ed76b8e47cc76c77ce8e15f (patch)
treec7d224fba05b39146f44bcebca62036928df50a5
parente178b1e0183ba07290145be3ec718cd78ad826cc (diff)
downloadluasocket-2a76cb906cb955a83ed76b8e47cc76c77ce8e15f.tar.gz
luasocket-2a76cb906cb955a83ed76b8e47cc76c77ce8e15f.tar.bz2
luasocket-2a76cb906cb955a83ed76b8e47cc76c77ce8e15f.zip
http.lua: set transfer-encoding if source and no content-length
If a source is specified without a content-length header, LuaSocket sends the data in the chunked transfer coding; however, it doesn't set the transfer-encoding header. While I recognize that the user can set this manually, this is a gotcha that has caught me multiple times. RFC7230, section 3.3.3 (https://tools.ietf.org/html/rfc7230#section-3.3.3) is clear about this; if neither content-length nor transfer-encoding chunked are specified, the request message body length is zero. While some servers may ignore this, I have encountered several that follow the RFC in this regard, most recently golang's net/http.
-rw-r--r--src/http.lua7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/http.lua b/src/http.lua
index e3a1742..1330355 100644
--- a/src/http.lua
+++ b/src/http.lua
@@ -283,6 +283,13 @@ local function adjustrequest(reqt)
283 nreqt.uri = reqt.uri or adjusturi(nreqt) 283 nreqt.uri = reqt.uri or adjusturi(nreqt)
284 -- adjust headers in request 284 -- adjust headers in request
285 nreqt.headers = adjustheaders(nreqt) 285 nreqt.headers = adjustheaders(nreqt)
286 if nreqt.source
287 and not nreqt.headers["content-length"]
288 and not nreqt.headers["transfer-encoding"]
289 then
290 nreqt.headers["transfer-encoding"] = "chunked"
291 end
292
286 -- ajust host and port if there is a proxy 293 -- ajust host and port if there is a proxy
287 nreqt.host, nreqt.port = adjustproxy(nreqt) 294 nreqt.host, nreqt.port = adjustproxy(nreqt)
288 return nreqt 295 return nreqt