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 を常用すると、証明書を検証したという前提が失われます。