Какова длина 255-байтовой строки в контексте HTTP-запросов? - PullRequest
2 голосов
/ 22 марта 2012

У меня проблема с длинными URL-адресами в контексте потоковой передачи видео через cdn amazon cloudfront и подписанные URL-адреса на медиа-боксе.

RFC 2068 - протокол передачи гипертекста - HTTP / 1.1 состояния:

 Note: Servers should be cautious about depending on URI lengths
 above 255 bytes, because some older client or proxy implementations
 may not properly support these lengths.

Кажется, это именно то ограничение, с которым я сталкиваюсь. Поскольку URL-адреса длиной 255 символов работают, 256 символов - нет.

Однако я немного запутался, потому что думал, что в ASCII символ кодируется 7-битным.

Я также знаю, что действительные символы в URL полностью покрыты алфавитом ascii.

Я знаю, что обычной практикой является расширение до 8-битного алфавита для поддержки большего количества символов или использование одного бита, пропущенного на один байт, для обнаружения / исправления ошибок.

Мой вопрос сейчас:

В контексте запросов http. Что именно имеется в виду, говоря о длине 255 байтов. Сколько символов и как воспроизводится это число?

Ответы [ 3 ]

2 голосов
/ 22 марта 2012

255 байт будет 255 символов здесь. Это примечание является практическим правилом. Если вы не используете прокси-сервер, большинство URI будут разделены в заголовке запроса (хост обычно находится в заголовке Host, а не в строке запроса).

Я думаю, что этот предел в 255 байт, как правило, устарел с текущим программным обеспечением, хотя ограничения все еще существуют. Internet Explorer имеет ограничение в 2083 символа для URL . Я думаю, что Firefox может справиться с большей, но это вряд ли уместно, если вы хотите, чтобы ваш сайт все равно работал с IE.

Подписи в URL сложно. Существуют обходные пути, при которых подпись сводится к минимуму: нет сертификата, нет имени подписавшего. В этом случае получатель должен знать, откуда взялась подпись и каким открытым ключом ее проверить. Это более или менее связано с привязкой SAML HTTP Redirect (около строки 594) . Если вы не можете использовать такие уловки, вам, возможно, придется использовать POST.

1 голос
/ 22 марта 2012

В HTTP (протокол) нет ограничения в 255 символов. Тем не менее, в некоторых программных компонентах может быть ограничение.

Также обратите внимание, что RFC 2068 действительно древний, последние и самые лучшие в этом отношении можно найти здесь: http://greenbytes.de/tech/webdav/draft-ietf-httpbis-p1-messaging-19.html#rfc.section.3.1.1.p.10:

"На практике обнаруживаются различные специальные ограничения на длину строки запроса. РЕКОМЕНДУЕТСЯ, чтобы все отправители и получатели HTTP поддерживали, как минимум, длину строки запроса до 8000 октетов."

1 голос
/ 22 марта 2012

Только для Ascii использует первые 7 бит каждого байта, но каждый символ по-прежнему занимает один байт.

...