Skip to content

Commit e5deba5

Browse files
committed
Handle multiple Transfer-Encoding headers, fixes #157
1 parent 8b9acca commit e5deba5

File tree

1 file changed

+24
-7
lines changed

1 file changed

+24
-7
lines changed

lib/resty/http.lua

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -702,18 +702,35 @@ function _M.read_response(self, params)
702702

703703
-- Receive the body_reader
704704
if _should_receive_body(params.method, status) then
705-
local ok, encoding = pcall(str_lower, res_headers["Transfer-Encoding"])
706-
if ok and version == 1.1 and encoding == "chunked" then
705+
has_body = true
706+
707+
local te = res_headers["Transfer-Encoding"]
708+
709+
-- Handle duplicate headers
710+
-- This shouldn't happen but can in the real world
711+
if type(te) == "table" then
712+
te = tbl_concat(te, "")
713+
end
714+
715+
local ok, encoding = pcall(str_lower, te)
716+
if not ok then
717+
encoding = ""
718+
end
719+
720+
if version == 1.1 and str_find(encoding, "chunked", 1, true) ~= nil then
707721
body_reader, err = _chunked_body_reader(sock)
708-
has_body = true
709-
else
710722

723+
else
711724
local ok, length = pcall(tonumber, res_headers["Content-Length"])
712-
if ok then
713-
body_reader, err = _body_reader(sock, length)
714-
has_body = true
725+
if not ok then
726+
-- No content-length header, read until connection is closed by server
727+
length = nil
715728
end
729+
730+
body_reader, err = _body_reader(sock, length)
731+
716732
end
733+
717734
end
718735

719736
if res_headers["Trailer"] then

0 commit comments

Comments
 (0)