Заголовок PHP (‘Location: ‘ . $url) http1.0 против http1.1 против?

#php #redirect #http-status-codes

#php #перенаправление #http-status-codes

Вопрос:

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

 header('Location: '.$url);
  

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

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

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

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

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

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

Или есть:

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

Ответ №1:

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

HTTP 2.0 ? Такого понятия не существует 😉

Не стесняйтесь взглянуть на [Протокол передачи гипертекста] [1] — и переход через [**RFC 2616 — Hypertext Transfer Protocol — HTTP / 1.1 **][2] может быть хорошей идеей.

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

Комментарии:

1. HTTP/2.0 для web 2.0 сделана специальная редакция )))

2. @ Pascal MARTIN: о HTTP2.0. хехе к 🙂 # zerkms: 😀

Ответ №2:

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 сервера для автоматического перенаправления на ресурс.

Комментарии:

1. @ Gumbo: Хорошо, спасибо. Но что, если я хотел бы сделать перенаправление и присвоить ему код состояния 403? Смотрите мой комментарий @ ответ Марио. Возможно ли это?

2. @PeeHaa: Перенаправление, вероятно, работает, но я не знаю, как будет интерпретироваться 403.

Ответ №3:

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

http_response_code

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

Ответ №4:

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

Ответ №5:

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

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

Комментарии:

1. ОК. отмечено. Как бы мне выполнить перенаправление, используя, например, код состояния 403 (запрещено)? Я разрешаю какому-либо пользователю удалять публикацию в блоге, используя: http://domain.com/blog/3/delete и когда пользователю не разрешено удалять публикацию, я делаю перенаправление на: http://domain/blog/3 и я бы хотел, чтобы это было перенаправление 403. Возможно ли это?

2. Нет, лучше посмотри, что написал Гамбо. Статус 40x не будет работать в сочетании с перенаправлением. Вы можете использовать только либо.