# レスポンス (/ja/docs/requests/responses)

サーバが返したものは、すべてレスポンスペインに表示されます。ボディは適した表示で、そのほかにヘッダー、Cookie、届いたままのメッセージ、16進表示のバイト、通信上のバイトがあります。
ステータスと時間は、URLバーの下の行にあります。ボディは届くそばからディスクに書き込まれるため、数百メガバイトのレスポンスも、小さなレスポンスと同じ速さで開きます。

<Shot id="requests-http-response-tree" alt="List productsのレスポンスをJSONツリー表示にしたところ。値にポインタが合わされ、「値をコピー」と「変数に保存」ボタンが表示されている" />

## ステータス、時間、サイズ [#status-time-and-size]

送信後、URLバーの下の行には次のものが表示されます：

- <strong>ステータス</strong>。クラス（2xx、3xx、4xx、5xx）によって色分けされます。レスポンスが得られなかったリクエストには、代わりに<strong>失敗</strong>または<strong>キャンセル済み</strong>と表示されます。
- やり取りの<strong>フェーズ</strong>ごとのバー。リクエストの実行中に伸びていきます。
- <strong>合計時間</strong>。

行にポインタを合わせると、詳細を示すカードが開きます：

| カード内の項目 | 内容 |
| --- | --- |
| ステータス | ステータスコードと理由。 |
| <strong>時間</strong> | やり取りの合計時間。 |
| <strong>サイズ</strong> | ボディのサイズ。ボディの受信中は、全体のうちどれだけ届いたか。 |
| <strong>エンコーディング</strong> | 圧縮方式と、デコード前後のサイズ（`br, 12 KB → 48 KB`など）、またはデコードできなかったこと。 |
| <strong>3回のリダイレクト</strong> | 追跡したリダイレクト。クリックすると、各ホップのステータス、メソッド、アドレス、時間が分かります。 |
| チェック | リクエストのチェックのうち、合格した数。 |
| <strong>再利用した接続</strong> | リクエストが、以前のリクエストから開いたままの接続で送られました：DNS、接続、TLSの時間はありません。 |
| TLS | TLSのバージョンとプロトコル（`TLS 1.3 · h2`など）。クリックすると証明書が表示されます：サブジェクト、<strong>発行元</strong>、<strong>有効</strong>期間、<strong>名前</strong>。オレンジの開いた鍵は、検証がオフだったことを示します。 |
| <strong>HTTP/3を提供</strong> | サーバが`Alt-Svc`でHTTP/3を提供しました。[HTTPバージョン](/docs/requests/settings#http-version)を参照してください。 |
| アドレス | サーバのIPアドレスとポート。 |
| タイムライン | <strong>DNS</strong>、<strong>接続</strong>、<strong>TLS</strong>、<strong>待機</strong>（レスポンスの最初のバイトまで）、<strong>転送</strong>と、それぞれの時間。 |

リクエストが再送信された場合（新しい接続で、またはHTTP/1.1で）、カードにその理由が表示されます。失敗した場合は、カードにエラーが表示されます。

## レスポンスのタブ [#the-response-tabs]

| タブ | 表示する内容 |
| --- | --- |
| <strong>ボディ</strong> | 選択した表示でのボディ。 |
| <strong>イベント</strong> | Server-Sent Eventsなどのイベントストリーム。1行に1イベント。[WebSocketとSSE](/docs/requests/websocket-and-sse)を参照してください。 |
| <strong>テスト</strong> | リクエストのチェックとスクリプトのテストの結果。`3/4`のような件数付き。 |
| <strong>コンソール</strong> | リクエストのスクリプトが記録したもの。スクリプトが実行されたときのみ。[スクリプトとテスト](/docs/requests/scripts-and-tests)を参照してください。 |
| <strong>ヘッダー</strong> | レスポンスヘッダー。件数付き。 |
| <strong>Cookie</strong> | 送信されたCookieと設定されたCookie、およびウインドウのCookieジャー。 |
| <strong>生データ</strong> | 1つのHTTPメッセージとしてのレスポンス：ステータス行、ヘッダー、空行、ボディ。 |
| <strong>16進数</strong> | ボディのバイト。 |
| <strong>通信</strong> | 接続上を実際に流れたとおりの、送信と受信のバイト。 |

## ボディの表示 [#body-views]

<strong>ボディ</strong>タブの上部の行で表示を選びます：

| 表示 | 内容 |
| --- | --- |
| <strong>テキスト</strong> | 届いたままのボディ。コンテンツタイプに応じて色が付きます。 |
| <strong>JSON</strong> | 整形されたJSON。 |
| <strong>JSONツリー</strong> | 展開と折りたたみができるツリーとしてのJSON。 |
| <strong>XML</strong> | 要素、属性、テキストのツリーとしてのXML。 |
| <strong>フォーム</strong> | ツリーとして読み取ったURLエンコードのボディ。 |
| <strong>MessagePack</strong> | ツリーとして読み取ったMessagePackのボディ。 |
| <strong>プレビュー</strong> | 画像、PDF、オーディオ、ビデオ。クイックルックで表示します。 |

どのボディにもすべての表示が用意されているので、コンテンツタイプが誤って送られたレスポンスも、本来の内容として読めます。レスポンスが最初に開く表示はコンテンツタイプで決まり、
Echolotはボディの種類ごとに、選んだ表示を記憶します。1つのJSONレスポンスで<strong>JSONツリー</strong>を選ぶと、次のレスポンスからはツリーで開きます。

HTMLとスクリプトは、実行もレンダリングもされません。<strong>プレビュー</strong>と<strong>デフォルトのアプリで開く</strong>は、それらをテキストとして表示します。

テキスト表示では、長い行は横にスクロールします。折り返しボタンをクリックするか、<strong>表示 › 長い行を折り返す</strong>を選ぶと、折り返されます。
<strong>表示 › コードを拡大</strong>（<kbd>⌘</kbd><kbd>+</kbd>）、<strong>コードを縮小</strong>（<kbd>⌘</kbd><kbd>-</kbd>）、<strong>実際のコードサイズ</strong>（<kbd>⌘</kbd><kbd>0</kbd>）は、すべての場所でコードのサイズを変更します。

## JSONツリーとXMLツリー [#json-and-xml-trees]

ツリーには、各値のキーまたはインデックス、型、値が表示されます。折りたたんだオブジェクトや配列には、含まれる項目の数が表示されます。
1,000件を超える配列は`[0 … 999]`のような範囲に分割されるので、巨大な配列もすぐに開きます。

値にポインタを合わせると、ボタンが表示されます：

- <strong>ブラウザで開く</strong>：値がWebアドレスのとき。
- <strong>値をコピー</strong>。
- <strong>変数に保存…</strong>：値を変数に保存し、希望すれば送信のたびに更新します。[レスポンスのキャプチャ](/docs/requests/captures#store-a-value-from-the-response)を参照してください。

行を右クリックすると、さらに操作できます：

- JSONツリーでは：<strong>パスをコピー</strong>（`$.items[0].sku`のような、値へのJSONPath）、<strong>値をコピー</strong>、<strong>チェックを追加</strong>。最後のものは、その値が現在の値と等しいというチェックを<strong>テスト</strong>タブに追加します。
- XMLツリーでは：<strong>XPathをコピー</strong>と<strong>値をコピー</strong>。

画像のアドレスである値にポインタを合わせると、横にサムネイルが開きます。画像は、ブラウザが画像を取得するのと同じように取得されます。Cookieや認証情報は使われず、最大10 MBまでで、履歴には記録されません。
`data:image/…`の値は、リクエストなしで表示されます。日付に見える値（秒、ミリ秒、マイクロ秒、ナノ秒のUnix時間、またはISO 8601のタイムスタンプ）にポインタを合わせると、読みやすい日付で表示されます。

<strong>XML</strong>ツリーは50 MBまでのボディに、<strong>フォーム</strong>と<strong>MessagePack</strong>は64 MBまでに対応します。それより大きいものは<strong>テキスト</strong>を使って検索してください。

## 検索 [#find]

<kbd>⌘</kbd><kbd>F</kbd>（<strong>リクエスト › ボディ内を検索</strong>）を押すか、虫眼鏡をクリックします。

- <strong>テキスト</strong>と<strong>JSON</strong>では、検索する文字列を入力します。<strong>Aa</strong>は大文字小文字を区別し、<strong>.\*</strong>は正規表現にします。バーには`3 of 1,204`のように現在位置が表示されます。
  <kbd>↩</kbd>または<kbd>⌘</kbd><kbd>G</kbd>で次の一致、<kbd>⇧</kbd><kbd>⌘</kbd><kbd>G</kbd>で前の一致に移動します。
  最大10,000件の一致に印が付き、それ以上あるときは件数に`+`が付きます。
- <strong>JSONツリー</strong>、<strong>フォーム</strong>、<strong>MessagePack</strong>では、バーに`$.items[0]`のようなJSONPathを入力すると、その値に移動します。何もなければ<strong>見つかりません</strong>と表示されます。

<kbd>Esc</kbd>を押すとバーが閉じます。

## 大きなレスポンス [#large-responses]

Echolotはボディをメモリに保持しません。届くそばからファイルにストリーミングし、ビューアは画面に表示されている部分だけを読み込みます：

- 残りがまだ届いている間も、最初の行が表示されます。ボディのダウンロード中は、詳細カードにどれだけ届いたかが表示されます。
- <strong>JSON</strong>は、ボディが始まるとすぐに整形を開始し、ボディが大きくなるのに合わせて追従します。
- <strong>JSONツリー</strong>は、展開した行だけを構築します。
- 検索は、ディスク上のボディ全体を対象にします。

Alpenglowの<strong>Catalog › Export the catalog</strong>で試せます：4万件の商品、約14 MBです。

ボディは、<strong>設定 › ストレージ › レスポンスのボディを保持する上限</strong>で設定したサイズまでディスクに保持されます。上限を超えると、タブで開いているボディを除き、最も長く使われていないものから削除されます。
ボディが削除された古いレスポンスには、<strong>This response's body is no longer stored.</strong>と表示されます。[ストレージと暗号化](/docs/workspaces/storage-and-encryption)を参照してください。

## ヘッダー [#headers]

<strong>ヘッダー</strong>タブには、レスポンスヘッダーが届いた順に一覧されます。行にポインタを合わせるか、行を選択して<kbd>Space</kbd>を押す（移動は<kbd>↑</kbd>と<kbd>↓</kbd>）と、
値の全文、ヘッダーの用途、値が意味することが表示されます。ヘッダーを右クリックすると、<strong>値をコピー</strong>、<strong>ヘッダーをコピー</strong>、<strong>チェックを追加</strong>が選べます。
最後のものは、そのヘッダーに対するチェックを<strong>テスト</strong>タブに追加します。

## Cookie [#cookies]

<strong>Cookie</strong>タブは3つの部分に分かれています：

- <strong>リクエストと一緒に送信</strong>：送信されたCookieと、それぞれの出どころ。
- <strong>レスポンスで設定</strong>：各`Set-Cookie`とその属性。ジャーが拒否した場合は警告も表示されます。
- <strong>このウインドウに保存</strong>：ウインドウのCookieジャーにあるすべてのもの。個別のボタンで1つ削除でき、<strong>すべて消去</strong>ですべて削除できます。

リクエストで<strong>Cookieを送信・保存</strong>がオフになっていると、タブにそう表示されます。[Cookie](/docs/requests/settings#cookies)を参照してください。

## 生データ、16進数、通信 [#raw-hex-and-wire]

- <strong>生データ</strong>は、レスポンスを1つのメッセージとして表示します：ステータス行、ヘッダー、空行、デコード済みのボディ（最初の64 MB。<strong>ボディ</strong>タブにはすべてがあります）。
- <strong>16進数</strong>は、ボディのバイトを表示します：オフセット、2つのグループに分けた1行16バイト、そのASCII。マウスか、矢印キーと<kbd>⇧</kbd>でバイトを選択できます。
  コピーすると16進数のペアになり、ASCII列で選択した場合はテキストになります。
- <strong>通信</strong>は、接続上を実際に流れたとおりのバイトを表示します：<strong>送信</strong>または<strong>受信</strong>を選びます。フレーミングされたままのヘッダーと、デコード前の圧縮されたボディが見られます。
  各方向で最大1 MBが保持され、最初の部分だけを表示しているときはタブにそう表示されます。

## 保存と共有 [#save-and-share]

<strong>ボディ</strong>タブの右上にある保存ボタンをクリックします：

- <strong>ボディを保存…</strong>は、ボディ（デコード済み）をファイルに書き出します。
- <strong>デフォルトのアプリで開く</strong>は、その種類にMacが使うアプリで開きます。
- <strong>エンコードされたボディを保存…</strong>は、ボディを届いたままの圧縮された状態で書き出します。圧縮されたレスポンスのみ。
- <strong>やり取りをHARとして書き出す…</strong>は、リクエストとレスポンスをHARファイルとして書き出します。

レスポンスではなくリクエストを共有するには、<strong>リクエスト › cURLとしてコピー</strong>（<kbd>⌥</kbd><kbd>⌘</kbd><kbd>C</kbd>）か、<strong>リクエスト › コードを生成…</strong>（<kbd>⌥</kbd><kbd>⌘</kbd><kbd>G</kbd>）を使います。
[HTTPリクエスト](/docs/requests#send-and-cancel)を参照してください。

## 以前のレスポンスと比較 [#earlier-responses-and-comparing]

送信はすべて履歴に保存されます。URLバーの下の行の末尾にある、件数付きの時計ボタンを押すと、このリクエストのレスポンスが開きます。
それぞれ、ステータス、時間、送信者（あなた、実行、エージェント）、所要時間、サイズが表示されます。

<Shot id="requests-http-response-history" alt="List productsのレスポンス履歴のポップオーバー。以前のレスポンスが、ステータス、時間、送信元、所要時間、サイズ付きで並んでいる" />

- レスポンスをクリックすると表示されます。レスポンスペインの上のバーに<strong>過去のレスポンス</strong>と表示され、<strong>最新を表示</strong>で戻ります。
- 2つのレスポンスを比較するには、一方を表示し、リスト内のもう一方にポインタを合わせて比較ボタンをクリックするか、<strong>過去のレスポンス</strong>バーの<strong>最新と比較</strong>をクリックします。
  比較では、追加された部分と削除された部分が表示されます。
- リストのメニューの<strong>このリクエストの履歴を消去…</strong>は、このリクエストの履歴を削除します。

ワークスペース全体の履歴については、[履歴](/docs/workspaces/history)を参照してください。

## リクエストが失敗したとき [#when-a-request-fails]

レスポンスが得られなかった場合、ペインに<strong>リクエストがタイムアウトしました</strong>などのエラーと、<strong>再試行</strong>が表示されます。ほかに2つのボタンが表示されることがあります：

- <strong>スクリプトを確認…</strong>：リクエストのスクリプトがEcholotの外から来たもので、実行前に信頼する必要があるとき。[スクリプトとテスト](/docs/requests/scripts-and-tests)を参照してください。
- <strong>アクセスを許可…</strong>：App Storeエディションで、リクエストが、アプリがまだ読み取れないファイルを指しているとき。
