diff options
author | Dominik Picheta <dominikpicheta@googlemail.com> | 2016-11-02 18:57:00 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-11-02 18:57:00 +0100 |
commit | e784fdee4576ced94758ee64f20bd53d1abe2f6e (patch) | |
tree | 30273771a7cdc93a3b88f261af961c29b8f94f61 /lib/pure/asynchttpserver.nim | |
parent | 5842f7d0d250eab6e5d3a4c0fb75f5bdc4a86d53 (diff) | |
parent | 4753149227e9ca1402e59cc55870c56c8f872337 (diff) | |
download | Nim-e784fdee4576ced94758ee64f20bd53d1abe2f6e.tar.gz |
Merge pull request #4970 from nigredo-tori/fix-4969
Fix problems with persistent HTTP connections
Diffstat (limited to 'lib/pure/asynchttpserver.nim')
-rw-r--r-- | lib/pure/asynchttpserver.nim | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/lib/pure/asynchttpserver.nim b/lib/pure/asynchttpserver.nim index 4c7037a4e..68da5f7c9 100644 --- a/lib/pure/asynchttpserver.nim +++ b/lib/pure/asynchttpserver.nim @@ -133,14 +133,21 @@ proc processClient(client: AsyncSocket, address: string, assert client != nil request.client = client - # First line - GET /path HTTP/1.1 - lineFut.mget().setLen(0) - lineFut.clean() - await client.recvLineInto(lineFut) # TODO: Timeouts. - if lineFut.mget == "": - client.close() - return + # We should skip at least one empty line before the request + # https://tools.ietf.org/html/rfc7230#section-3.5 + for i in 0..1: + lineFut.mget().setLen(0) + lineFut.clean() + await client.recvLineInto(lineFut) # TODO: Timeouts. + + if lineFut.mget == "": + client.close() + return + if lineFut.mget != "\c\L": + break + + # First line - GET /path HTTP/1.1 var i = 0 for linePart in lineFut.mget.split(' '): case i |