我们有一个用 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 网络服务器,并且相信返回 411 错误的是 lighttpd 而不是 php。
答案1
您说得对——lighttpd 不支持带有空消息正文且未将“Content-Length”标头设置为零的 POST 请求,而 CURL 会发送此类请求。关于谁是正确的争论不休,但在我看来,lighttpd 有问题。没有 Content-Length 和 Transfer-Encoding 的 POST 完全合法,并且没有消息正文。
添加后-d ""
会导致 CURL 发送一个Content-Length: 0
标头,从而解决问题。
您可以修改 lighttp。找到发出 411 错误的代码,然后将内容长度设置为零。