Максимальный размер строки состояния ответа HTTP - PullRequest
4 голосов
/ 01 марта 2012

Быстрый вопрос - есть ли максимальный размер строки состояния ответа HTTP?

В RFC я не смог найти эту информацию, просто что-то вроде этого:

Status-Line = HTTP-версия SP. Статус-код SP. Причина-фраза CRLF

В соответствии с этим я могу предположить:

  • HTTP-версия обычно составляет 8 байт (например, HTTP/1.1)
  • Код состояния - 3 байта
  • 2 пробела + CRLF - 4 байта
  • Фраза-аргумент -> Самый длинный в соответствии с RFC: Requested range not satisfiable так 31 байт

Это будет сумма 46 байт.

Это предположение правильно или я что-то пропустил?

ОБНОВЛЕНИЕ:

В связи с ответом ниже, я просто хочу указать мою проблему aбит:

Я анализирую какой-то файл журнала с сообщениями TCP с сервера.Теперь есть некоторые случайные данные, которые мне не нужны, и некоторые HTTP-сообщения, которые я хочу прочитать.Теперь все данные, которые я получаю, я анализирую для \r\n, чтобы найти строку состояния.Поскольку мне нужно сделать предположение, что мой заголовок разбит на несколько пакетов TCP, я просто буферизирую все данные и анализирую их.

Если для строки состояния заголовка нет максимального размера, мне нужно буферизовать все данные до следующего \r\n.В худшем случае это означает, что я сохраняю как килобайты, а не килобайты случайных данных, поскольку может (но, скорее всего, не будет) быть частью строки состояния заголовка.

Или это будетв этом случае будет уместно анализировать строку версии HTTP вместо CRLF?

Ответы [ 2 ]

4 голосов
/ 01 марта 2012

RFC 2616, 6.1.1:

Приведенные здесь фразы являются лишь рекомендациями - они МОГУТ быть заменены локальными эквивалентами без влияния на протокол.

Помимо этого, протоколу HTTP «разрешено» добавлять больше кодов состояния (в новом RFC) без изменения версии HTTP на 1.2 при условии, что новые коды не вводят дополнительных требований к клиентам HTTP. Предполагается, что клиенты обрабатывают неизвестный код состояния, как если бы он был x00 (где x - первая цифра кода, который они получают, указывая категорию ответа), за исключением того, что они не должны кэшировать ответ.

Таким образом, единственным ограничением является максимальная длина строки заголовка HTTP или всего заголовков ответа. Насколько я вижу, RFC не определяет никаких ограничений, хотя определенные серверы налагают свои собственные.

В чем вы можете быть уверены, так это в том, что пользовательский агент может полностью игнорировать фразу причины. Поэтому, если он большой, вы можете читать его небольшими частями и выбрасывать по одному, пока не достигнете CRLF. Если вы хотите отобразить удобочитаемое сообщение, в основном вы можете использовать рекомендованную фразу причины для кода состояния, предоставляемого сервером, независимо от того, какую фразу причины отправляет сервер.

0 голосов
/ 24 мая 2016

Я не думаю, что есть ограничение на длину ReasonPHrase.Документ W3C утверждает, что это «короткое сообщение», но оно не каноническое.

Я бы не стал считать, что Версия состоит из 8 символов.Возможно, в будущем версия будет иметь 3 цифры, а именно: HTTP / 10.1.Синтаксис указывает, что Версия ограничена ПРОБЕЛОМ, поэтому я бы проанализировал ее, остановившись на первом ПРОБЕЛЕ.Статус-Код.Код состояния предназначен для использования автоматами, а фраза разума предназначена для пользователя.От клиента не требуется проверять или отображать фразу-аргумент.

...