カールPOST-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は411エラーを返しているphpではないと考えています。

回答:


47

正解です。lighttpdは、 'Content-Length'ヘッダーがゼロに設定されていない空のメッセージ本文を持つPOST要求をサポートしていません。CURLはそのような要求を送信します。だれが正しいかについては議論が行き来しますが、私の意見では、lighttpdは壊れています。Content-LengthとTransfer-EncodingのないPOSTは完全に合法であり、メッセージ本文はありません。

追加する-d ""と、CURLがContent-Length: 0ヘッダーを送信し、問題が解決します。

lighttpを変更できます。411エラーを発行するコードを見つけ、代わりにコンテンツの長さをゼロに設定します。


すばらしい説明をありがとう、そのためcurlに渡すフラグ-d ""や設定するconfig lighttpdディレクティブはありませんか?-d ""ハックのように見えます。
ジャスティン

1
ハックです。問題を実際に修正したい場合は、lighttpdを変更する必要があります。-d @/dev/null良く見えると思うなら代わりに使うことができます。を使用することもできます-H "Content-Length: 0"。(私はこれらの両方をテストし、動作します。)
デビッドシュワルツ

はい、ありがとう。-d ""最適なオプションのようです。
ジャスティン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.