10

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分間待機してから、サーバーの応答を処理できなかったことを通知する例外をスローします。

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

4

1 に答える 1

17

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

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

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

于 2013-03-25T16:17:26.083 に答える