HTTPのURLとメソッド以外の要素
- ボディ
- ヘッダ:とんでもなく多彩
HTTPを深く知るには必須の、実に楽しい要素
HTTPヘッダとは
- リクエストとレスポンスそれぞれに存在する
- クライアントからは、リクエストのヘッダで様々な情報を伝える
- サーバからは、レスポンスのヘッダで様々な情報を伝える
ブラウザの挙動
- ブラウザはHTTPレスポンスのヘッダを見て、どう動作するかを判断している
他のURLにリクエスト投げ直し
ローカルキャッシュを表示
ブラウザでは処理できないのでファイルとしてダウンロード
など・・・
実際の通信のヘッダ内容を見る
- F12ツールのNetworkタブ
超!重要!
よく見るヘッダ:content-type
- ボディのデータの形を伝える
- リクエストにもレスポンスにも使う
- APIでは
application/json
を使うのがデファクト - たまに
multipart/form-data
やapplication/x-www-form-urlencoded
を見かける(特にリクエスト)
よく見るヘッダ:X-Api-Key
- APIキーを設定する場合によく用いられる
- content-typeと共に、プログラマが頻繁に設定するHTTPヘッダ
キャッシュに関するヘッダ:ETag
- Etagの値が同じの場合はコンテンツに変化がない!
→初回はボディと共にETagを返してもらう
→2回目以降はETagの値のみ要求
→値が変わっていなければキャッシュを使ってよいということになる
→値が変わっていれば改めてコンテンツを取得「
大きなファイルを扱う際:Range
- コンテンツの何バイト目から何バイト分欲しい、というリクエスト
- 対応していないサーバもある
- 動画のストリーミング再生で有用
事例)iOSアプリでのローカルWebサーバ
Rangeに対応しているライブラリでないと動画再生が出来なかった!
圧縮アルゴリズムの指定:Accept-Encoding
- content-typeに指定された形式のデータを圧縮してボディに収めることが出来る
- gzipが一般的な気がする
最後に
- HTTPヘッダは非常に多彩でとてもではないが語りきれない
- APIを呼び出すときに、ヘッダに要件がある場合がある
ヘッダについて少しでも知識があると、呼び出しがうまくいかない場合の解決の糸口になるケースがある