Синтаксис заголовков HTTP-статуса - PullRequest
6 голосов
/ 18 июня 2009

Существует множество способов написания заголовка HTTP-статуса:

HTTP/1.1 404 Not Found
Status: 404
Status: 404 Not Found

но каков семантически правильный и совместимый со спецификацией способ?

Редактировать: Под заголовками статуса я подразумеваю это , используя такую ​​функцию, как PHP header().

Ответы [ 4 ]

4 голосов
/ 27 февраля 2014

Добавление некоторой информации через некоторое время, так как я столкнулся с этим вопросом, исследуя что-то связанное.

Я полагаю, что поле заголовка Status было изначально изобретено как часть спецификации CGI, RFC 3875:

https://tools.ietf.org/html/rfc3875#section-6.3.3

Цитировать:

The Status header field contains a 3-digit integer result code that
indicates the level of success of the script's attempt to handle the
request.

   Status         = "Status:" status-code SP reason-phrase NL
   status-code    = "200" | "302" | "400" | "501" | extension-code
   extension-code = 3digit
   reason-phrase  = *TEXT

Это позволяет сценарию CGI возвращать код состояния на веб-сервер, который переопределяет значение по умолчанию, отображаемое в строке состояния HTTP. Обычно сервер буферизует результат из сценария и выдает новый заголовок для клиента. Этот заголовок является действительным HTTP-заголовком, который начинается с измененной строки состояния HTTP и не содержит поля заголовка сценария «Status:» (плюс некоторые другие преобразования, предусмотренные RFC).

Таким образом, все ваши примеры действительны из CGI-скрипта , но только первый действительно действителен в заголовке HTTP. Последние два действительны только из сценария CGI (или, возможно, приложения FastCGI).

Сценарий CGI также может работать в режиме «непарсированного заголовка» (NPH), когда он генерирует полный и действительный заголовок HTTP, который веб-сервер передает клиенту дословно. Таким образом, это не должно включать поле заголовка Status: *

Обратите внимание, что меня интересует то, что должен получить статус, если скрипт NPH немного ошибается и выдает поле заголовка Status: Status, возможно, в дополнение к строке состояния HTTP. Я не могу найти какой-либо четкой индикации, и я подозреваю, что это оставлено на усмотрение того, что анализирует вывод, либо клиента, либо сервера.

3 голосов
/ 17 июня 2013

Поскольку http://tools.ietf.org/html/rfc2616#section-6 и более конкретно http://tools.ietf.org/html/rfc2616#section-6.1 не упоминает использование «Status:» при указании кода состояния, а поскольку официальный список заголовков на http://www.iana.org/assignments/message-headers/message-headers.xml не делает упоминая «Статус», я склонен полагать, что его не следует указывать в заголовке.

1 голос
/ 26 июня 2009

Ближайшая вещь, которую я нашел к ответу, - это Быстрая CGI-спецификация , в которой указывается установка кодов состояния через заголовки Status и Location.

0 голосов
/ 18 июня 2009

Многие из них в значительной степени произвольные строки, но здесь есть спецификация w3c для наиболее часто используемых

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

...