web-dev-qa-db-ja.com

HTTP「Host」ヘッダーパラメータにポート番号は必要ですか?

HTTPリクエストをfoosite.comしかし、実際にリクエストを送信するポートは6103であり、そのポートをHostヘッダーに入れないでください。例:

GET /barpage HTTP/1.1
Host: foosite.com
Method: GET

HTTPサーバーは、ポート6103で通信しようとしていることを認識しますか?または、リクエストヘッダーで省略されているので、サーバーが実際にこれを認識した場合、私はギャンブルしますか?

これを言うためにその質問をします:ブラウザ、少なくともfirefox + chromeがHostヘッダーにポートを置くことがわかりました。しかし、Java私が使用しているアプリはそうではありません。ポートがHostで渡されない場合、サーバーはポート80にいると考えて応答します。アナグマにする必要がありますか?サーバーオペレーター、またはJavaプログラマー?

46
Jon Mabe

HTTP仕様のセクション14.2 を参照してください。これは、デフォルトのポート80ではない場合、ポート#を含めることを指定します。

52
superfell

最新のブラウザ向けに更新:

ブラウザ(およびcurl)は、 HTTP仕様 で要求され、@ superfellの answer で示されているように、ポートが標準ポートでない場合にのみポートを追加します。

この日(2013)のブラウザは、ポートが標準(httpポート80、httpsポート443)の場合、実際にはホストヘッダーからポートをstripします。 Baidu Spiderなどの独自のメソッドを使用する一部のクライアント ポートが80の場合でもポート番号を含める

これが適切かどうかは分かりません。仕様では、ポートがISデフォルトを使用したときに、ポート番号を含めることが問題ないかどうかについては言及していません。

comment に答えるために、サーバーは仕様に準拠するために必要なことを何でも行い、仕様は必要な場合のみを提案します。このため、サーバーがそれをどのように処理するかという問題ではなく、クライアントがどのようにリクエストを発行するかということではなく、ホストヘッダーにポート番号を含めるかどうかということです

7
Gaia

存在しないサーバーへの実際のリクエストのヘッダーのサンプル ' http://myhost.com:3003/content/page.htm '

Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: en-US;q=0.9,en;q=0.8,nb;q=0.7,de;q=0.6
Connection: keep-alive
Host: myhost.com:3244
Referer: http://myhost.com:3244/content/page.htm

RFC https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html を読むには何らかのトレーニングが必要です。

セクション14:24では、すべての要素を単純な現実に変換するのはそれほど簡単ではありません。

Host = "Host" ":" Host [ ":" port ] ;
0
flodis

RFC2616は

末尾のポート情報のない「ホスト」は、要求されたサービスのデフォルトのポートを意味します(たとえば、HTTP URLの「80」)。たとえば、 http://www.w3.org/pub/WWW/ に対するOriginサーバー上のリクエストには、次の内容が適切に含まれます。

GET /pub/WWW/ HTTP/1.1
Host: www.w3.org

これは、 https://example.com はデフォルトポートがhttpsで認識されているため、後続ポートも必要ないことを意味します。 FirefoxからのHTTPリクエスト、ChromeおよびEdgeを確認しましたが、ドメインプロトコルがhttpsの場合、ホストヘッダーにポート番号が追加されていないことがわかりました。ポート番号もURLに追加されました。以下のスクリーンショットはGoogleクロムのものです

Host header for a HTTP 1.1 request using https procotoleHost header for a HTTP 1.1 resquest using a https with a port number in the URL

0