web-dev-qa-db-ja.com

HTTPクライアントからのPUTリクエスト後に「411LengthRequired」を取得する

私はHTTPクライアントを実装するJavaプログラムに取り組んでいます。サーバーにリクエストを送信することをテストしています。GET、POST、DELETEリクエストは問題なく動作します。 POSTリクエスト後の例出力を取得します

Data extracted:
{"status":{"message":"ok"}}

データベースには、加えられた変更が反映されます。

ただし、PUTリクエストの後、エラーを示すWebページの次のhtmlマークアップが表示されます。

Data extracted:
<html>
<head><title>411 Length Required</title></head>
<body bgcolor="white">
<center><h1>411 Length Required</h1></center>
<hr><center>nginx/1.2.6</center>
</body>
</html>

したがって、データベースに変更はありません。

これはContent-Lengthヘッダーと関係がある可能性があることがわかりましたが、よくわかりません。このヘッダーを追加しようとした後、プログラムは1分間待機してから、サーバーの応答を処理できなかったことを通知する例外をスローします。

必要に応じて、コードやスタックトレースを提供することもできます。

10
Limbo Exile

はい、Content-Lengthに関連する問題です。 HTTPエラー411は

サーバーは、Content-Lengthが定義されていない要求の受け入れを拒否します。クライアントは、要求メッセージのメッセージ本文の長さを含む有効なContent-Lengthヘッダーフィールドを追加する場合、要求を繰り返すことができます(MAY)。

したがって、POST/PUTメソッドで空のRequestBodyを送信する場合は、Content-Length:0も送信する必要があります。したがって、このヘッダーをリクエストに追加してください。このヘッダーによって、リクエストオブジェクトに追加された問題が発生することはないと思います。

17
Sachin