#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 не будет работать в сочетании с перенаправлением. Вы можете использовать только либо.