Closed9
『Real World HTTP』メモ
最初に
『Real World HTTP』本の読書メモ。
HTTPの基本要素
- メソッドとパス
- ヘッダー
- ボディ
- ステータス
HTTP/0.9
- 1つのドキュメントを送るのみ
- コンテンツは全てHTML文書という想定だったため、フォーマットをサーバーから伝える手段がない
- リクエストはGETのみ
Cookie
- Cookieの保存はサーバー -> クライアントに指示することで実現
- 具体的には
Set-Cookie
というレスポンスヘッダーで指定
- 具体的には
- Cookieの種類
- 発行元
- ファーストパーティ(ユーザーが訪れたサイト)
- サードパーティ(それ以外)
- 使用期間
- セッションクッキー(ブラウザを閉じると消える)
- 永続クッキー(ブラウザを閉じても設定期間中は消えない)
- 発行元
認証
- BASIC認証
- ユーザー名とパスワードをbase64エンコード
- 可逆変換のため、サーバーで復元できるが、通信内容から簡単に漏洩してしまうリスクがある
- Digest認証
- ハッシュ関数を利用し、簡単に復元できない仕組みを実現
- フォームログイン&クッキーによるセッション管理
- サーバー側で発行したセッショントークンをクッキーに保存しておくことで、リクエスト時にログイン済みであることを伝える
- 署名付きクッキーによるセッション管理
- サーバーは電子署名済みのデータをクライアントに送る
- サーバー側でデータを保存しなくてよい
HTTP/1.0
- フォーム/ファイルの送信
- コンテントネゴシエーション(クライアント <=> サーバー間の設定を共有する仕組み)
- キャッシュやコンテンツ圧縮によるデータ輸送量削減
- 認証
- Cookie
HTTP/1.1
- Keep-Aliveによる通信の高速化
- Keep-AliveはTCP/IPの通信を効率化する仕組み
- Keep-Aliveを使うと連続したリクエスト時に接続を再利用する
- TLSによる暗号化通信
- TLSはHTTPに依存する技術ではない
- 新メソッドの追加
- PUT&DELETEが必須
- OPTION, TRACE, CONNECTメソッドが追加
HTTP/2
- ストリームによる通信の高速化
- テキストベースのプロトコルからバイナリベースのプロトコルへ変化
- HTTP/1.1までは1つのリクエストがTCPソケットを占有してしまうので、1つのオリジンサーバーに対して2~6本のTCP接続を行って並列化していた。HTTP/2では1本のストリームという仮想のTCPソケットを作って通信する。
- サーバープッシュ
- クライアントから要求される前に優先度の高いコンテンツを送信できるようになった
- WebSocketのような双方向通信を実現するものではなく、WEBページを構成するCSS/JavaScriptや画像ファイルのダウンロードに用いられる
- サーバー側からのプッシュは、クライアントがリクエストを送信して初めて検知できる
- プッシュされたコンテンツは事前にキャッシュされ、クライアントがそのファイルをリクエストするとスムーズにダウンロードできるように見える
HTTP/3
- QUIC
- UDPソケット上のプロトコル
- TCPとTLSの機能を備えている
- 通常のHTTP通信ではTCPのハンドシェイク、TLSのハンドシェイクをそれぞれ行う必要があり、何往復もパケットを交換する必要があったが、QUICは両方を統合しているためより少ない通信で接続できる
- 現在は標準化を目指しRFC化が進行中
このスクラップは2022/05/28にクローズされました