Анализ кода состояния HTTP

Я использую PHP для анализа числовой части ответа кода состояния HTTP. Учитывая стандартный ответ "HTTP/1.1 200 OK", я бы использовал:

$data = explode(' ', "HTTP/1.1 200 OK");
$code = $data[1];

Я не эксперт по HTTP. Был бы я когда-либо сталкиваться с ответом, когда код не находится в позиции $data [1], как в приведенном выше примере? Я просто хочу быть уверенным, что этот способ разграничения кода ответа всегда будет работать для любого ответа.

Спасибо, Брайан

Ответ 1

Если вы сомневаетесь, проверьте спецификацию. Спецификация в этом случае для HTTP/1.1, RFC2616. В разделе раздел 6.1 он описывает строку состояния, первый компонент ответа, как:

Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF

То есть - одно пространство ASCII (SP) должно отделить HTTP-версию и код состояния - и если вы проверите определение HTTP-версии (в раздел 3.1), он не может содержать пробел, а также код состояния.

Итак, вы можете пойти с этим кодом.

Ответ 2

Нет, вы никогда не столкнетесь с ответом (если это правильный HTTP-ответ), который имеет другой формат. См. HTTP RFC (2616).

Ответ 3

Нет, если веб-сервер уважает стандарты, выполняющие взрыв, и кеширование второго элемента массива прекрасное.

если вы действительно хотите убедиться, что используете регулярное выражение

то есть.

preg_match('|HTTP/\d\.\d\s+(\d+)\s+.*|',$subject,$match);
var_dump($match[1]);

Приветствия

Ответ 4

Нет, что вы делаете, ОК, если все, что вам нужно, это числовое. Если вы также хотите получить сообщение, вы также разделите его, т.е.

HTTP/1.1 404 Not Found