Warp有一个settingsMaxTotalHeaderLength
字段,默认为50 * 1024:https://hackage.haskell.org/package/warp-3.3.10/docs/src/Network.Wai.Handler.Warp.Settings.html#defaultSettings
我想这意味着50KB?但是,当我尝试发送约33KB的 header 时,服务器抛出错误的请求:
curl -v -w '%{size_request} %{size_upload}' -H @temp.log localhost:8080/v1/version
结果:* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /v1/version HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.58.0
> Accept: */*
> myheader2: <big header snipped>
>
* HTTP 1.0, assume close after body
< HTTP/1.0 400 Bad Request
< Date: Wed, 22 Jul 2020 13:15:19 GMT
< Server: Warp/3.3.10
< Content-Type: text/plain; charset=utf-8
<
* Closing connection 0
Bad Request33098 0
(请注意,请求大小为33098)相同的东西适用于32.5KB头文件。
我真正的问题实际上是我需要设置
settingsMaxTotalHeaderLength = 160000
以发送大小为〜55KB的 header 。不知道这是一个错误还是我误读了一些内容? 最佳答案
恭喜,您似乎在warp
中发现了一个错误。在 push
的定义中,存在一些重复计数。在顶部附近,bsLen
计算为到目前为止 header 的完整长度,但是在push' Nothing
情况下(添加无换行符的块)进一步向下计算,长度更新为:
len' = len + bsLen
当bsLen
已经占len
时。在其他push'
情况下,也存在类似的问题,其中start
和end
是整个 header 的偏移量,因此不应将其添加到len
中。