summary refs log tree commit diff stats
path: root/lib/pure/httpclient.nim
diff options
context:
space:
mode:
authorJoey <jyapayne@gmail.com>2021-01-08 11:48:23 -0700
committerGitHub <noreply@github.com>2021-01-08 18:48:23 +0000
commitbfcb7c1621ba4cadb228125e924f1fe6bf91e20c (patch)
tree6221b2d373f94bd56a00354c689c8c324aecb02e /lib/pure/httpclient.nim
parent38b8d080f29021d2685e09d552c2a7753ef25484 (diff)
downloadNim-bfcb7c1621ba4cadb228125e924f1fe6bf91e20c.tar.gz
DELETE requests should always have a content-length header (#16618)
* DELETE requests should always have a content-length header

Not having DELETE in this list is causing hanging when trying to close webdriver sessions in [halonium](https://github.com/halonium/halonium/issues/10) and likely any other implementation of the webdriver protocol. Both at least chromedriver and geckodriver are affected by this issue.

* Change the content length calculation to match the http spec

For reference:
https://www.w3.org/Protocols/HTTP/1.0/draft-ietf-http-spec.html#Entity-Body
Diffstat (limited to 'lib/pure/httpclient.nim')
-rw-r--r--lib/pure/httpclient.nim7
1 files changed, 5 insertions, 2 deletions
diff --git a/lib/pure/httpclient.nim b/lib/pure/httpclient.nim
index 3093f5564..70f3327b1 100644
--- a/lib/pure/httpclient.nim
+++ b/lib/pure/httpclient.nim
@@ -980,8 +980,11 @@ proc requestAux(client: HttpClient | AsyncHttpClient, url, httpMethod: string,
   var data: seq[string]
   if multipart != nil and multipart.content.len > 0:
     data = await client.format(multipart)
-  elif httpMethod in ["POST", "PATCH", "PUT"] or body.len != 0:
-    client.headers["Content-Length"] = $body.len
+  else:
+    if body.len != 0:
+      client.headers["Content-Length"] = $body.len
+    elif httpMethod notin ["GET", "HEAD"] and not client.headers.hasKey("Content-Length"):
+      client.headers["Content-Length"] = "0"
 
   when client is AsyncHttpClient:
     if not client.parseBodyFut.isNil: