卷曲 POST - 需要 411 长度

Jus*_*tin 42 php lighttpd curl

我们有一个用 PHP 构建的 RestFUL API。如果我们提出请求:

curl -u api-key:api-passphrase https://api.domain.com/v1/product -X POST
Run Code Online (Sandbox Code Playgroud)

我们回来:

411 - Length Required
Run Code Online (Sandbox Code Playgroud)

虽然如果我们简单地添加-d ""到请求中,它可以工作并且没有 411 错误。有没有办法不需要在 curl 命令中添加 -d ?

我们正在使用 lighttpd 网络服务器,并且相信它的 lighttpd 不是 php 返回 411 错误。

Dav*_*rtz 62

你是对的—— lighttpd 不支持带有空消息体的 POST 请求,而没有将“Content-Length”标头设置为零,并且 CURL 发送这样的请求。关于谁是对的,争论不休,但在我看来,lighttpd 已经坏了。没有 Content-Length 和 Transfer-Encoding 的 POST 是完全合法的,并且没有消息体。

添加-d ""会导致 CURL 发送Content-Length: 0标头,从而解决了问题。

你可以修改 lighttp。找到发出 411 错误的代码,并将内容长度设置为零。

  • 这是一个黑客。如果你想真正解决这个问题,你必须修改 lighttpd。如果您认为这看起来更好,您可以改为使用 `-d @/dev/null`。您还可以使用`-H "Content-Length: 0"`。(我测试了这两个,它们有效。) (2认同)