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

Ответ

Параметры в 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

Ответ 18+ 🔞

Давай разберём эту хуйню про GET-параметры, а то некоторые думают, что это какая-то магия, а на деле — проще пареной репы, если не проще.

Смотри, когда ты стучишься на сервер через GET, все твои «хотелки» лепятся прямо в адресную строку, сразу после знака вопроса ?. Это и есть строка запроса, она же query string. Формат — проще некуда: ключ=значение. Если ключей больше одного — ставишь амперсанд & и добавляешь следующий. Всё, пиздец, никакой тайны.

Вот как это выглядит в жизни:

https://api.kakoy-to-site.com/tovar?category=elektronika&sort=price_asc&limit=20

Перевожу: «Эй, сервер, дай мне товары из категории «электроника», отсортированные по цене по возрастанию, и только 20 штук, не больше». Сервер, если не мудак, ответит.

А теперь главные правила, чтобы не обосраться:

  1. Кодирование — твой друг, ёпта. Нельзя тупо пихать в URL что попало. Пробелы, амперсанды, русские буквы — всё это надо кодировать. Иначе запрос сломается, как хрустальная ваза в руках слона. В JavaScript для этого encodeURIComponent().

    // Делаем правильно, а не как попало
    const url = `https://api.com/search?q=${encodeURIComponent('запрос & имя')}`;
    // Получится: https://api.com/search?q=%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%20%26%20%D0%B8%D0%BC%D1%8F
  2. Длина имеет значение, блядь. URL не резиновый. Где-то 2048 символов потянет, где-то 4096, но в целом — не разгоняйся. Если тебе надо отправить овердохуища данных (типа целого романа «Война и мир») — используй POST, а не извращайся с GET.

  3. Безопасность, ёбушки-воробушки. Всё, что ты впихнул в строку запроса, видно всем: в истории браузера, в логах прокси, в реферере. НИКОГДА, слышишь, НИКОГДА не суй туда пароли, секретные токены или номер своей кредитки. Это как кричать в толпу «У меня в кармане тысяча долларов!».

  4. GET — для получения, а не для изменений. Эти запросы должны быть идемпотентными (повторил пять раз — получил тот же результат) и их можно кешировать. Не используй GET для удаления или оплаты заказа, а то потом будешь удивляться, почему с карты списались пять раз.

Ну и пример на Python, чтобы вообще всё стало ясно:

import requests

# Собираем наши хотелки в словарик
params = {
    'search': 'Python tutorial',
    'page': 2,
    'sort': 'date',
    'max_results': 50
}

# Библиотека requests сама, блядь, всё закодирует и прилепит к URL
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

Вот и вся наука. Главное — думай головой, что и куда ты передаёшь, и не делай глупостей.