← Назад к вопросам
Что такое query string в составе URL-запроса?
2.0 Middle🔥 201 комментариев
#Тестирование
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое query string в составе URL-запроса?
Query string (строка запроса) — это часть URL, которая следует после символа ? и содержит параметры, передаваемые на сервер. Это один из основных способов передачи данных в HTTP GET запросах. Query string состоит из пар ключ-значение, разделённых символом &.
Структура query string
https://example.com/search?category=electronics&price=100&sort=ascending
^ ^ ^ ^ ^ ^
| | | | | |
начало query ключ1 значение1 ключ2 значение2
Базовый синтаксис
?key1=value1&key2=value2&key3=value3
?— разделитель между путём и параметрамиkey=value— пара параметра (ключ и значение)&— разделитель между параметрами- Символы кодируются по URL encoding (пробел = %20)
Примеры query string
Поиск на сайте
https://www.google.com/search?q=python+programming&hl=en
Фильтрация и сортировка
https://shop.example.com/products?category=clothes&size=M&color=red&sort=price_asc
Пагинация
https://api.example.com/users?page=2&limit=10&offset=20
Несколько значений для одного параметра
https://example.com/filter?color=red&color=blue&color=green
Работа с query string в Python
С использованием urllib.parse
from urllib.parse import urlencode, parse_qs, urlparse
# Создание query string
params = {'name': 'John', 'age': 30, 'city': 'New York'}
query_string = urlencode(params)
print(query_string)
# name=John&age=30&city=New+York
# Полный URL
base_url = 'https://example.com/api/users'
full_url = f'{base_url}?{query_string}'
print(full_url)
# https://example.com/api/users?name=John&age=30&city=New+York
Парсинг query string
from urllib.parse import parse_qs, urlparse
url = 'https://example.com/search?q=python&lang=en&limit=10'
# Парсим URL
parsed = urlparse(url)
query_string = parsed.query
print(query_string)
# q=python&lang=en&limit=10
# Парсим параметры
params = parse_qs(query_string)
print(params)
# {'q': ['python'], 'lang': ['en'], 'limit': ['10']}
# Получаем отдельные значения
print(params['q'][0]) # 'python'
print(params['limit'][0]) # '10'
Работа с query string в FastAPI
from fastapi import FastAPI, Query
app = FastAPI()
@app.get('/search')
async def search(q: str = Query(...), limit: int = Query(10), offset: int = Query(0)):
"""
GET /search?q=python&limit=20&offset=5
"""
return {
'query': q,
'limit': limit,
'offset': offset
}
@app.get('/filter')
async def filter_items(
category: str = Query(..., description='Category name'),
tags: list[str] = Query(None, description='Filter by tags')
):
"""
GET /filter?category=electronics&tags=smartphone&tags=cheap
"""
return {'category': category, 'tags': tags}
URL кодирование (percent encoding)
Это обязательно при передаче специальных символов в query string:
from urllib.parse import quote, unquote
# Кодирование
text = 'Hello World!'
encoded = quote(text)
print(encoded) # Hello%20World%21
# Декодирование
decoded = unquote(encoded)
print(decoded) # Hello World!
# Таблица кодирования
# Пространство = %20
# ! = %21
# # = %23
# & = %26 (важно: разделитель параметров)
# = = %3D (важно: разделитель ключа и значения)
# ? = %3F
Преимущества query string
- Видимость — параметры видны в адресной строке
- Простота — легко создавать и парсить
- Кешируемость — GET запросы с query string кешируются
- Стандартность — поддерживается всеми браузерами и серверами
- Удаление закладок — можно сохранить URL с параметрами
Недостатки query string
- Ограничение размера — максимум 2048 символов (в зависимости от браузера)
- Видимость в истории — параметры видны в истории браузера
- Безопасность — не подходит для передачи чувствительных данных
- Сложность с большими данными — нельзя передать JSON напрямую
Когда использовать query string
- Фильтрация — выбор категорий, фильтров
- Сортировка — выбор порядка сортировки
- Пагинация — номер страницы, размер страницы
- Поиск — поисковые запросы
- Кеширование — параметры для кеша
- Отслеживание — UTM параметры для аналитики
Когда использовать request body вместо query string
- Большие данные — JSON, файлы
- Чувствительные данные — пароли, токены
- POST/PUT/DELETE — операции изменения данных
Пример с JavaScript (fetch API)
// Создание query string
const params = new URLSearchParams({
q: 'javascript',
limit: 10
});
// Отправка GET запроса
fetch(`https://api.example.com/search?${params}`)
.then(response => response.json())
.then(data => console.log(data));
Query string — это фундаментальная часть HTTP протокола, необходимая для передачи параметров в GET запросах и фильтрации данных на веб-сервисах.