Fixed an issue that was mistaken for HTTP 0.9 when timeout

This commit is contained in:
xyida 2018-04-26 16:39:29 +08:00
parent 6529598909
commit 4a3504612c

View File

@ -147,10 +147,15 @@ function metat.__index:sendbody(headers, source, step)
end end
function metat.__index:receivestatusline() function metat.__index:receivestatusline()
local status = self.try(self.c:receive(5)) local status,ec = self.try(self.c:receive(5))
-- identify HTTP/0.9 responses, which do not contain a status line -- identify HTTP/0.9 responses, which do not contain a status line
-- this is just a heuristic, but is what the RFC recommends -- this is just a heuristic, but is what the RFC recommends
if status ~= "HTTP/" then return nil, status end if status ~= "HTTP/" then
if ec == "timeout" then
return 408
end
return nil, status
end
-- otherwise proceed reading a status line -- otherwise proceed reading a status line
status = self.try(self.c:receive("*l", status)) status = self.try(self.c:receive("*l", status))
local code = socket.skip(2, string.find(status, "HTTP/%d*%.%d* (%d%d%d)")) local code = socket.skip(2, string.find(status, "HTTP/%d*%.%d* (%d%d%d)"))
@ -325,6 +330,8 @@ end
if not code then if not code then
h:receive09body(status, nreqt.sink, nreqt.step) h:receive09body(status, nreqt.sink, nreqt.step)
return 1, 200 return 1, 200
elseif code == 408 then
return 1, code
end end
local headers local headers
-- ignore any 100-continue messages -- ignore any 100-continue messages