# 储存和加密 (/zh/docs/workspaces/storage-and-encryption)

Echolot 把两类数据分开保存。你的工作区是你想放哪里就放哪里的文件夹。Echolot 自己的数据（响应正文、历史记录、崩溃报告）位于你 Mac 上它的储存文件夹中。删除那个文件夹会丢失历史记录，但绝不会丢失任何请求。

## 数据在哪里 [#where-things-are]

| 内容 | 位置 |
| --- | --- |
| 工作区 | 你创建或保存它们的任何位置。 |
| 机密值、OAuth 令牌、加密密钥 | 你的登录钥匙串。 |
| 响应正文和传输捕获 | Echolot 储存文件夹中的 `Payloads`。 |
| 历史记录 | Echolot 储存文件夹中的 `History`：每个工作区一个文件。 |
| 你没有共享的助手对话 | Echolot 储存文件夹中的 `Assistant`。 |
| 崩溃报告（如果你允许） | Echolot 储存文件夹中的 `Crash Reports`。 |
| 你自己的代码模板 | Echolot 储存文件夹中的 `Code Templates`。见[导出](/docs/workspaces/exporting#copy-a-request-as-code)。 |
| 示例工作区 | Echolot 储存文件夹中的 `Examples.echolot`。 |
| 设置、全局变量、每个工作区使用中的环境 | Echolot 的偏好设置。 |

Echolot 的储存文件夹是 `~/Library/Application Support/Echolot`。要打开它，请前往**设置 › 关于**，点按**响应和历史记录**旁的**在访达中显示**。

<Edition only="appstore">
  App Store 版把同样的数据保存在它自己的容器中，而不是 `~/Library/Application Support/Echolot`。在两个版本中，**设置 › 关于 › 在访达中显示**都会打开正确的文件夹。两个版本中，工作区都保留在你保存它们的位置，并且都能打开。
</Edition>

## 响应正文 [#response-bodies]

每个响应正文在到达时都会直接写入文件，而不经过内存，因此几 GB 的响应也没有问题。一个正文只存储一次，无论它到达多少次：把同一个请求发送十次、得到相同的应答，只保留一份。

在**设置 › 储存空间 › 响应正文**中设置正文可以占用多少空间：**响应正文最多保留** 1、2、5（默认）、10、20 或 50 GB。超过这个大小后，Echolot 会移除最久未使用的正文。它始终保留：

- 在已打开的标签页中显示的正文，
- 每个已存储请求的最新响应，这样重新启动之后仍能显示，
- 其他请求通过 `$responseJSONPath` 这样的[动态值](/docs/requests/dynamic-values)读取的正文。

限制下方的一行显示已存储的正文在磁盘上占用多少空间。要立即释放这些空间，请点按**移除已存储的正文…** 并确认。Echolot 只保留打开的窗口所需的内容：在已打开的标签页中显示的正文，以及已打开的工作区中每个请求的最新响应。其他所有正文都会被移除，包括未打开的工作区的正文，并且无法恢复。请求及其历史记录保留；旧的响应会在没有正文的情况下显示。

历史记录会保留每次交换发送的请求。大于 256 KB 的请求正文不会保留在历史记录中；传输捕获仍包含它的开头部分。

## 历史记录 [#history]

**设置 › 储存空间 › 历史记录**设置[历史记录](/docs/workspaces/history)为每个请求保留多少个响应：10、25、50（默认）、100 或 200。较旧的条目先被移除。每次发送都会连同发送者一起保留：你、一次运行或一个智能体。要清除工作区的历史记录，请使用其[“历史记录”页面](/docs/workspaces/history)的 ⋯ 菜单中的**清除历史记录…**；请求自己的历史记录则从它的历史记录列表中的同一个菜单清除。

<Shot id="workspaces-settings-storage" alt="“设置”的“储存空间”窗格：在磁盘上加密响应正文、响应正文最多保留 5 GB，以及每个请求的历史记录为 50 个响应" />

## 在磁盘上加密响应正文 [#encrypt-response-bodies-on-disk]

响应中可能包含个人数据、令牌，以及 API 返回的任何其他内容。开启加密后，没有钥匙串中的密钥，就无法读取 Echolot 储存文件夹中的任何响应内容。

1. 打开**设置 › 储存空间**。
2. 打开**在磁盘上加密响应正文**。

Echolot 会在第一次时生成一个密钥，并以 **Echolot response storage key** 的名称保存在你的登录钥匙串中。新的正文会立即以加密形式写入。已经存储的正文会在后台加密；设置项会显示进度（“正在加密 120/860…”），然后显示状态，例如“全部 860 个已存储的正文都已加密。”

正文用计数器模式的 AES-256 加密，这让 Echolot 可以读取正文的任何一部分而无需解密其余部分：查看器、响应内搜索和大型正文都像以前一样工作。

### 加密的范围 [#what-it-covers]

| 已加密 | 未加密 |
| --- | --- |
| 响应正文 | 工作区文件（它们本来就不含机密值） |
| 传输捕获（发送和接收的原始字节） | 历史记录的文件：名称、地址、标头、状态和耗时 |
| 正文的格式化副本 | Echolot 的偏好设置 |

历史记录的文件没有加密，所以加密开启时，它不保留任何正文文本。此时搜索按名称、地址和标头查找请求，而不按正文内容查找。开启加密会移除历史记录已经建立索引的正文文本。无论加密是否开启，历史记录中的机密值都会被遮盖。

### 关闭加密 [#turning-it-off]

关闭**在磁盘上加密响应正文**。新的正文会再次以明文写入，Echolot 会在后台解密已存储的正文（“正在解密 120/860…”）。密钥仍留在钥匙串中，所以尚未解密的正文仍然可以读取。

加密开启期间记录的响应不会进入历史记录的正文搜索。之后的响应又可以按正文搜索了。

<Callout type="warn">
  请保留钥匙串中的 **Echolot response storage key** 项。Echolot 需要它来读取已加密的正文。
</Callout>

如果无法生成或读取密钥，设置项会说明这一点（“无法将加密密钥保存在钥匙串中……”），正文保持不变。

## 腾出空间 [#free-up-room]

- 在**设置 › 储存空间**中调低**响应正文最多保留**。Echolot 随后不久就会移除最久未使用的正文。
- 在[历史记录](/docs/workspaces/history#clear-history)页面中清除历史记录，可以针对一个请求，也可以针对整个工作区。
- 退出 Echolot，并删除其储存文件夹中的 `Payloads` 或 `History`。你会丢失过去的响应和历史记录；请求、环境和所有工作区文件都保留。
