HTTPを実務で読めるようになるには、まずリクエストとレスポンスの構造を分解して理解するのが近道です。メソッド、パス、ヘッダー、ボディ、ステータスコードの役割を整理すると、API仕様書やDevToolsの画面が読みやすくなります。
HTTP通信は「リクエストメッセージ」と「レスポンスメッセージ」の交換です。それぞれに開始行、ヘッダー、必要に応じてボディがあります。
HTTPを細かく見ると、クライアントが送るリクエストと、サーバーが返すレスポンスは、どちらもある程度決まった構造を持っています。
ざっくりしたイメージは次の通りです。
この構造を知っていると、次のような場面で役立ちます。
curl -i の結果を理解するリクエストは「何をしたいか」をサーバーへ伝えるメッセージです。特に重要なのは、メソッド、対象パス、ヘッダー、ボディです。
リクエストは主に次の要素で構成されます。
簡略化した例です。
GET /products/1 HTTP/1.1
Host: example.com
Accept: application/json
User-Agent: curl/8.0
この例では、クライアントは /products/1 を取得したいと伝えています。
開始行を見ると、そのリクエストが「何を」「どうしたいか」を最短で把握できます。
開始行は次の3つで構成されます。
| 要素 | 例 | 意味 |
|---|---|---|
| メソッド | GET | どんな操作か |
| パス | /products/1 | 対象リソースは何か |
| HTTPバージョン | HTTP/1.1 | 通信時のHTTPバージョン |
たとえば次の開始行からは、「/orders に対して新しいデータを送る処理」が想像できます。
POST /orders HTTP/1.1
ヘッダーは、本文そのものではなく、通信条件や追加情報を伝えるために使われます。
よく使うリクエストヘッダーの例を挙げます。
| ヘッダー | 役割 | 例 |
|---|---|---|
Host | 接続先ホスト名 | example.com |
Accept | 受け取りたいデータ形式 | application/json |
Content-Type | 送る本文の形式 | application/json |
Authorization | 認証情報 | Bearer ... |
Cookie | ブラウザが保持するCookie | session_id=abc123 |
たとえばJSONを送るPOSTリクエストでは、Content-Type が重要です。Content-Type が適切でないと、サーバー側が本文を正しく解釈できないことがあります。
POST /products HTTP/1.1
Host: example.com
Content-Type: application/json
{"name":"Keyboard","price":5000}
HTTPリクエストには常にボディがあるわけではありません。取得系はボディなし、作成・更新系はボディあり、という形がよくあります。
代表的には次の傾向があります。
| メソッド | ボディ | よくある用途 |
|---|---|---|
GET | なしが一般的 | データ取得 |
POST | あり | 新規作成、送信 |
PUT | あり | 全体更新 |
PATCH | あり | 部分更新 |
DELETE | なしが多い | 削除 |
ただし、これは「よくある形」であり、実装やAPI設計方針によって差はあります。
レスポンスは、サーバーが「どう処理したか」と「何を返すか」を表すメッセージです。特にステータスコードとレスポンスヘッダーが重要です。
レスポンスは主に次の要素で構成されます。
簡略化した例です。
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 34
{"id":1,"name":"Sample Product"}
ステータス行を見ると、サーバーがそのリクエストをどう処理したかを素早く把握できます。
| 要素 | 例 | 意味 |
|---|---|---|
| HTTPバージョン | HTTP/1.1 | レスポンス時のHTTPバージョン |
| ステータスコード | 200 | 成功・失敗の分類 |
| 理由句 | OK | 人間向けの簡単な説明 |
代表的なステータスコードの例です。
| コード | 意味 | よくある場面 |
|---|---|---|
200 | 成功 | データ取得成功 |
201 | 作成成功 | リソース作成成功 |
204 | 成功だが本文なし | 削除成功 |
400 | リクエスト不正 | パラメータ不足 |
401 | 認証が必要 | ログイン未実施 |
403 | 権限不足 | 権限がない |
404 | 見つからない | URLや対象IDが不正 |
500 | サーバー内部エラー | アプリ側障害 |
レスポンスヘッダーは、返ってくるデータの形式やキャッシュ方針、Cookie設定などを伝えます。
よく出会うレスポンスヘッダーの例です。
| ヘッダー | 役割 | 例 |
|---|---|---|
Content-Type | レスポンス本文の形式 | application/json |
Content-Length | 本文サイズ | 34 |
Cache-Control | キャッシュ制御 | no-store |
Set-Cookie | Cookie発行 | session_id=... |
Location | リダイレクト先や作成先 | /products/10 |
たとえばログイン成功時には、レスポンスに Set-Cookie が含まれることがあります。この場合、ブラウザはCookieを保存し、以後のリクエストで自動的に送信します。
HTTP/1.1 200 OK
Content-Type: application/json
Set-Cookie: session_id=abc123; HttpOnly; Secure
{"result":"ok"}
成功していても、常にレスポンスボディが返るわけではありません。特に 204 No Content は本文なしが前提です。
削除APIや一部の更新APIでは、処理成功だけを伝えて本文を返さない設計もよくあります。
HTTP/1.1 204 No Content
ヘッダーは種類が多いですが、最初は用途の広い少数だけ押さえると実務で困りにくくなります。
最初に優先して覚えておきたいヘッダーです。
Host、Accept、Content-Type、Authorization、CookieContent-Type、Cache-Control、Set-Cookie、Locationこの段階では、すべてを暗記する必要はありません。「ヘッダーは通信条件や付加情報を伝える場所」と理解しておくと整理しやすくなります。
1回のAPI作成リクエストを通しで見ると、リクエストとレスポンスの関係が理解しやすくなります。
商品の作成APIを例にします。
クライアントはメソッド、送信先、本文形式、認証情報、本文データをまとめて送ります。
POST /products HTTP/1.1
Host: api.example.com
Authorization: Bearer xxxxxx
Content-Type: application/json
Accept: application/json
{
"name": "Keyboard",
"price": 5000
}
サーバーは作成成功を示すステータスと、作成したデータや場所を返します。
HTTP/1.1 201 Created
Content-Type: application/json
Location: /products/101
{
"id": 101,
"name": "Keyboard",
"price": 5000
}
このやり取りから、少なくとも次が読み取れます。
POST なので作成系の操作201 Created なので新規作成成功Location に新しいリソース位置がある実務では、構造を暗記するより「どこを見ればよいか」を知る方が役立ちます。
{{image:devtools_network_tab}}
ブラウザの開発者ツールや curl では、次の順に見ると効率的です。
Content-Typecurl でヘッダー込みで見る例:
curl -i https://example.com/products/1
JSONを送る例:
curl -i \
-X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"name":"Keyboard","price":5000}' \
https://api.example.com/products
HTTPの構造を知らないと、エラーの原因が本文なのかヘッダーなのか切り分けにくくなります。
| つまずき | 原因になりやすい点 | 確認方法 |
|---|---|---|
| 400 Bad Request | JSONの形式不正、必須項目不足 | リクエストボディとAPI仕様を確認する |
| 401 Unauthorized | 認証ヘッダー不足、期限切れ | Authorization を確認する |
| 415 Unsupported Media Type | Content-Type 不正 | Content-Type を確認する |
| 期待した形式で返らない | Accept やAPI仕様の認識違い | レスポンスヘッダーを確認する |
| ログイン状態が維持されない | Cookie未送信、属性不一致 | Set-Cookie と Cookie を確認する |
HTTPでは、ヘッダーが原因の不具合が多くあります。本文だけを見て終わらず、ヘッダーも必ず確認するようにすると切り分けがしやすくなります。
HTTPのリクエストとレスポンスは、開始行、ヘッダー、ボディという一定の構造で成り立っています。この構造を理解すると、API仕様、DevTools、curl、ログの読み方が一気につながります。
Content-Type、Accept、Authorization、Set-Cookie などは実務で特に重要