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よりも優先される
リクエスト・レスポンスのどちらにも設定できる
レスポンス時は、以下のようなキーを設定できる
table: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ヘッダ
参考
参考
ツール