コンテンツネゴシエーションとHTTPヘッダー
クライアント(ブラウザーなど) は、いくつかの HTTP ヘッダーを送信します。
これらのヘッダーは、クライアントが理解し、処理できるコンテンツの情報を設定します。
サーバーは、ヘッダーの設定を手がかりとして内部アルゴリズムが、クライアントに提供する最善のコンテンツを選択します。
このアルゴリズムを、コンテンツネゴシエーションと呼びます。
ネゴシエーションとは、一般的には、意見や方向性の不一致が発生した際に議論によって合意や調整を図ることを言います。
コンピューターの通信の世界に置き換えると、どんなファイル形式で、言語、文字コード、圧縮技術で、コンテンツをやり取りするかを、クライアントとサーバー間で合意・調整して、通信を行うということになります。
コンテンツネゴシエーションは、以下のヘッダーを使います。(引用)
・Accept
・Accept-Language
・Accept-Charset
・Accept-Encoding
ヘッダー | レスポンス |
---|---|
Accept | Content-Type |
クライアントは、クライアントが理解できるコンテンツタイプを MIME タイプの形式で、Accept ヘッダーに設定し、サーバーに伝えます。
サーバーは、ヘッダーの候補の中から一つを選択し、Content-Type レスポンスヘッダーに選択結果を設定します。
ヘッダー | レスポンス |
---|---|
Accept-Language | Content-Language |
クライアントは、どの言語が理解できるのかを、Accept-Language ヘッダーに設定し、サーバーに伝えます。
サーバーは、ヘッダーの候補の中から一つを選択し、Content-Language レスポンスヘッダーに選択結果を設定します。
ヘッダー | レスポンス |
---|---|
Accept-Charset | Content-Type |
クライアントは、どの文字セットが理解できるかを、Accept-Charset ヘッダーに設定し、サーバーに伝えます。
サーバーは、ヘッダーの候補の中から一つを選択し、Content-Type レスポンスヘッダーに選択結果を設定します。
ブラウザは通常、このヘッダーを設定しません。ほとんどのブラウザは、すべてのキャラクターセットのエンコーダーを持っているため、サーバーに伝える必要がないためだそうです。(引用)
ヘッダー | レスポンス |
---|---|
Accept-Encoding | Content-Encoding |
クライアントは、コンテンツのどのエンコーディング (圧縮アルゴリズム)を理解し、処理できるかを、Accept-Encoding ヘッダーに設定し、サーバーに伝えます。
サーバーは、ヘッダーの候補の中から一つを選択し、Content-Encoding レスポンスヘッダーに選択結果を設定します。
(引用)
2.4 コンテントネゴシエーション
Real World HTTP ―歴史とコードに学ぶインターネットとウェブ技術
[参考]
HTTPについて歴史からヘッダー、レスポンスの設定内容など、丁寧に教えてくれます。
実際に手を動かしながら勉強することができるので、ネットワークの本を読んだけど、いまいちイメージがわかないという方は一読をお勧めします。
HTTPに限らず、Web全般についての情報が提供されています。
わからない言葉があったら、こちらのサイトで調べてみてください。
developer.mozilla.org