Передаются ли данные в HTTP GET-запросе?

«Передаются ли данные в HTTP GET-запросе?» — вопрос из категории HTTP и веб-протоколы, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, данные в GET-запросе передаются, но не в теле запроса, а в виде параметров строки запроса (query string), которые добавляются к URL после знака ?.

Синтаксис и пример: https://api.example.com/search?query=test&limit=10&sort=asc В этом URL параметры: query=test, limit=10, sort=asc.

Ключевые ограничения и особенности:

  1. Длина URL: Ограничена браузерами и серверами (обычно ~2048-4096 символов).
  2. Видимость: Параметры видны в адресной строке браузера, истории и логах, поэтому не подходят для передачи паролей, токенов или конфиденциальных данных.
  3. Кэширование: GET-запросы могут кэшироваться браузерами и промежуточными прокси.
  4. Идемпотентность: GET предназначен для получения данных без изменения состояния сервера.

Пример на Python с библиотекой requests:

import requests

params = {"q": "Python", "page": 2}
response = requests.get("https://api.example.com/search", params=params)
# Фактически будет выполнен запрос к:
# https://api.example.com/search?q=Python&page=2
print(response.url)