6

HTTP 1.1は、「クライアントは、すべてのHTTP/1.1要求メッセージにHostヘッダーフィールドを含める必要があります」と述べています。

ただし、作業中のマシンは、変更するためのアクセス権がないこの正確なPOST(座標を含む)を送信します。

POST /touch HTTP/1.1
Content-type: application/x-www-form-urlencoded
Content-Length: <n>

x=<int x>&y=<int y>

400 Bad RequestHostヘッダーフィールドがないため、Tomcat 7はすぐに応答し、POSTがサーブレットに到達することはありません。このエラー応答を回避し、サーブレットでPOSTを処理して、これらの古いマシンをサポートする方法はありますか?

4

1 に答える 1

6

すでに指摘したように、HTTP 1.1 仕様には次のように書かれています(太字):

クライアントは、すべての HTTP/1.1 要求メッセージにHost ヘッダーフィールドを含める必要があります。[...] HTTP/1.1 プロキシは、転送するすべての要求メッセージに、プロキシによって要求されているサービスを識別する適切な Host ヘッダー フィールドが含まれていることを確認する必要があります。すべてのインターネットベースの HTTP/1.1 サーバーは、Host ヘッダー フィールドがない HTTP/1.1 要求メッセージに対して400 (Bad Request) ステータス コードで応答する必要があります。

クライアントは HTTP 1.1 プロトコルを間違って使用しています。サーバー側でこれを回避しようとしないでください。できることは、Hostヘッダーを追加するだけのカスタム HTTP プロキシをセットアップすることです。しかし、それは汚い回避策です。または、プロトコルを 1.0 にダウングレードします。

また、どうにかして Tomcat にそのようなリクエストを受け入れさせることができたとしても (これは仕様に反しています)、HTTP プロキシがエンド間にあると、いくつかの問題が発生することに注意してください。

于 2012-10-09T21:16:47.533 に答える