# Настройки запроса (/ru/docs/requests/settings)

Вкладка **Настройки** определяет, как запрос путешествует: какую версию HTTP использовать, следовать ли
перенаправлениям, хранить ли cookie, проверять ли сертификаты и сколько он может длиться. Прокси и сертификаты задаются
для всего рабочего пространства или приложения — ниже на этой странице.

<Shot id="requests-http-settings" alt="Вкладка «Настройки» запроса: «Отправка как есть», версия HTTP «Автоматически» с пояснением, «Проверять TLS-сертификаты», «Следовать перенаправлениям» с «Максимум перенаправлений» 10, cookie, «Распаковывать ответы» и «Тайм-аут» 60 с" />

## Вкладка «Настройки» [#the-settings-tab]

| Параметр | По умолчанию | Что делает |
| --- | --- | --- |
| **Отправка как есть** | Выкл. | Отправляет ровно те заголовки, что на вкладке **Заголовки**, ничего не добавляя. |
| **Версия HTTP** | **Автоматически** | **Автоматически**, **HTTP/1.1**, **HTTP/2** или **HTTP/3**. |
| **Проверять TLS-сертификаты** | Вкл. | Проверяет сертификат сервера для адресов `https://`. |
| **Следовать перенаправлениям** | Вкл. | Следует ответам 3xx, не более **Максимум перенаправлений**. |
| **Максимум перенаправлений** | 10 | От 1 до 50. |
| **Отправлять и сохранять cookie** | Вкл. | Отправляет cookie, которые хранилище окна держит для этого адреса, и сохраняет те, что устанавливает ответ. |
| **Распаковывать ответы** | Вкл. | Запрашивает сжатые ответы и декодирует их. |
| **Тайм-аут** | 60 с | Время, которое может занять весь обмен: от 1 секунды до часа с шагом 5 секунд. |

В файле запроса сохраняются только те параметры, которые вы изменили. Вкладка показывает точку, если какой-либо параметр
отличается от значения по умолчанию, и называется **Настройки (как есть)**, пока включена отправка как есть.
**Восстановить значения по умолчанию** возвращает все параметры.

В файле запроса настройки выглядят так:

```toml
[settings]
http-version = "http2"
follow-redirects = false
timeout = 10.0
```

## Версия HTTP [#http-version]

| Выбор | Что отправляет Echolot |
| --- | --- |
| **Автоматически** | HTTP/2, если его предлагает сервер, иначе HTTP/1.1. Когда сервер предложил HTTP/3 (заголовком `Alt-Svc`), последующие запросы к нему используют HTTP/3 и возвращаются к TCP, если подключиться не удалось. |
| **HTTP/1.1** | Только HTTP/1.1. |
| **HTTP/2** | Только HTTP/2: поверх TLS или по обычному `http://` с предварительным знанием (h2c). |
| **HTTP/3** | Только HTTP/3 поверх QUIC. |

У HTTP/3 есть ограничения:

- Нужна **macOS 27 или новее**. На более старом Mac вкладка сообщает об этом, а запрос с **HTTP/3** отправить нельзя;
  **Автоматически** остаётся на HTTP/2 и HTTP/1.1.
- Только адреса `https://`.
- Без прокси (включая системный), без пользовательских файлов CA и без клиентских сертификатов. Запрос с **HTTP/3**,
  которому нужно что-то из этого, отклоняется с указанием причины. При **Автоматически** такие запросы остаются на TCP.
- Отправку как есть с HTTP/3 использовать нельзя.

При **Автоматически**, когда ответ предлагает HTTP/3, его карточка с подробностями показывает **Предложен HTTP/3**. Если
подключение QUIC для следующего запроса не удалось, Echolot отправляет его по TCP, забывает предложение, а карточка
объясняет почему. Дважды ничего не отправляется.

Ещё два случая переключают версии сами:

