From 860264a382a2e8cb44ea358fbbfcd1e763964097 Mon Sep 17 00:00:00 2001 From: Dmitry Polienko Date: Fri, 28 Oct 2016 17:34:07 +0700 Subject: [PATCH] Skip empty lines before status line As recommended here: https://tools.ietf.org/html/rfc7230#section-3.5 --- lib/pure/asynchttpserver.nim | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/lib/pure/asynchttpserver.nim b/lib/pure/asynchttpserver.nim index 4c7037a4e1..4438a5ff44 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 empty lines before the request + # https://tools.ietf.org/html/rfc7230#section-3.5 + while true: + 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