Какие браузеры поддерживают перенаправления 307/308 и как с ними справляются?
Перенаправления 307 и 308 ( https://tools.ietf.org/html/rfc7538) принимаются большинством современных браузеров.
Однако после большого количества гугл я не могу найти список версий браузера, которые поддерживают перенаправления 307/308. Многие из сообщений, таких как: Как обстоят дела с кодом статуса HTTP 308? просто спросите, поддерживается ли перенаправление 308 или нет.
Мне известно, что некоторые старые браузеры не поддерживают перенаправления 307/308 ( https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/308), но не ясно, какая версия браузера не поддерживает т.
Итак, мой вопрос, какие версии браузера поддерживают перенаправления 307/308?
Кроме того, как старый браузер обрабатывает этот код состояния? Они просто терпят неудачу?
4 ответа
По состоянию на 20 февраля 2018 года даже не все современные / поддерживаемые браузеры поддерживают его из-за отсутствия поддержки IE 11 в Windows 7 и 8.1:
- Ошибка - IE 11 (версия 11.0.9600.18893) в Windows 7. При использовании 308 на сайте браузер просто зависает и ничего не загружает. [Edit] По состоянию на 25 июля 2018 года, это все еще не работает (Версия 11.0.9600.19035) - проверено на тот случай, если вы знаете, MS решила сделать мир devs одолжение.
- Pass - IE 11 (версия 11.786.15063.0) в Windows 10
- Pass - Edge (версия 40.15063.674.0) в Windows 10
- Pass - Chrome (версии 63.0.3239.132 и 63.0.32.132) в Windows 7 и Mac OS 11.6 соответственно
- Pass - Opera (версия 50.0.2762.67) в Mac OS 11.6
- Pass - Firefox (версии 54.0.4 и 47.0.2) в Mac OS 11.6 и Windows 7 соответственно
- Pass - Safari (версия 11.0.3) в Mac OS 11.6
Вы можете проверить, поддерживает ли ваш браузер перенаправления 308 здесь: http://webdbg.com/test/308/
Рекомендуется использовать 301 или 307 в качестве текущего решения, пока IE и / или Windows 7&8.1 не погибнут ужасно и мучительно (поскольку Microsoft не планирует когда-либо добавлять поддержку 308 в IE в Windows 7/8.1).
Все текущие браузеры поддерживают 308s (AFAIU).
Вы можете обнаружить браузеры, поддерживающие ответы 308, проверив HTTP-заголовок update-insecure-requests . Этот заголовок был добавлен в браузеры в 2015 году, менее чем через год после добавления поддержки 308 ответов. Поэтому вы можете поспорить, что любой браузер, отправляющий
HTTP
Заголовок запроса отправляет на сервер сигнал, выражающий предпочтение клиента в отношении зашифрованного и аутентифицированного ответа и о том, что он может успешно обработать Директива CSP.
сказано, что его необходимо отправлять вместе с запросами как для незащищенных, так и для безопасных URL-адресов, если HSTS не загружен предварительно.
Пользовательские агенты ДОЛЖНЫ отправлять поле заголовка Upgrade-Insecure-Requests вместе с запросами на априори небезопасные URL-адреса.
Пользовательские агенты ДОЛЖНЫ отправлять поле заголовка Upgrade-Insecure-Requests вместе с запросами URL-адресов [https и wss], хост URL-адреса которых не является предварительно загружаемым хостом HSTS.
В спецификацииДалее в спецификации говорится, что даже если HSTS предварительно загружен, этот заголовок все равно должен периодически отправляться, и на практике даже с предварительно загруженным HSTS он отправляется всегда, за исключением случаев запроса встроенного контента, такого как изображения.
Если заголовок не отправлен, легко обеспечить отказоустойчивый резервный вариант, имитирующий ответ 308, например:
function _308($uri) {
header('vary: upgrade-insecure-requests');// Don't cache if header varies
if (!empty($_SERVER['HTTP_UPGRADE_INSECURE_REQUESTS'])) {
// upgrade-insecure-requests: 1
// Safe to use 308 response code
header('location: '.$uri, true, 308);
}
elseif (in_array($_SERVER['REQUEST_METHOD'], ['GET','HEAD'])) {
// When the request method is GET or HEAD
// a 301 response has the same effect.
header('location: '.$uri, true, 301);
}
else {
// 307 responses were introduced in 1999
// and are now universally supported.
// Browsers don't cache 308 responses
// when the request method is POST,
// so 307 has the same effect.
header('location: '.$uri, true, 307);
}
exit;
}
308 перенаправлений были впервые введены за несколько месяцев до HTTP/2. Таким образом, теоретически перенаправления 308 поддерживаются во всех браузерах, поддерживающих HTTP / 2, и совместимость может быть обнаружена путем обнаружения использования HTTP / 2 или выше. В то время как с 1999 года существует около 307 перенаправлений, это означает, что все современные браузеры поддерживают его.
Согласно RFC 2616, для 307 ответов вы должны включить короткую гипертекстовую заметку, которая содержит информацию, необходимую для повторения исходного запроса на новый URI. Например, это может быть форма, содержащая скрытые поля со всеми переменными POST, которые были отправлены в исходном запросе.
Таким образом, это говорит мне, что если ваш веб-браузер слишком стар, чтобы знать, как обрабатывать код ответа, он просто проигнорирует его при отображении тела ответа для пользователя.
Временный URI ДОЛЖЕН быть задан полем Location в ответе. Если метод запроса не был HEAD, объект ответа ДОЛЖЕН содержать короткую гипертекстовую заметку с гиперссылкой на новый URI, так как многие пользовательские агенты до HTTP/1.1 не понимают состояние 307. Следовательно, примечание ДОЛЖНО содержать информацию, необходимую пользователю для повторения исходного запроса на новый URI.