- [NTLM](/docs/requests/auth#ntlm) требует HTTP/1.1. При **Автоматически** запросы NTLM идут по HTTP/1.1; при **HTTP/2**
  или **HTTP/3** они отклоняются.
- Когда сервер сбрасывает запрос HTTP/2 с `HTTP_1_1_REQUIRED`, Echolot с этого момента говорит с этим сервером по
  HTTP/1.1. Запрос, который безопасно повторить, сразу отправляется снова по HTTP/1.1; любой другой запрос останавливается
  с ошибкой об этом и при повторной отправке уходит по HTTP/1.1.

Карточка с подробностями ответа показывает использованную версию рядом с версией TLS.

## Перенаправления [#redirects]

При включённом **Следовать перенаправлениям** Echolot следует ответам `301`, `302`, `303`, `307` и `308` на адреса
`http://` и `https://`:

- `303` превращается в `GET` (а `HEAD` остаётся `HEAD`) без тела.
- `301` и `302` превращают `POST` в `GET`, как браузеры.
- `307` и `308` сохраняют метод и тело.

Каждый переход записывается. Карточка с подробностями показывает **3 перенаправления** (или сколько их); нажмите, чтобы
увидеть статус, метод, адрес и время каждого перехода и конечный адрес. Попробуйте на **Echo › Follow redirects** в
Alpenglow.

Перенаправление на другой источник отбрасывает ваши учётные данные: заголовки `Authorization` и `Cookie`, заголовки
API-ключей, заголовки с секретом, подписи (Digest, AWS, Hawk, EdgeGrid, NTLM) и клиентский сертификат. См.
[Учётные данные остаются со своим источником](/docs/requests/auth#credentials-stay-with-their-origin).

Если **Следовать перенаправлениям** выключено, ответ 3xx и есть ответ.

## Cookie [#cookies]

У каждого окна есть хранилище cookie. При включённом **Отправлять и сохранять cookie** запрос отправляет cookie из
хранилища, подходящие его адресу, а cookie, которые устанавливает ответ, попадают в хранилище. Выключите для запроса,
который не должен ни отправлять, ни сохранять cookie.

Вкладка **Cookie** ответа показывает, что было **Отправлен с запросом**, что **Установлен ответом** и что
**Хранится в этом окне**. Удалите один cookie его кнопкой или все через **Очистить все**. См.
[Ответы](/docs/requests/responses#cookies).

Хранилище следует правилам браузера: ответ не может установить cookie для всего публичного суффикса вроде `.com` или
`.co.uk`. Попробуйте **Echo › Set a cookie** в Alpenglow, а затем любой другой запрос к `demo.echolot.dev`.

## Распаковка ответов [#decompress-responses]

При включённом **Распаковывать ответы** Echolot отправляет `Accept-Encoding: gzip, deflate, br, zstd` (если вы не
задали этот заголовок сами) и декодирует ответы gzip, deflate, Brotli и Zstandard. Вкладка **Тело** показывает
декодированное тело; байты в том виде, как они пришли, остаются на вкладке **Передача**, а меню сохранения тела
предлагает **Сохранить закодированное тело…**. Карточка с подробностями сообщает, например, `br, 12 KB → 48 KB`.

Выключите, чтобы увидеть ответ точно так, как его сжал сервер, или чтобы не отправлять заголовок `Accept-Encoding`.

## Проверка сертификатов TLS [#verify-tls-certificates]

Оставьте включённой, если только вы не тестируете сервер, сертификату которого ваш Mac не доверяет и вы не можете
добавить его CA. При выключенной проверке карточка с подробностями показывает оранжевый открытый замок, а её всплывающая
панель сообщает **Проверка сертификата выключена**.

Лучше для частного CA доверять ему для этого хоста: см. [Сертификаты](#certificates).

## Тайм-аут [#timeout]

Тайм-аут — это общее время, которое может занять обмен, от подключения до последнего байта. Когда оно заканчивается,
запрос останавливается с **Время ожидания запроса истекло**, а соединение закрывается.

## Отправка как есть [#raw-mode]

Отправка как есть нужна, чтобы отправить запрос байт в байт так, как вы его написали, в том числе некорректный, и
проверить, как с ним справится сервер. Echolot не добавляет заголовки, которые обычно добавляет к каждому запросу
(`Host`, `User-Agent`, `Accept`, `Accept-Encoding`, `Cookie`, `Content-Length` и обрамление), и не проверяет, что
запрос составлен правильно. В разделе **АВТОМАТИЧЕСКИЕ** вкладка **Заголовки** сообщает
**Исходный режим: Echolot не добавляет заголовков, отправляются только указанные выше.**

Чтобы запрос отправлял только ваши заголовки, также установите для **Авторизации** значение **Без авторизации** и
напишите собственный `Content-Type`, если телу он нужен. Отправка как есть пишет HTTP/1.1, поэтому с HTTP/3 её
использовать нельзя.

## Повторы [#retries]

Echolot держит соединения открытыми и использует их повторно, что экономит время DNS, подключения и TLS; в этом случае
карточка с подробностями пишет **Повторно использованное соединение**. Иногда сервер закрывает оставленное открытым
соединение как раз в тот момент, когда запрос уходит. Тогда:

- Запрос, который безопасно повторить, отправляется снова по новому соединению: `GET`, `HEAD`, `OPTIONS`, `TRACE`, `PUT`
  или `DELETE` либо любой запрос с заголовком `Idempotency-Key`. Карточка с подробностями сообщает, что он был отправлен
  снова.
- Любой другой запрос (например, `POST` без `Idempotency-Key`) не отправляется снова, потому что сервер мог его
  выполнить. Он останавливается с **Соединение закрылось до получения ответа; сервер мог выполнить запрос**.

В остальных случаях Echolot никогда не повторяет запросы.

## Прокси [#proxies]

По умолчанию запросы идут через прокси, выбранный в **Настройки › Сеть**:

| Прокси | Значение |
| --- | --- |
| **Системные настройки** | Прокси HTTP, HTTPS и SOCKS из **Системные настройки › Сеть** с их исключениями. Автоматическая настройка прокси (PAC) не используется. |
| **Нет** | Каждый запрос подключается напрямую. |
| **Вручную** | Прокси HTTP, HTTPS (TLS до прокси) или SOCKS5, например `http://proxy:3128` или `socks5://host:1080`, с необязательными именем пользователя и паролем (хранятся в Связке ключей) и хостами, к которым нужно обращаться напрямую, в поле **Напрямую к** (`localhost, *.internal`). |

Рабочее пространство может задать собственный прокси, который передаётся вместе с ним коллегам и инструменту командной
строки:

1. Откройте **Настройки рабочего пространства…** в переключателе рабочих пространств внизу боковой панели.
2. Выберите вкладку **Прокси** и выключите **Использовать настройку прокси приложения**.
3. Выберите **Системные настройки**, **Переменные окружения (HTTPS_PROXY…)** (читает `HTTPS_PROXY`, `HTTP_PROXY` и
   `NO_PROXY`), **Нет** или **Вручную**.
4. Для **Вручную** заполните **Прокси** (принимает переменные, например `{{proxy}}`), **Имя пользователя** и **Пароль**, а
   также **Напрямую к**. Пароль запишите как секретную переменную, `{{proxy_password}}`: файлы рабочего пространства
   никогда не хранят секретов. Для пароля, введённого как есть, предлагается **Переместить в Связку ключей**.

HTTP/3 никогда не идёт через прокси. См. [Рабочие пространства](/docs/workspaces).

## Сертификаты [#certificates]

Для хоста, который использует частный центр сертификации или требует клиентский сертификат (mutual TLS), добавьте правило
в рабочем пространстве:

1. Откройте **Настройки рабочего пространства…** и выберите вкладку **Сертификаты**.
2. Нажмите **Добавить хост** и введите хост, например `api.example.com`, или `*.internal` для всех поддоменов.
3. Рядом с **Доверять CA** нажмите **Выбрать…** и выберите один или несколько файлов PEM. Им доверяют в дополнение к
   системным.
4. Для клиентского сертификата выберите файл рядом с **Клиентский сертификат**: файл PEM или `.p12` (`.pfx`). Для
   сертификата PEM, в файле которого нет ключа, выберите также файл **Закрытый ключ**.
5. Если у ключа или `.p12` есть парольная фраза, запишите её как секретную переменную в **Парольная фраза**, например
   `{{p12_passphrase}}`.

Учитывается первое правило, подходящее хосту. Файлы внутри рабочего пространства сохраняются как пути относительно него,
так что правило работает для всех, у кого есть рабочее пространство. Сертификаты каждого правила используются только для
его хоста: перенаправление на другой хост никогда не предъявит клиентский сертификат первого.

<Edition only="appstore">
  Версия из App Store может читать только файлы, которые вы выбрали. Файлы CA, клиентские сертификаты и ключи, которые вы
  выбираете здесь, остаются доступными для последующих отправок. Правило, созданное коллегой и указывающее на файлы вне
  рабочего пространства, требует, чтобы вы один раз дали приложению эти файлы: отправка останавливается, а область
  ответа предлагает **Разрешить доступ…**.
</Edition>

## Настройки на уровне приложения [#app-wide-settings]

Прокси — единственная настройка запроса со значением по умолчанию на уровне приложения (**Настройки › Сеть**). Все
остальные настройки для каждого запроса начинаются со значений по умолчанию из таблицы выше, а файл запроса хранит то,
что вы изменили. Чтобы изменить настройки сразу для многих запросов, выберите их в боковой панели и используйте
**Изменить N запросов…** для их заголовков, параметров и авторизации либо отредактируйте файлы.
