HTTPレスポンスの読み方

入門 | 10分 で読める | 2026.06.26

公式ドキュメント

今回やること

この記事では、HTTPレスポンスを読みます。

レスポンスは「処理結果」「返ってきた形式」「ブラウザに保存させる情報」「次に見るべき本文」の順に確認すると整理しやすくなります。

ステータスコードの一覧を暗記する記事ではありません。実際の調査で、どの部分を見るべきかを練習します。

レスポンス全体の形

HTTPレスポンスは、主に3つの部分でできています。

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Cache-Control: no-store
Set-Cookie: session_id=abc123; HttpOnly; Secure; SameSite=Lax

{"id":1,"name":"Ada"}
部分見ること
ステータスライン成功か失敗か
ヘッダー形式、キャッシュ、Cookie、リダイレクトなど
ボディHTML、JSON、画像、エラー詳細など

まずはステータスコードを見ます。その後、Content-TypeLocationSet-CookieCache-Control、本文を確認します。

Step 1: ステータスコードを見る

先頭の HTTP/1.1 200 OK のうち、200 がステータスコードです。

HTTP/1.1 404 Not Found

大まかな分類は次の通りです。

範囲意味
2xx成功
3xxリダイレクト
4xxクライアント側のリクエストに問題がある
5xxサーバー側で処理に失敗した

最初に見るのはこの分類です。404 ならURLやルーティング、401 ならログイン状態、500 ならサーバーログや例外、というように調査の方向が決まります。

Step 2: Content-Typeを見る

Content-Type は、レスポンス本文の形式を表します。

Content-Type: application/json; charset=utf-8
返ってくるもの
text/htmlHTMLページ
application/jsonJSON
text/cssCSS
application/javascriptJavaScript
image/png / image/webp画像
application/pdfPDF

APIのつもりで呼んだのに text/html が返っている場合、ログイン画面、エラーページ、404ページなどが返っていることがあります。フロント側で Unexpected token < in JSON のようなエラーが出るときは、JSONではなくHTMLをJSONとして読もうとしているケースが多いです。

Step 3: Locationを見る

3xx のレスポンスでは、Location ヘッダーを確認します。

HTTP/1.1 302 Found
Location: /login

これは「次は /login を見てください」という意味です。

よくある読み方:

状態読み取り
/login に飛ばされる未ログイン扱いになっている
http から https に飛ぶHTTPSへ正規化している
旧URLから新URLへ飛ぶリダイレクト設定がある
何度も同じ場所へ飛ぶリダイレクトループの可能性

ブラウザはリダイレクトを自動で追うため、最終的な画面だけ見ていると途中の 302 を見落とします。DevToolsのNetworkで最初のリクエストから順番に見ます。

Step 4: Set-Cookieを見る

ログインやセッション更新では、レスポンスに Set-Cookie が含まれることがあります。

Set-Cookie: session_id=abc123; HttpOnly; Secure; SameSite=Lax; Path=/

見るポイントは次の通りです。

属性確認すること
HttpOnlyJavaScriptから読ませない設定か
SecureHTTPS通信でのみ送る設定か
SameSite外部サイトからの送信制限
PathCookieを送るパス範囲
DomainCookieを送るドメイン範囲
Expires / Max-Age有効期限

ログイン成功レスポンスに Set-Cookie があるのに次の画面で未ログインになる場合、Cookieが保存されていない、次のリクエストで送られていない、ドメインやSameSiteの条件に合っていない、などを確認します。

Step 5: Cache-Controlを見る

Cache-Control は、ブラウザやCDNにキャッシュの扱いを伝えます。

Cache-Control: public, max-age=31536000, immutable
読み方
no-store保存しない
no-cache再利用前に確認する
max-age=6060秒間は新鮮として扱う
public共有キャッシュも保存できる
private個人向けなので共有キャッシュは避ける
immutable内容が変わらない前提で強くキャッシュ

CSSや画像が更新されない場合は、キャッシュが効いている可能性があります。逆に、ログイン後の個人情報ページが強くキャッシュされている場合は、セキュリティやプライバシー上の問題になります。

Step 6: ボディを見る

レスポンスボディには、実際の本文が入ります。

JSON APIなら次のような形です。

{
  "error": "validation_failed",
  "message": "email is required"
}

画面用ページならHTMLです。

<!doctype html>
<html lang="ja">
  <head>
    <title>ログイン</title>
  </head>
  <body>...</body>
</html>

APIエラーでは、ステータスコードだけでなく本文のエラーコードやメッセージを確認します。400 Bad Request でも、本文に「どの項目が足りないか」が書かれていることがあります。

読み方の練習

次のレスポンスを読んでみます。

HTTP/1.1 201 Created
Content-Type: application/json
Location: /api/users/42

{"id":42,"name":"Ada"}

読み取り:

項目内容
結果作成成功
形式JSON
作成された場所/api/users/42
本文作成されたユーザー情報

201 Created は、作成処理が成功したときによく使われます。Location がある場合、作成されたリソースの場所を示します。

次の例も見ます。

HTTP/1.1 401 Unauthorized
Content-Type: application/json
WWW-Authenticate: Bearer

{"message":"token expired"}

読み取り:

項目内容
結果認証が必要、または認証に失敗
認証方式Bearer Token
失敗理由トークン期限切れ

この場合、URLやサーバー停止ではなく、ログイン状態やトークン更新処理を見るべきです。

DevToolsで見る場所

Chrome DevToolsでは、Networkパネルで対象の通信を選びます。

見たいもの場所
ステータスコードHeaders > General
レスポンスヘッダーHeaders > Response Headers
JSON本文Preview または Response
HTML本文Response
Cookie保存Application > Cookies
キャッシュ状態NetworkのSize列、Headers

API通信だけを見たい場合は、Networkパネルの Fetch/XHR フィルターを使うと探しやすくなります。

curlで確認する

ヘッダーだけを見る場合は、次のようにします。

curl -I https://example.com

リダイレクトも追う場合:

curl -I -L https://example.com

本文も含めて詳細に見る場合:

curl -v https://example.com

ブラウザとcurlで結果が違う場合、Cookie、CORS、キャッシュ、ユーザーエージェント、認証ヘッダーの違いを確認します。

まとめ

HTTPレスポンスは、ステータスコード、Content-TypeLocationSet-CookieCache-Control、本文の順に見ると原因を切り分けやすくなります。

画面に出ているエラーだけで判断せず、実際に返ってきたステータスとヘッダーを見ることが、Webアプリの不具合調査の基本です。

参考リソース

← 一覧に戻る
PR
PR
PR
PR