piapia123
ja

HTTP ヘッダー整形

Web

処理はすべてブラウザ内で完結します。データは送信されません

入力
ファイルをここにドロップすると読み込めます
出力

⚠️ 通信は行いませんので、ヘッダーはご自身で取得してください。最も簡単なのは `curl -I https://example.com` です(HEAD を送るのでヘッダーだけが返ります)。開発者ツールの Network パネルからコピーしてもかまいません。 画面いっぱいの HTTP ヘッダーを表に整形します —— リクエストもレスポンスも対応し、`curl -I` の出力をそのまま貼り付けられます。 整列だけでなく、いくつかの値も計算します:`Content-Length` は読みやすいサイズに(`20480` では一目で分かりません)、`Content-Type` の charset は別途取り出し、ステータス行から数字のステータスコードを抽出して照合しやすくします。 ⚠️ レスポンスでは、あるべきなのに無い 3 つのセキュリティヘッダーも確認します:`X-Content-Type-Options`(無いとブラウザがユーザー投稿の `.txt` をスクリプトとして実行する可能性があります)、`Strict-Transport-Security`(無いと初回アクセスが平文 HTTP になり得ます)、`Content-Security-Policy`(無いと 1 回の XSS でページ上のすべてを読み取られます)。サイトがどう注入されたかを調べるとき、まず見たいのは `Content-Security-Policy` の有無です。 間違えやすい 2 点は仕様どおりに処理しています:同名の複数行は統合しません —— 1 つのレスポンスに `Set-Cookie` が十数行あるのは普通で、カンマで連結すると意味が変わります(値自体にカンマが含まれ得ます)。折り返し行は前の行に結合します —— 空白で始まる行は継続行で、HTTP/1.1 では廃止されましたが、キャプチャや古いゲートウェイの出力には今も現れます。

機能

  • リクエストもレスポンスも対応、`curl -I` の出力をそのまま利用可能
  • 同名複数行はそれぞれ保持し統合しない(`Set-Cookie` は十数行になることが普通)
  • 折り返し行を前の行に結合し、空白 1 つに畳む
  • `Content-Length` を読みやすいサイズに、`Content-Type` の charset を抽出
  • ステータス行からコードを抽出し、対応表と照合しやすく
  • レスポンスに欠けている 3 つのセキュリティヘッダーと、その影響を提示
  • すべて端末内で解析し、貼り付けたヘッダーは外部に出ません

使い方

  1. HTTP ヘッダーの原文を左側に貼り付けます(`curl -I https://…` の出力で構いません)
  2. 必要なければセキュリティ確認をオフにします
  3. 結果がすぐ表示され、各行を個別にコピーできます
  4. cookie を詳しく見たい場合は `Set-Cookie` の行を「Cookie 整形」へ

よくある質問

同じ名前の行が 2 つあります。解析が壊れているのですか?
いいえ、正しい結果です。HTTP は同じヘッダーが複数回現れることを許容しており、`Set-Cookie` がその典型です —— 1 つのレスポンスに十数行の `Set-Cookie` があるのは日常的で、各行が独立した cookie を表します。 ⚠️ ここでは意図的に統合していません。複数の値をカンマで連結するのは技術的には有効な HTTP ですが、`Set-Cookie` は例外的です:値自体にカンマが含まれ得るため(`Expires=Wed, 21 Oct 2015 07:28:00 GMT`)、連結すると二度と分割できません。結果として「解析は成功したように見えるのに cookie が 1 つ消えている」状態になります。
「折り返し」とは何ですか?
長いヘッダー値を複数行に折る古い書き方で、後続行が空白かタブで始まることで前の行の継続であることを示します。 ``` X-Custom: part one part two ``` この 2 行で 1 つのヘッダー、値は `part one part two` です。RFC 7230 で廃止されました(本文と紛らわしく、正しく解析するのが難しいため)が、キャプチャツールや古いゲートウェイの出力には今も現れるため、ここでは通常どおり処理して印を付けます。
指摘された「不足しているセキュリティヘッダー」は必ず入れるべきですか?
場合によりますが、3 つとも真剣に検討する価値があります。`X-Content-Type-Options: nosniff` はほぼコストゼロで、どんなサイトにも入れるべきです —— 無いとブラウザがユーザー投稿ファイルをスクリプトとして扱う可能性があります。`Strict-Transport-Security` は HTTPS サイトでのみ意味を持ち、一度配信すると撤回が難しい点に注意してください(ブラウザが `max-age` を記憶します)。まず短い値から始めましょう。`Content-Security-Policy` は最も価値が高く、最も設定を誤りやすいものです。厳しいポリシーをいきなり適用するとほぼ確実に画面が真っ白になるため、まず `Content-Security-Policy-Report-Only` で違反レポートを集めてから切り替えるのが安全です。 なお、これら 3 つはレスポンスでのみ意味を持ちますので、リクエストを貼り付けても確認は行われません。

関連ツール