知らないと恥ずかしいHTTPの基礎
HTTPはアプリケーション層の最上位に存在する
HTTPの基本方針
■HTTPはシンプル:
- HTTP/2からメッセージをカプセル化させるようになったものの読みやすいよう考慮された作りになっている
■HTTPは拡張可能
- HTTPヘッダーによって拡張が可能。新しいヘッダーを作ることで拡張できたりする。
■HTTP はステートレスであるがセッションレスではない
- 同じコネクション上でも連続的に実行される2つのリクエストに関係性はない
- ただし、HTTP Cookieによってステートフルにすることもできる
■HTTPはTCP標準に準拠する
- HTTPはアプリケーション層に属するため、下位のトランスポート層(コネクション)に依存しない
- HTTPは信頼性があることだけをリクエストする、つまりメッセージを失わないこと
- そのためHTTPは信頼性のあるTCP(UDPは信頼性が低い)標準に依存している
- クライアントとサーバーがHTTPのリクエスト/レスポンスを交換する前にTCPの確立が必要で、HTTP/1.0の際は下の図にあるように毎回個別のTCPコネクションを必要としていた
- が、HTTP/2からは一つのコネクションで複数のメッセージを多重化(カプセル化)できるようになったことから効率化が実現された
- ちなみに、GoogleではTCPではなくUDP上により信頼性のあるプロトコルを提供するためのQUICK(https://ja.wikipedia.org/wiki/QUIC) を開発・研究中らしい
引用元:https://keis-software.com/2015/04/13/osi参照モデル②/
引用元:https://www.kagoya.jp/howto/webhomepage/http-2/
HTTPが制御できること
・キャッシュ
- キャッシュするしないの制御をHTTPでできる。以下はキャッシュしない場合。HTTPヘッダーでキャッシュするしないを制御できる
Cache-Control: no-cache
・オリジン制約の緩和
- デフォルトでは同一オリジンのページだけがWebページの全ての情報にアクセスできる
- それをHTTPヘッダーで緩和することができる
・認証
HTTPメッセージ
リクエスト
・Method:おなじみのGET
POST
OPTIONS
など
・Path:プロトコル、ドメイン、ポートが取り除かれる