本記事の内容
Webを支える技術を読んだ際のノートのようなものです。
省略している部分もあり、書籍の内容を完全に要約するものではありません。
今回は第9章あたりの内容です。
仕様
最初はRFC 2616で定められたが、今はRFC 9110で修正されている。
電子メールの仕様(RFC 822)のヘッダから育った。
※そのせいで生まれたバッドノウハウもある。
認証、キャッシュなどヘッダ+メソッドやステータスコードといった組み合わせで実現できる機能もあったりする。
よく使うヘッダ
日時系
Date, Expires などなど。全てGMT。
MIMEメディアタイプ
- Content-Type(タイプ/サブタイプの形式)
- RFC 9110 8.3. Content-Type
- charset
- Body内の情報よりもこちらが優先されるので注意
- デフォルトはISO8859-1
言語タグ
Content-Language
- RFC 9110 8.5. Content-Language
コンテントネゴシエーション
- Accept
- 処理できるメディアタイプ
- qが大きいほうが優先
- 対応なければ406
- Accept-Charset
- Accept-Language
Content-Length
ボディの長さを指定して、ファイルサイズの解決をする。
静的ファイルなどのやり取りで活躍する。
動的な場合は...
チャンク転送でちょっとずつ転送する。
Tranfer-Encoding
認証
HTTPなのか、HTTPSなのかによってもおすすめは変わる。
HTTPSならSSL/TLSによって暗号化、認証、改ざんの検知ができるため。
Basic
かんたんにデコードできるので、HTTP通信の場合は怖い。
Digest
組み立て方は知ることができる。
auth-initでメッセージ全体のチェックができる。
メッセージ全体は平文なので注意
また、導入できる環境には制約がある。
WSSE
標準じゃないので注意
Basic認証やDigest認証がだめな場合に検討する。
クライアント/サーバの両方がパスワードを保持する必要がある。
OpenID
シンプルなシングルサインオン。
OAuth
認可情報を委譲することで、Webサービス間でデータをやりとりする。
キャッシュ
キャッシュ用ヘッダで制御とかができる。
有効期限なんかも設定できるが、有効期限1年位上は意味ないので非推奨。
条件付きGETでキャッシュが有効かどうか確認したりもできる。
If-XXXXなどを使う。
Keep-Alive
クライアント/サーバ間のTCPコネクションを1つずつ切断していてはリクエストのたびに処理が大変なので、パイプライン化してまとめて接続し続けるためのヘッダ。
レスポンスを待たずに次のリクエストを送っちゃう。
標準仕様外だけどよく使われるヘッダ
Content-Disposition
リソースのファイル名をサーバー側から指定するヘッダ。
Slug
ファイル名のヒントをクライアント側から教えるヘッダ。