Разбери, можно ли отправить запрос 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.