generated at
HTTP

コンテンツネゴシエーション
同一URLで様々なバージョンのリソースを提供するための仕組み

サーバ駆動型コンテンツネゴシエーション(プロアクティブコンテンツネゴシエーション)
クライアントがURLに加えていくつかのHTTPヘッダー送信する

Acceptヘッダー
MIMEタイプのネゴシエーションをする際に設定する
Accept-Languageヘッダー
言語のネゴシエーションをする際に設定する
Accept-Charsetヘッダー
文字エンコーディングのネゴシエーションをする際に設定する
現在、ほとんどのブラウザは送信していない
Accept-Encodingヘッダー
エンコーディング(基本的に圧縮アルゴリズム)のネゴシエーションをする際に設定する
deflate zlibで提供されている圧縮アルゴリズム
gzip GZIPコマンドと同様の圧縮アルゴリズム (RFC 1952)
identity 圧縮しない
br Brotli

Varyヘッダー
レスポンスヘッダー
サーバが使用したヘッダーのリストを設定する

キャッシュ
Cache-Control
Expiresよりも優先される
リクエスト・レスポンスのどちらにも設定できる
レスポンス時は、以下のようなキーを設定できる
cache-control-keys
キー名説明
`public`同じコンピュータを使う複数ユーザ間でキャッシュを再利用することを許可する
`private`同じコンピュータを使う別のユーザー間でキャッシュを再利用しない
`max-age=<seconds>`秒単位でキャッシュの有効期間を設定する
`no-cache`キャッシュの状態を毎回サーバに問い合わせる(まったくキャッシュしないわけではなく、ETag等は有効)
`no-store`キャッシュしない
`immutable`レスポンス内容が時間とともに変化しない

プロトコルのアップグレード

クッキー
最大容量は4キロバイト

Set-Cookieヘッダ
サーバがクライアントに対してクッキーを送信する際に、レスポンスヘッダとして設定する
セミコロン区切りで複数の属性を指定できる
<name>=<value>
Expires=<時間>
クッキーの寿命を設定する
Max-Age=<秒数>
クッキーの寿命を設定する(単位: 秒)
Domain=<Host>
クライアントからクッキーを送信する際の送信先ホストを指定する
デフォルトはクッキーを発行したサーバ
Path=<path>
クライアントからクッキーを送信する際のサーバのパスを指定する
デフォルトはクッキーを発行したサーバのパス
Secure
https以外で接続した際は、クライアントからクッキーを送信しない
HttpOnly
JavaScriptからクッキーにアクセスできないようにする

TCP FAST OPEN(TFO)
3 Way Handshake中のデータ送信を許可する
Cookieを利用することで通信を保証する

初回時の通信
1. クライアントはサーバにFast Open Cookieを付けてSYNを送信する
2. サーバはSYN+ACKを返す際にTCPオプションの35版でTFOクッキーを返す
3. クライアントはACKを返し、通常の接続確立を終える(この際、TFOクッキーをキャッシュする)

初回以降の通信
SYNを送る際に、キャッシュされたTFOクッキーとGETデータを渡すことができる
そのため、1RTTを節約できる

セキュリティ
HTTP Strict Transport Security(HSTS)
Strict-Transport-Securityヘッダ
参考

参考

ツール