#はじめに
「APIにPOSTしたのにデータが届かない」——調べてみると、Content-Typeヘッダーが抜けていた。こんな経験はありませんか?
HTTPヘッダーは、リクエストやレスポンスに「追加情報」を付与するための仕組みです。認証情報、データ形式、キャッシュ設定など、通信に必要な様々な情報がヘッダーに含まれています。
この記事を読むと、以下のことができるようになります:
- 実務でよく使うHTTPヘッダーの役割を理解できる
- APIリクエストを正しく構築できる
- レスポンスヘッダーから必要な情報を読み取れる
#HTTPヘッダーとは
HTTPヘッダーとは、リクエストやレスポンスに付加情報を添えるための「キー: 値」形式のデータです。
手紙で例えると、封筒に書かれた「速達」「親展」「書留」といった注意書きのようなものです。中身(ボディ)とは別に、配達方法や取り扱い方法を指示しています。
Host: api.example.com
Content-Type: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
ヘッダーは複数指定でき、1行に1つのヘッダーを記述します。
#ヘッダーの分類
HTTPヘッダーは、用途によって大きく4つに分類できます。
| 分類 | 説明 | 例 |
|---|---|---|
| リクエストヘッダー | クライアントからサーバーへの追加情報 | Accept, Authorization |
| レスポンスヘッダー | サーバーからクライアントへの追加情報 | Set-Cookie, Location |
| 表現ヘッダー | ボディの形式や言語に関する情報 | Content-Type, Content-Length |
| ペイロードヘッダー | 転送されるデータに関する情報 | Content-Encoding |
実務では分類を意識することは少ないですが、「リクエスト時に使うもの」「レスポンスで返ってくるもの」の区別は重要です。
#リクエストでよく使うヘッダー
#Host
リクエスト先のホスト名(ドメイン)を指定します。HTTP/1.1では必須のヘッダーです。
Host: api.example.com
1つのIPアドレスで複数のドメインをホスティングしている場合、このヘッダーでどのサイト宛てかを判別します。
#Content-Type
送信するデータの形式(MIMEタイプ)を指定します。POSTやPUTでボディを送る際に必須です。
Content-Type: application/json
よく使うContent-Type:
| 値 | 用途 |
|---|---|
application/json | JSON形式のデータ |
application/x-www-form-urlencoded | HTMLフォームのデフォルト形式 |
multipart/form-data | ファイルアップロード |
text/plain | プレーンテキスト |
#Accept
クライアントが受け取りたいレスポンスの形式を指定します。
Accept: application/json
サーバーはこのヘッダーを参考に、適切な形式でレスポンスを返します。
#Authorization
認証情報を送信します。APIでトークン認証を使う場合に必須です。
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
認証スキーム(BearerやBasicなど)とクレデンシャルをスペースで区切って指定します。
| スキーム | 形式 | 用途 |
|---|---|---|
| Bearer | Bearer {token} | JWT等のトークン認証 |
| Basic | Basic {base64(user:pass)} | ユーザー名とパスワード |
#User-Agent
クライアントの種類やバージョンを伝えます。
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36
ブラウザが自動的に設定しますが、APIクライアントやボットを識別するために使われることもあります。
#Cookie
保存されたCookieをサーバーに送信します。
Cookie: session_id=abc123; theme=dark
セッション管理やユーザー設定の保持に使われます。詳しくは後のモジュールで学習します。
#Origin
リクエスト元のオリジン(スキーム + ホスト + ポート)を示します。
Origin: https://example.com
CORS(Cross-Origin Resource Sharing)で、クロスオリジンリクエストの検証に使われます。
#レスポンスでよく見るヘッダー
#Content-Type
レスポンスボディの形式を示します。リクエストのContent-Typeと同じ役割です。
Content-Type: application/json; charset=utf-8
charsetパラメータで文字エンコーディングを指定することもあります。
#Content-Length
レスポンスボディのサイズ(バイト数)を示します。
Content-Length: 1234
#Set-Cookie
クライアントにCookieを保存させる指示です。
Set-Cookie: session_id=abc123; HttpOnly; Secure; SameSite=Strict
属性(HttpOnly、Secureなど)でCookieの挙動を制御します。詳しくは後のモジュールで学習します。
#Location
リダイレクト先のURLを示します。3xx レスポンスと一緒に返されます。
HTTP/1.1 302 Found
Location: https://example.com/dashboard
#Cache-Control
キャッシュの動作を制御します。
Cache-Control: max-age=3600, public
「1時間キャッシュしてよい」「誰でもキャッシュしてよい」などの指示を出します。詳しくはキャッシュ戦略モジュールで学習します。
#Access-Control-Allow-Origin
CORSで、どのオリジンからのリクエストを許可するかを示します。
Access-Control-Allow-Origin: https://example.com
詳しくはセキュリティモジュールで学習します。
#実践: DevToolsでヘッダーを確認する
実際にリクエストとレスポンスのヘッダーを確認してみましょう。
#手順
- DevToolsのNetworkタブを開く
- 任意のリクエストをクリック
- 「Headers」タブを選択
- 以下のセクションを確認:
- General: URL、メソッド、ステータスコード
- Response Headers: サーバーからのヘッダー
- Request Headers: ブラウザが送信したヘッダー
#確認ポイント
- Content-Type: 期待した形式でデータが送受信されているか?
- Authorization: 認証トークンが正しく送信されているか?
- Set-Cookie: サーバーがCookieを発行しているか?
- Cache-Control: キャッシュ設定はどうなっているか?
#カスタムヘッダー
アプリケーション独自のヘッダーを使用することもできます。慣例としてX-プレフィックスが使われてきましたが、現在は非推奨です。
# 古い慣例(非推奨)
X-Request-ID: abc123
# 現在の推奨
Request-ID: abc123
ただし、既存のAPIではX-プレフィックスが使われていることも多いです。
#ヘッダーのサイズ制限
HTTPヘッダーにはサイズ制限があります。制限はサーバーによって異なりますが、一般的な目安:
- 1つのヘッダー: 8KB〜16KB
- ヘッダー全体: 16KB〜32KB
大量のデータをヘッダーで送ることは避け、必要に応じてボディを使用してください。
#まとめ
- HTTPヘッダーは「キー: 値」形式で追加情報を伝える
- リクエストでよく使うヘッダー:
Content-Type: 送信データの形式Accept: 受け取りたいデータの形式Authorization: 認証情報
- レスポンスでよく見るヘッダー:
Content-Type: 返されたデータの形式Set-Cookie: Cookieの発行Location: リダイレクト先Cache-Control: キャッシュ設定
- DevToolsのHeaders タブで確認できる
#次のステップ
HTTPヘッダーの基本がわかったところで、次はHTTPSとTLSについて学びましょう。「なぜHTTPSが必要なのか」「証明書とは何か」——安全な通信の仕組みを理解することで、Webセキュリティの基礎が身につきます。