PassFront
  1. PassFront
  2. База знаний
  3. DOM и браузер

Разбери, можно ли отправить запрос GET с body: при каких условиях и какие ограничения.

DOM и браузер

Формально спецификация не запрещает тело у GET-запроса, но на практике его отправлять нельзя: сервера, прокси и `fetch`/`XMLHttpRequest` его игнорируют или запрещают.

Что говорит стандарт

По спецификации HTTP тело у GET не запрещено явно, но и не имеет определённой семантики: сервер не обязан его учитывать. Раздел уточняет, что тело в GET «не имеет смысла» и может привести к отклонению запроса.

Практические ограничения

  • `fetch` в браузере — запрещает body у GET: fetch(url, { method: 'GET', body }) кинет ошибку.
  • `XMLHttpRequest` — тело у GET игнорируется.
  • Прокси, кеши, серверы — могут отбросить тело, не переслать его или закешировать без учёта тела.
  • Идемпотентность и кеширование — GET предполагается безопасным и кешируемым по URL, а не по телу.

Как правильно передавать данные в GET

Через query-параметры в URL:

GET /search?q=react&page=2

Если данные не помещаются в URL

  • Использовать POST (или иногда POST/SEARCH с телом).
  • Некоторые API (например, Elasticsearch) исторически принимают тело в GET, но полагаться на это в вебе нельзя.

Коротко для собеседования

Технически тело у GET спецификацией не запрещено, но лишено семантики; браузерный fetch его вообще не разрешает, а прокси/кеши/серверы игнорируют. Данные для GET передают в query-параметрах URL; если их много — использовать POST.

Другие вопросы раздела