Как правильно передавать параметры в HTTP GET-запросе?

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

Ответ

Параметры в GET-запросе передаются в строке запроса (query string) URL после знака ? в формате ключ=значение. Несколько параметров разделяются амперсандом &.

Синтаксис:

https://api.example.com/resource?param1=value1&param2=value2&param3=value3

Ключевые правила и best practices:

  1. URL Encoding: Специальные и не-ASCII символы должны быть закодированы (например, пробел → %20 или +).

    // JavaScript пример
    const url = `https://api.com/search?q=${encodeURIComponent('test query & name')}`;
    // Результат: https://api.com/search?q=test%20query%20%26%20name
  2. Ограничения: Длина URL ограничена (~2048-4096 символов в зависимости от браузера/сервера). Для больших объёмов данных используйте POST.

  3. Безопасность: Параметры видны в логах, истории браузера, referrer. Никогда не передавайте пароли, токены или чувствительные данные в query string.

  4. Идемпотентность и кеширование: GET-запросы должны быть идемпотентными и могут кешироваться.

Пример формирования запроса на Python (requests):

import requests

params = {
    'search': 'Python tutorial',
    'page': 2,
    'sort': 'date',
    'max_results': 50
}

response = requests.get('https://api.example.com/items', params=params)
# Фактический URL: https://api.example.com/items?search=Python+tutorial&page=2&sort=date&max_results=50