ゆるい技術メモ

記事一覧 / Web

curl で HTTP レスポンスヘッダーを読む

手順メモ · 一般的な例 · 実行環境依存

HEAD と GET の違いを残したまま、ステータス、リダイレクト、Content-Type を確認する。

ヘッダーは一回の応答の情報

HTTP ヘッダーにはステータスや本文の種類、キャッシュの条件などが含まれます。表示された値はその時のリクエストに対する応答であり、別の地域、時刻、ログイン状態でも同じになるとは限りません。以下の example.com は例示用の URL です。実際に調べる権限のある対象へ置き換えます。

HEAD で概要を見る

curl --head --max-time 15 https://example.com/

--head は HTTP の HEAD メソッドを使います。本文は受け取りません。サーバーによっては HEAD と GET の取り扱いが異なるため、この結果だけで本文の表示まで確認したことにはなりません。タイムアウトした場合も、サイトが恒久的に停止していると直ちに判断しないようにします。

GET のヘッダーを本文と分ける

curl --silent --show-error --max-time 15 \
  --dump-header - --output /dev/null \
  https://example.com/

この例は GET を行い、受け取ったヘッダーを標準出力へ、本文を /dev/null へ送ります。--silent で進捗表示を消し、--show-error でエラーメッセージを残します。200 が出ても本文が期待どおりかは別途ブラウザーで確認します。

リダイレクトは途中も読む

curl --silent --show-error --location --max-redirs 5 \
  --max-time 20 --dump-header - --output /dev/null \
  https://example.com/

--location を使うと、リダイレクト先をたどります。出力に複数のヘッダーブロックが並ぶことがあります。最初と最後のステータス、Location の向き、最終的な Content-Type を区別して読みます。Cookie や認証情報を含む結果を共有する際は、該当値を取り除いてください。

よく見る項目と限界

Content-Type は本文のメディア型、Location は移動先、Cache-Control はキャッシュ方針を表します。Server ヘッダーだけで実際の構成を断定しないことも大切です。TLS エラーを隠すために --insecure を常用すると、証明書を検証したという前提が失われます。

参考にした公式資料