Заголовок PHP ('Location:'. $ Url) http1.0 против http1.1 против? - PullRequest
2 голосов
/ 16 апреля 2011

Я делаю некоторые перенаправления с использованием PHP, например:

header('Location: '.$url);

Но теперь мне нужно сделать некоторые перенаправления с некоторыми другими кодами состояния.

Должен ли я http1.0 или http1.1 для этого.Или мы уже на http2.0 или выше?

И одинаковый ли код состояния для обоих?

Итак, допустим, я хочу перенаправить, используя код статуса 404 (не найден).

Могу ли я просто сделать:

header('HTTP/1.1 404 Not Found');
header('Location: '.$url);

Или есть:

header('HTTP/2.0 404 Not Found');
header('Location: '.$url);

Ответы [ 5 ]

5 голосов
/ 16 апреля 2011

Вообще говоря, браузеры используют HTTP 1.1 (HTTP 1.0 довольно старый и не поддерживает несколько интересных функций, которые в настоящее время в значительной степени требуются)

HTTP 2.0?Там нет такой вещи; -)


Не стесняйтесь взглянуть на Протокол передачи гипертекста - и прохождение RFC 2616 - ГипертекстПротокол передачи - HTTP / 1.1 может быть хорошей идеей.

Да, это может занять некоторое время, чтобы прочитать это - но если вы каждый день работаете с HTTP, зная немногопро это может быть хорошая идея; -)

3 голосов
/ 16 апреля 2011

Нет HTTP / 2.0; HTTP / 1.1 - последняя версия.

Вы можете использовать значение $_SERVER['SERVER_PROTOCOL'], чтобы ответить с той же версией протокола:

header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');

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

Кстати: Местоположение Поле заголовка определено только для кодов состояния 201 и 3xx:

Для 201 (Создано) ответов, Местоположение - это то, что нового ресурса, который был создан запросом. Для ответов 3xx местоположение ДОЛЖНО указывать предпочитаемый URI сервера для автоматического перенаправления на ресурс.

2 голосов
/ 16 апреля 2011

Используйте HTTP/1.1. Следующая версия HTTP, в настоящее время известная как HTTPbis , будет просто обновлением и будет называться HTTP / 1.1.

Заголовок Location: работает независимо от версии протокола. Обратите внимание, что не все Status: числа позволяют им. Только диапазоны 200-400 должны использовать его. Для 500 ошибок это, безусловно, будет проигнорировано.

2 голосов
/ 16 апреля 2011

Вам решать, если вы отправите HTTP/1.0 или HTTP/1.1, потому что для ваших целей ничего не изменилось.

2 голосов
/ 16 апреля 2011

См. третий параметр для header() для отправки определенного кода состояния:

http_response_code

Принудительно вводит код ответа HTTP в указанное значение. Обратите внимание, что этот параметр действует только в том случае, если строка не пуста.

...