Локальная подмена

Правило локальной подмены (Map Local) отвечает на подходящий запрос силами приложения, а не сети: запрос не уходит на сервер, а клиент получает тот статус, заголовки и тело, которые вы написали.

Правила живут в отдельном окне, которое открывается из меню Инструменты (Cmd/Ctrl + Shift + M). Правило можно создать и из перехваченного запроса — тогда оно заполняется ответом, который реально пришёл; обычно это самый быстрый способ.

Сопоставление

Правило сопоставляется с полным URL — схема, хост, путь и query — по шаблону wildcard или регулярному выражению и может ограничиваться конкретными методами.

Wildcard:

Символ Что совпадает
* любые символы, кроме / — один сегмент пути
** любые символы, включая / — любой путь
? один любой символ

Wildcard-шаблон должен совпасть с URL целиком, поэтому */api/users/* закреплён с обоих концов. Регулярное выражение используется как написано и совпадает в любом месте URL, пока вы сами не поставите ^ и $. Шаблон можно проверить на примере URL до сохранения правила.

Порты по умолчанию нормализуются с обеих сторон, поэтому https://example.com/v1 совпадёт с перехваченным https://example.com:443/v1.

Метод CONNECT выбрать нельзя: сохранённое тело не является корректным ответом на запрос туннеля. Если нужно вмешаться в установку туннеля, используйте брейкпоинт.

Ответ

В правиле задаются код статуса (100–599), набор заголовков — повторы разрешены, каждый можно выключить по отдельности — и тело, которое пишется как JSON, текст или HTML либо правится целиком как HTTP/1.x-сообщение.

Ещё в правиле может быть задержка до 60 секунд, которая выдерживается перед отправкой ответа.

Поскольку ответ собирается из правила, а не приходит от сервера, часть заголовков по пути исправляется:

  • Content-Length пересчитывается по сохранённому телу;
  • Content-Encoding, Transfer-Encoding, ETag и Content-MD5 удаляются — они описывают байты, которых не было;
  • hop-by-hop заголовки удаляются;
  • у 1xx, 204 и 304 удаляется и тело.

Когда правило создаётся из перехваченного запроса, в него попадают только те заголовки, которые действительно уйдут клиенту: Content-Encoding и Date не включаются, потому что перехваченное тело хранится уже распакованным.

Поведение

  • Если подходит несколько правил, срабатывает созданное последним.
  • Подменённый запрос всё равно записывается и помечается как отвеченный правилом. Заданная задержка видна, пока запрос её ждёт.
  • Правила применяются раньше брейкпоинтов, поэтому URL, на который есть и правило, и брейкпоинт, будет подменён и не приостановится.
  • Задержка задерживает только свой запрос, на параллельные не влияет. Если клиент не дождался, запрос записывается как неудачный.
  • Список исключений проверяется первым: правило не может ответить на запрос к хосту, который не перехватывается.

Ограничения

  • WebSocket-апгрейды и запросы, импортированные из HAR, использовать для заполнения правила нельзя.
  • Для SSE-запроса правило создать можно, но оно ответит на следующий запрос по этому URL обычным ответом, а не потоком, и тело при этом не заполняется.
  • Тела больше 8 МБ не открываются на редактирование: они сохраняются как есть, их можно записать в файл. Тело с одной строкой длиннее 128 КБ показывается с переносами и только для чтения — сохранённые байты в обоих случаях не меняются.

Правила вместе с телами хранятся в зашифрованной локальной базе.