Ответ
URL имеет несколько ключевых ограничений, связанных с длиной, допустимыми символами и структурой.
1. Ограничение длины
| Максимальная длина не определена в стандарте, но ограничена реализациями: | Компонент | Типичное ограничение |
|---|---|---|
| Браузеры (Chrome, Firefox, Safari) | ~32 000 символов (практический лимит ~2000 для надежности) | |
| Серверы (Apache, Nginx) | Задается в конфигурации, обычно 8 192 – 16 384 символов. | |
| Internet Explorer (устаревший) | 2 083 символа. |
2. Допустимые символы
В URL можно использовать только ограниченный набор символов из ASCII. Остальные должны быть закодированы (URL-encoded, или percent-encoding):
- Зарезервированные символы:
! * ' ( ) ; : @ & = + $ , / ? % # [ ]– имеют специальное значение. - Недопустимые символы: пробел,
<,>,",{,},|,,^,`. Пробел кодируется как%20или+.
3. Структурные ограничения
- Схема (protocol):
http:,https:,ftp:,mailto:и др. - Хост (hostname): Длина доменного имени ограничена 253 символами (включая точки).
- Порт (port): Число от 1 до 65535.
Пример кодирования URL в Python:
from urllib.parse import quote, urlencode
# Кодирование части URL (например, значения параметра)
query = "тест & проверка"
encoded_query = quote(query, safe='') # safe='' указывает, что кодировать всё
print(encoded_query) # %D1%82%D0%B5%D1%81%D1%82%20%26%20%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0
# Создание полного URL с параметрами
base_url = "https://api.example.com/search"
params = {"q": "тест запрос", "page": 1}
full_url = f"{base_url}?{urlencode(params, encoding='utf-8')}"
print(full_url) # https://api.example.com/search?q=%D1%82%D0%B5%D1%81%D1%82+%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81&page=1
Почему это важно: Превышение лимитов или использование недопустимых символов приводит к ошибкам 414 URI Too Long или 400 Bad Request. Для передачи больших объемов данных следует использовать тело запроса (например, POST).
Ответ 18+ 🔞
А, вот эта тема про URL, да? Ну, слушай, тут такая хуйня, блядь. Это как бы адресок в интернете, но он, сука, с характером. Ограничения у него, как у злой тёщи — и длину не переборщи, и слова подбирай аккуратно, а то получишь по ебалу ошибкой 400.
Первое — длина, блядь.
В теории-то ограничения нет, но на практике — везде свои приколы. Представь, ты пишешь письмо, а конверт — хуй с горы, маленький.
Вот браузеры (Хром, Фаерфокс) вроде и выдержат тысяч 32 символов, но лучше не ебать мозги и укладываться в пару тысяч, а то сломается всё.
А старый добрый Internet Explorer, тот вообще мудак шерстяной — больше 2083 символов не проглотит, и всё, пиздец, нахуй.
Сервера (Apache, Nginx) тоже не сахар — обычно им больше 8-16 тысяч символов в рот не впихнёшь, конфигом надо ковыряться.
Второе — какие буквы можно.
Тут вообще ёперный театр. Можно только английские буковки, циферки и пару символов. Всё остальное — подлежит кодированию, блядь.
Пробел? А хуй там! Либо %20, либо плюсик ставь.
Скобки, решётки, собачки (@) — всё это зарезервированные символы, у них своя роль.
А если ты туда русские буквы или, не дай бог, смайлик сунешь — получишь абракадабру вида %D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82. Это и есть percent-encoding, ёпта.
Третье — структура.
Тут как паспорт: должен быть протокол (https:), хост (доменное имя, не длиннее 253 символов, включая точки, блядь), и порт (от 1 до 65535, как номера квартир).
Вот, смотри, как на Python эту хуйню кодировать, чтобы сервер не взбесился:
from urllib.parse import quote, urlencode
# Допустим, у нас запрос "тест & проверка". Без кодирования это пиздец, символ & сломает всё.
query = "тест & проверка"
encoded_query = quote(query, safe='') # safe='' — значит, кодируем всё, даже то, что можно было бы оставить
print(encoded_query) # Выведет: %D1%82%D0%B5%D1%81%D1%82%20%26%20%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0
# А теперь соберём целый URL с параметрами, как нормальные люди
base_url = "https://api.example.com/search"
params = {"q": "тест запрос", "page": 1}
full_url = f"{base_url}?{urlencode(params, encoding='utf-8')}"
print(full_url) # https://api.example.com/search?q=%D1%82%D0%B5%D1%81%D1%82+%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81&page=1
А теперь главное, нахуй: если ты попробуешь впихнуть невпихуемое (слишком длинный URL или кривые символы), сервер тебе вежливо так ответит: «414 URI Too Long» или «400 Bad Request». По-русски это значит: «Иди нахуй, распиздяй, переделывай».
Для передачи овердохуища данных используй тело запроса, например, POST. Не надо выёбываться с гигантскими URL, это моветон, блядь.