この記事の要点
• HTTPヘッダーはメタデータを伝える「名前: 値」形式のフィールド
• リクエスト・レスポンス・一般・エンティティの4種類に分類される
• 実務ではContent-Type、Authorization、Cache-Controlなどを正しく理解することが重要
HTTPヘッダーとは
HTTPヘッダーは、リクエストやレスポンスに付随するメタデータ(付加情報)を伝える「名前: 値」形式のフィールドです。リクエストライン/ステータスラインの直後に配置されます。
GET /api/users HTTP/1.1
Host: api.example.com
User-Agent: Mozilla/5.0
Accept: application/json
Authorization: Bearer token123
役割: コンテンツタイプ、認証情報、キャッシュ制御、圧縮方式など、通信に必要な補足情報を伝えます。
ヘッダーの分類
HTTPヘッダーは用途に応じて4つに分類されます:
| 分類 | 説明 | 例 |
|---|---|---|
| 一般ヘッダー | リクエスト/レスポンス共通 | Date, Connection, Cache-Control |
| リクエストヘッダー | クライアント→サーバー | Host, User-Agent, Accept |
| レスポンスヘッダー | サーバー→クライアント | Server, Set-Cookie, Location |
| エンティティヘッダー | ボディに関する情報 | Content-Type, Content-Length, Content-Encoding |
ポイント: HTTP/2以降では「表現メタデータ」など名称が変わりましたが、概念的には同じです。この記事では理解しやすい従来の分類を使います。
主要な一般ヘッダー
リクエスト・レスポンス双方で使われるヘッダー:
| ヘッダー | 説明 | 例 |
|---|---|---|
| Date | メッセージ生成日時 | Date: Wed, 02 May 2026 10:00:00 GMT |
| Connection | 接続管理 | Connection: keep-alive |
| Cache-Control | キャッシュ制御 | Cache-Control: max-age=3600 |
| Transfer-Encoding | 転送エンコーディング | Transfer-Encoding: chunked |
| Upgrade | プロトコルアップグレード | Upgrade: websocket |
Cache-Control - キャッシュ制御
# リクエスト(キャッシュを使わず最新データを取得)
GET /api/data HTTP/1.1
Cache-Control: no-cache
# レスポンス(3600秒キャッシュ可能)
HTTP/1.1 200 OK
Cache-Control: max-age=3600, public
主なディレクティブ:
| ディレクティブ | 意味 |
|---|---|
max-age=秒 | キャッシュ有効期間 |
no-cache | 再検証が必要 |
no-store | キャッシュしない |
public | 共有キャッシュ可能 |
private | プライベートキャッシュのみ |
主要なリクエストヘッダー
クライアントがサーバーに送る情報:
| ヘッダー | 説明 | 例 |
|---|---|---|
| Host | ターゲットホスト(HTTP/1.1で必須) | Host: api.example.com |
| User-Agent | クライアントソフトウェア情報 | User-Agent: Mozilla/5.0 (...) |
| Accept | 受け入れ可能なメディアタイプ | Accept: application/json |
| Accept-Language | 希望言語 | Accept-Language: ja, en;q=0.9 |
| Accept-Encoding | 受け入れ可能な圧縮方式 | Accept-Encoding: gzip, deflate, br |
| Authorization | 認証情報 | Authorization: Bearer token123 |
| Cookie | Cookie送信 | Cookie: session_id=abc123 |
| Referer | 参照元URL | Referer: https://example.com/page |
| Origin | リクエスト元オリジン(CORS) | Origin: https://app.example.com |
Host - ターゲットホスト
# HTTP/1.1では必須(仮想ホスト対応)
GET /api/users HTTP/1.1
Host: api.example.com
注意: HTTP/1.1ではHostヘッダーは必須です。省略すると400 Bad Requestになります。
Accept系ヘッダー - コンテンツネゴシエーション
# クライアントの希望を伝える
GET /api/data HTTP/1.1
Accept: application/json, text/html;q=0.9, */*;q=0.8
Accept-Language: ja, en-US;q=0.9, en;q=0.8
Accept-Encoding: gzip, deflate, br
q値(品質値):
- 0.0〜1.0で優先度を指定(デフォルト1.0)
ja, en;q=0.9→ 日本語優先、英語は次点
Authorization - 認証情報
# Basic認証
Authorization: Basic dXNlcjpwYXNzd29yZA==
# Bearer認証(JWT)
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
実践メモ: Basic認証はBase64エンコードのみで暗号化されていないため、必ずHTTPS上で使用してください。
Cookie - Cookie送信
# ブラウザが自動的に送信
GET /dashboard HTTP/1.1
Cookie: session_id=abc123; user_pref=dark_mode
主要なレスポンスヘッダー
サーバーがクライアントに返す情報:
| ヘッダー | 説明 | 例 |
|---|---|---|
| Server | サーバーソフトウェア情報 | Server: nginx/1.20.0 |
| Set-Cookie | Cookie設定 | Set-Cookie: session_id=abc; HttpOnly |
| Location | リダイレクト先 | Location: https://example.com/new |
| WWW-Authenticate | 認証方式の指示 | WWW-Authenticate: Bearer realm="api" |
| Access-Control-Allow-Origin | CORS許可(重要) | Access-Control-Allow-Origin: * |
| ETag | リソースのバージョン識別子 | ETag: "abc123" |
| Expires | キャッシュ期限 | Expires: Thu, 03 May 2026 10:00:00 GMT |
Set-Cookie - Cookie設定
HTTP/1.1 200 OK
Set-Cookie: session_id=abc123; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=3600
主な属性:
| 属性 | 説明 |
|---|---|
HttpOnly | JavaScriptからアクセス不可(XSS対策) |
Secure | HTTPS通信のみ送信 |
SameSite | CSRF対策(Strict/Lax/None) |
Max-Age | 有効期間(秒) |
Path | Cookie送信対象パス |
Domain | Cookie送信対象ドメイン |
ポイント: セキュリティのため、セッションCookieにはHttpOnly、Secure、SameSite=Strictを必ず設定しましょう。
Location - リダイレクト先
# 301リダイレクト
HTTP/1.1 301 Moved Permanently
Location: https://newdomain.com/page
# 201作成成功
HTTP/1.1 201 Created
Location: /api/users/456
Access-Control-Allow-Origin - CORS
HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://app.example.com
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Content-Type, Authorization
主要なエンティティヘッダー
リクエスト/レスポンスのボディに関する情報:
| ヘッダー | 説明 | 例 |
|---|---|---|
| Content-Type | メディアタイプ | Content-Type: application/json; charset=utf-8 |
| Content-Length | ボディのサイズ(バイト) | Content-Length: 1234 |
| Content-Encoding | 圧縮方式 | Content-Encoding: gzip |
| Content-Language | コンテンツの言語 | Content-Language: ja |
| Content-Disposition | ダウンロード指示 | Content-Disposition: attachment; filename="data.csv" |
| Last-Modified | 最終更新日時 | Last-Modified: Wed, 01 May 2026 10:00:00 GMT |
Content-Type - メディアタイプ
# JSONリクエスト
POST /api/users HTTP/1.1
Content-Type: application/json
{"name": "Alice"}
# HTMLレスポンス
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
<!DOCTYPE html>...
主なメディアタイプ:
| タイプ | 説明 |
|---|---|
application/json | JSON |
text/html | HTML |
text/plain | プレーンテキスト |
application/x-www-form-urlencoded | フォームデータ |
multipart/form-data | ファイルアップロード |
image/png | PNG画像 |
詳細は「Content-Type ヘッダー - MIMEタイプの基本」を参照してください。
Content-Encoding - 圧縮
HTTP/1.1 200 OK
Content-Encoding: gzip
Content-Length: 456
主な圧縮方式:
| 方式 | 説明 |
|---|---|
gzip | GNU zip(広くサポート) |
deflate | DEFLATE圧縮 |
br | Brotli(効率的、モダンブラウザ対応) |
Content-Disposition - ダウンロード
# ブラウザにダウンロードを指示
HTTP/1.1 200 OK
Content-Type: text/csv
Content-Disposition: attachment; filename="users.csv"
カスタムヘッダー
標準ヘッダー以外に、独自のヘッダーを定義できます:
# カスタムヘッダー(慣例的にX-で始まる)
GET /api/data HTTP/1.1
X-Request-ID: uuid-1234-5678
X-Client-Version: 1.2.3
HTTP/1.1 200 OK
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1714651200
注意: X-プレフィックスは非推奨になりました(RFC 6648)。新規のカスタムヘッダーは`X-`なしで定義すべきですが、既存のものは広く使われています。
実務でよく使うヘッダー10選
| ヘッダー | 場面 | 重要度 |
|---|---|---|
| Content-Type | リクエスト/レスポンス | ★★★ |
| Authorization | API認証 | ★★★ |
| Cache-Control | パフォーマンス最適化 | ★★★ |
| Accept | コンテンツネゴシエーション | ★★☆ |
| Set-Cookie | セッション管理 | ★★★ |
| Location | リダイレクト・作成後のURL | ★★☆ |
| Access-Control-Allow-Origin | CORS設定 | ★★★ |
| User-Agent | クライアント識別 | ★☆☆ |
| Referer | アクセス元トラッキング | ★☆☆ |
| ETag | キャッシュ検証 | ★★☆ |
ヘッダーの組み合わせ例
API認証とコンテンツネゴシエーション
GET /api/users HTTP/1.1
Host: api.example.com
Authorization: Bearer eyJhbGc...
Accept: application/json
Accept-Language: ja
Accept-Encoding: gzip, br
ファイルダウンロード
HTTP/1.1 200 OK
Content-Type: application/pdf
Content-Disposition: attachment; filename="report.pdf"
Content-Length: 123456
Cache-Control: private, max-age=0
CORS対応API
HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://app.example.com
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Content-Type, Authorization
Access-Control-Allow-Credentials: true
まとめ
HTTPヘッダーは通信の詳細を制御する重要な仕組みです。特に、Content-Type、Authorization、Cache-Control、CORSヘッダーは、現代のWeb開発で必須の知識です。
関連記事
参考リソース
- MDN - HTTP headers
- RFC 9110 - HTTP Semantics (Header Fields)
- IANA - Message Headers Registry
- HTTP Header Fields - Complete Reference