HTTP1.1
Host 指定
HTTP1.1 では、メッセージヘッダーに Host: <ドメイン>
の指定が必須です(これが唯一の必須ヘッダーです)。
これは、1 台の Web サーバーで複数のドメインを運用する、バーチャルホストの機能を実現するために必要とされています。
Web サーバーは、Host
ヘッダーで示されたドメイン名と、相対 URI (/index.html
など)を組み合わせて、実際のどのリソースを返すかを判断します。
HTTP1.0 を使う場合は、Host:
の指定は必要ありません。
HTTP キープアライブ
HTTP1.1 では、最初にスリーウェイハンドシェイクしたら、そのコネクションを一定時間使い続けることで、複数のリソースファイルの取得を効率化しています。
これを HTTP キープアライブ (KeepAlive) といい、HTTP1.1 では標準の振る舞いになっています(HTTP ヘッダーに Connection: keep-alive
が付いていると考えるが規定の動作)。
例えば、ブラウザで Web ページを開くと、HTML ファイルだけではなく、CSS ファイルや画像ファイルなどのリソースを取得するために複数のリクエストが発行されますが、そこでは同じコネクションが使用されます。
コネクションの切断は、サーバーが設定しているタイムアウト時間を過ぎたときに行われますが、クライアントあるいはサーバーが Connection: close
ヘッダーを含めることで、切断する意志を伝えることができます。
プロキシ経由時の「リクエスト行」の URI について
プロキシサーバを介する場合は、リクエスト行に 絶対アドレス指定 で URI を指定する必要があります。 これは、リクエストを受け取ったプロキシサーバが、リクエストの転送先サーバを判断するためです。 逆に、プロキシを使わない場合は、リクエスト URI は相対パスで指定します。
Client
|
| GET http://target.example.com/index.html HTTP/1.1
▽
Proxy server
|
| GET /index.html HTTP/1.1
▽
target.example.com
HTTP のメッセージヘッダの種類
HTTP のメッセージヘッダには、大きく分けて、
- End-to-End
- Hop-by-Hop
の 2 種類があります。