HTTPの理解を実務で役立てるには、実際の通信を観察して原因を切り分ける力が重要です。ブラウザのDevToolsと curl を使うと、URL、メソッド、ヘッダー、ボディ、ステータスコードを確認しながらHTTPの問題を具体的に調査できます。
Webの不具合は、画面の問題に見えても、実際にはHTTP通信の失敗であることがよくあります。通信を直接見られるようになると、原因の切り分けが速くなります。
次のような不具合は、HTTPを確認しないと原因が見えにくいです。
こうした問題では、次を確認できるかが重要です。
HTTPデバッグでは、毎回見る項目を固定すると調査が安定します。最初はURL、メソッド、ステータスコード、ヘッダー、ボディの順で十分です。
| 確認項目 | 何を見るか | 典型的な発見 |
|---|---|---|
| URL | 送信先が正しいか | パス間違い、環境違い |
| Method | GET / POST など | メソッド不一致 |
| Status | 200 / 404 / 500 など | 成功か失敗かの分類 |
| Request Headers | Authorization、Content-Type など | 認証不足、形式不一致 |
| Request Body | JSONやフォーム内容 | 必須項目不足 |
| Response Headers | Content-Type、Set-Cookie など | Cookie未発行、CORS不足 |
| Response Body | エラーメッセージや返却データ | バリデーション失敗の詳細 |
ブラウザで起きる不具合は、まずDevToolsのNetworkタブを見るのが基本です。ブラウザ特有のCookie、CORS、プリフライト、リダイレクトも追いやすいのが強みです。
主に見る場所:
Networkタブでは、1つ1つのHTTP通信を一覧で確認できます。まずは対象リクエストを選び、Headers、Payload、Responseを見る流れを覚えると十分です。
基本手順:
Network タブを開くHeadersでは、URL、メソッド、ステータス、送受信ヘッダーをまとめて確認できます。最初の切り分けの中心になる場所です。
特に見たい項目:
Authorization、Content-Type、Cookie、OriginContent-Type、Set-Cookie、Location、Cache-Control、Access-Control-Allow-Originこれを見るだけで、かなりの問題が絞れます。
POSTやPUT、PATCHでは、送信内容自体が間違っていることがあります。Payloadを見ると、実際に何が送られたか確認できます。
確認したいこと:
画面では入力したつもりでも、フロントエンドのバグで空文字が送られていることがあります。
Responseでは、サーバーが実際に返した本文を確認できます。エラー原因の詳細はここに入っていることが多いです。
{
"error": "validation_failed",
"details": {
"email": "must be a valid email address"
}
}
500 だけ見て終わるのではなく、本文も確認することが重要です。
ブラウザでは、通信失敗がJavaScriptエラーやCORSエラーとしてConsoleに出ることがあります。NetworkだけでなくConsoleも見ると情報が補完されます。
特にConsoleで見つけやすいもの:
fetch や axios の失敗ログCORSでは、Network上はサーバー応答が見えていても、Consoleにブラウザ制約のエラーが出ます。
ログイン状態やセッション不具合は、NetworkだけではなくCookieの保存状態まで見ると切り分けやすくなります。
確認したい例:
Set-Cookie がレスポンスにあるかHttpOnly、Secure、SameSite の設定Cookie が送られているかログインが維持されないときは、次をセットで見ます。
Set-CookieCookiecurl はHTTP通信をCLIから直接試せるツールです。ブラウザを介さずに疎通確認、ヘッダー確認、API動作確認ができるため、フロントエンド要因とAPI要因を切り分けるのに役立ちます。
curl が便利な場面:
curl オプション| オプション | 役割 |
|---|---|
-i | レスポンスヘッダーも表示する |
-X | HTTPメソッドを指定する |
-H | リクエストヘッダーを付ける |
-d | リクエストボディを送る |
-I | ヘッダーだけ取得する |
-L | リダイレクト先を追う |
-b | Cookieを送る |
-c | Cookieを保存する |
-v | 詳細ログを表示する |
curl -i https://api.example.com/products/1
確認ポイント: 200 か 404 か、Content-Type は何か、本文は期待通りか
curl -i \
-X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"name":"Keyboard","price":5000}' \
https://api.example.com/products
確認ポイント: Content-Type を付けているか、JSON構文が正しいか、201 か 400 か
curl -i \
-H "Authorization: Bearer xxxxxx" \
-H "Accept: application/json" \
https://api.example.com/me
これで成功するなら、ブラウザ側の認証ヘッダー付与やCookie送信に問題がある可能性があります。
# ログインしてCookieを保存する
curl -i -c cookies.txt \
-X POST \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "email=test@example.com&password=secret" \
https://example.com/login
# 保存したCookieで再アクセスする
curl -i -b cookies.txt https://example.com/mypage
ブラウザ起点の不具合はDevTools、API単体の確認は curl が得意です。両方を使い分けると切り分けが速くなります。
| 観点 | DevTools | curl |
|---|---|---|
| ブラウザ操作に紐づく通信 | 強い | 弱い |
| CORS確認 | 強い | 擬似的確認のみ |
| Cookie保存状態確認 | 強い | 限定的 |
| API単体疎通確認 | できる | 強い |
| リクエスト再現性 | 中程度 | 高い |
| 自動化や共有 | やや弱い | 強い |
curl で同じ通信を再現するcurl でも失敗するか確認するcurl でも失敗 → APIやサーバー設定側を調査するcurl では成功 → ブラウザ、CORS、Cookie、JS実装を調査する2xxは成功ですが、「期待した形で成功しているか」は別問題です。本当に正しいデータが返っているか、Content-Type が正しいか、Cookieが設定されているかを確認します。
3xxはリダイレクトです。Location ヘッダーの確認が重要です。よくある例: 未ログインで /login へ飛ばされる、HTTPからHTTPSへ転送される。
4xxはクライアント側リクエストに問題があることが多いので、ヘッダーやボディを重点的に見ます。
| コード | 主に見るポイント |
|---|---|
400 | リクエストボディ、必須項目、JSON形式 |
401 | Authorization、Cookie、セッション |
403 | 権限、認可条件 |
404 | URL、パス、環境 |
405 | メソッド誤り |
415 | Content-Type |
422 | バリデーション内容 |
5xxはサーバー側障害を疑いますが、入力によって再現する場合もあります。どの入力で起きたか、再現条件は何か、サーバーログに対応するエラーがあるかを確認します。
認証系は、レスポンスだけでなくCookie保存と次回送信まで見ないと判断できません。
Set-CookieCookie401 / 403 の有無CORSはConsoleとNetworkをセットで見ると切り分けやすいです。
OPTIONS が飛んでいるかOrigin の値Access-Control-Allow-OriginAccess-Control-Allow-HeadersAccess-Control-Allow-CredentialsJSON送信では、本文内容と Content-Type の不一致が典型的です。
Content-Type: application/json が付いているか400 や 415 が返っていないか本番だけ失敗する場合は、環境差分を疑うのが基本です。
確認したい差分: URL、ドメイン、HTTPS有無、CORS許可オリジン、Cookie属性、認証方式、リバースプロキシやCDN設定
デバッグは自分だけで完結しないことが多いため、再現条件とHTTP情報を簡潔に共有できるとチーム開発で強いです。
共有に含めたい情報: 発生日時、環境(ローカル/ステージング/本番)、URL、メソッド、ステータスコード、リクエストヘッダー(秘匿情報はマスク)、リクエストボディ(個人情報は伏せる)、レスポンスヘッダー、レスポンスボディ、画面操作手順、curl で再現できるか
事象:
商品作成APIが本番で 401 になる
再現手順:
1. 管理画面で商品作成
2. 保存ボタンを押す
確認結果:
- URL: https://api.example.com/products
- Method: POST
- Status: 401
- Request Headers: Authorization が付いていない
- Request Body: {"name":"Keyboard","price":5000}
- Response Body: {"error":"unauthorized"}
補足:
curl で Authorization を付けると成功する
| つまずき | よくある原因 | 対策 |
|---|---|---|
| エラー画面だけ見て終わる | 通信を見ていない | Networkタブを開く |
| 500だけ見て本文を見ない | 詳細を見落とす | Responseも確認する |
| 本番再現時に情報を残していない | 一回きりの現象 | ヘッダーと本文を保存する |
| CORSをAPI障害と誤解する | ブラウザ制約の理解不足 | ConsoleとNetworkを両方見る |
curl で成功したので安心する | ブラウザ特有問題を見落とす | DevToolsでも確認する |
HTTPデバッグでは、URL、メソッド、ステータスコード、ヘッダー、ボディを観察するのが基本です。ブラウザのDevToolsで実際の画面操作に紐づく通信を確認し、curl でAPIを単体再現すると、問題の切り分けが大幅にしやすくなります。
curl ではヘッダー、JSON送信、認証付きリクエストを再現できるcurl を使い分けると、フロントエンド要因とAPI要因を分けやすい