卷毛开机自检-411长度要求


29

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

curl -u api-key:api-passphrase https://api.domain.com/v1/product -X POST

我们回来了:

411 - Length Required

尽管如果我们只是简单地添加-d ""到请求中,它就可以正常工作,并且不会出现411错误。有没有一种方法不需要在curl命令中添加-d?

我们正在使用lighttpd Web服务器,并相信其lighttpd NOT php返回411错误。

Answers:


47

您是正确的-lighttpd不支持带有空消息正文且未将“ Content-Length”标头设置为零的POST请求,并且CURL发送此类请求。关于谁是正确的有来回回的争论,但是在我看来,lighttpd已被打破。没有Content-Length和Transfer-Encoding的POST是完全合法的,并且没有消息正文。

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

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


感谢您的出色解释,因此没有设置要传递给curl的标志,还是没有-d ""设置lighttpd伪指令来设置?-d ""看起来像个黑客。
贾斯汀

1
这是一个hack。如果要真正解决问题,则必须修改lighttpd。-d @/dev/null如果您认为效果更好,可以改用。您也可以使用-H "Content-Length: 0"。(我测试了这两种方法,它们都起作用。)
David Schwartz

好,谢谢。-d ""似乎是最好的选择。
贾斯汀
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.