307 http: 307 Temporary Redirect — HTTP

Содержание

307 Временная переориентация Код ответа статуса HTTP 307 Temporary Redirect указывает,что запрашиваемый ресурс был временно перемещен на URL,указанный в заголовках Location.


Код ответа статуса перенаправления HTTP 307 Temporary Redirect указывает,что запрашиваемый ресурс был временно перемещен на URL,указанный в заголовках Location.Метод и тело исходного запроса повторно используются для выполнения перенаправленного запроса.

В то время как коды состояния перенаправления, такие как 301 и 308, кэшируются по умолчанию, другие, такие как 302 и 307, нет.

302 часто используется для создания временных перенаправлений,но с появлением HTTP 1.1 307 заменил его в качестве допустимого временного перенаправления.В то время как 302 является немного расплывчатым,307 точно указывает,что запрашиваемый URL был перемещен во временное место и будет возвращен через некоторое время.


Код ответа состояния перенаправления HTTP 307 Temporary Redirect указывает, что запрошенный ресурс был временно перемещен по URL-адресу, указанному в заголовках

Location .

Метод и тело исходного запроса повторно используются для выполнения перенаправленного запроса. В случаях, когда вы хотите, чтобы используемый метод был изменен на GET , используйте вместо этого 303 See Other . Это полезно, если вы хотите дать ответ методу PUT , который не является загруженными ресурсами, а является подтверждающим сообщением (например, «Вы успешно загрузили XYZ»).

Единственная разница между 307 и 302 заключается в том, что 307 гарантирует, что метод и тело не будут изменены при выполнении перенаправленного запроса. С 302 некоторые старые клиенты неправильно меняли метод на GET : поведение с методами, отличными от GET и 302 , тогда непредсказуемо в Интернете, тогда как поведение с 307 предсказуемо. Для запросов GET их поведение идентично.

Status

307 Temporary Redirect

Specifications

Specification
HTTP-семантика
# status. 307

Browser compatibility

DesktopMobile
ChromeEdgeFirefoxInternet ExplorerOperaSafariWebView AndroidChrome AndroidFirefox для AndroidOpera AndroidSafari на IOSSamsung Internet
307

Yes

12

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

See also

  • 302 Found , эквивалент этого кода состояния, но это может изменить используемый метод, если это не GET .
  • 303 See Other , временное перенаправление, изменяющее метод, используемый для GET .
  • 301 Moved Permanently
    навсегда, постоянное перенаправление


HTTP
  • 303 См. прочее

    Протокол передачи гипертекста (HTTP) 303. См. Код ответа «Другой статус перенаправления» указывает, что ссылка запрашивается не на сам ресурс, а на другую страницу.

  • 304 не изменённый

    Код ответа перенаправления клиента HTTP 304 Not Modified указывает на необходимость повторной передачи запрошенных ресурсов.

  • 308 Постоянная переориентация

    Код ответа статуса 308 Permanent Redirect протокола передачи гипертекста (HTTP)указывает,что запрашиваемый ресурс был окончательно перемещен URL-адрес дан.

  • 400 Плохой запрос

    Код состояния ответа протокола HyperText Transfer Protocol (HTTP)400 Bad Request указывает,что сервер не может или не будет обрабатывать запрос из-за того,что что-то воспринимается как

  • 1
  • 365
  • 366
  • 367
  • 368
  • 369
  • 405
  • Next

какой выбрать? Особенности 307 редиректа

Skip to content

301 или 307 редирект: какой выбрать?

Редирект — это перенаправление одного URL на другой URL. Когда пользователь вводит определенный URL в свой браузер или щелкает ссылку с этим URL, он автоматически перенаправляется на целевой URL.  Например, если у вас был «oldcontеnt.cоm», и вы хотите, чтобы пользователи переходили на «newcontеnt.cоm», то можно настроить автоматическое перенаправление c первого URL на второй.

Технически, все короткие ссылки являются перенаправлениями, потому что короткий URL просто перенаправляет на длинный URL.

Как правило для SEO используют два перенаправления: 307 (временное перенаправление) и 301 (постоянное перенаправление). Число 301/307 представляет код HTTP.

307 редирект

307 редирект является временным перенаправлением и хотя часто это не считается полезным для SEO, такой редирект может быть полезным для коротких ссылок. Код 307 отправляется, когда документ временно доступен по другому URL-адресу. Он сообщает поисковым системам, что это перенаправление может измениться в будущем, поэтому не стоит индексировать ссылку и нужно всегда проверять самый последний контент.

307 редирект удобен, если вы думаете, что целевой URL может измениться в какой-то момент. Например, у вас может быть ссылка на сайт, где раздача контента будет меняться ежемесячно. Или ссылку на страницу со скидками, которая изменяется по мере запуска различных рекламных акций. Поскольку целевой контент периодически меняется, а исходный URL остается неизменным, имеет смысл использовать редирект 307.

301 редирект

Является постоянным перенаправлением с одного URL-адреса на другой, которое передает SEO-рейтинг на перенаправленную страницу. Их называют «постоянными», потому что поисковые системы, такие как Google, ожидают, что ваш целевой URL никогда не изменится, поэтому они могут кэшировать URL.

🤔 Какой выбрать редирект?
Здесь нет правильного ответа. Начните с определения своих целей, а затем выберите тип перенаправления, который лучше всего поможет вам их достичь.

↪ Если SEO является высоким приоритетом, выберите 301 переадресацию для своих ссылок. 301 редиректами, как правило, считаются лучшими для SEO и рейтинга страницы.

↪ Если точное отслеживание кликов наболее важно, чем SEO, и вы планируете периодически менять свой URL-адрес, то 307 временный редирект подходящий вариант.

Для точного отслеживания кликов лучше использовать 307 переадресацию в каналах, где не задействовано SEO, таких как Twitter, электронная почта, реклама, любой сайт, для которого требуется вход, и ссылки на страницах вашего профиля в социальной сети.

Самая важная вещь, которую нужно помнить, — это то, что нет единого правильного ответа. Начните с определения своих целей, а затем выберите тип перенаправления, который лучше всего поможет вам их достичь.

Опубликовано

Остались вопросы? Закажите консультацию!

Имя *

Телефон *

Сайт *

 

Что такое код состояния временного перенаправления HTTP 307

Протокол HTTP определяет более 40 кодов состояния сервера, 9 из которых явно предназначены для перенаправления URL-адресов. Каждый код состояния перенаправления начинается с цифры 3 (HTTP 3xx) и имеет собственный метод обработки перенаправлений. Хотя некоторые из них похожи, все они по-разному заботятся о перенаправлениях.

Понимание того, как работает каждый код состояния перенаправления HTTP, имеет решающее значение для диагностики или исправления ошибок конфигурации веб-сайта.

В этом руководстве мы подробно рассмотрим коды состояния HTTP 307 Temporary Redirect и 307 Internal Redirect , включая их значение и отличия от других кодов состояния перенаправления 3xx.

Начнем!

Что такое HTTP 307

Временное перенаправление ?

Инженерная рабочая группа Интернета (IETF) определяет временное перенаправление 307 как:

Код состояния 307 (временное перенаправление) указывает, что целевой ресурс временно находится под другим URI, и пользовательский агент НЕ ДОЛЖЕН изменять метод запроса. если он выполняет автоматическое перенаправление на этот URI. Поскольку перенаправление может меняться со временем, клиент должен продолжать использовать исходный эффективный URI запроса для будущих запросов.

Как работает перенаправление HTTP 3xx

Прежде чем мы углубимся в ответы HTTP 307 Temporary Redirect и 307 Internal Redirect, давайте разберемся, как работает перенаправление HTTP.

Коды состояния HTTP — это ответы сервера браузеру. Каждый код состояния представляет собой трехзначное число, и первая цифра определяет тип ответа. Коды состояния HTTP 3xx подразумевают перенаправление. Они дают команду браузеру перенаправить на новый URL-адрес, который определен в Location заголовок ответа сервера.

Перенаправления HTTP 3xx в действии

Когда ваш браузер сталкивается с запросом на перенаправление от сервера, он должен понимать природу этого запроса. Эти запросы обрабатываются различными кодами состояния перенаправления HTTP 3xx. Знание их всех поможет нам лучше понять 307 Temporary Redirect и 307 Internal Redirect.

Ознакомьтесь с нашим видеоруководством по временной переадресации 307 и всем переадресациям 3xx

Различные перенаправления HTTP 3xx

Существует несколько типов кодов состояния перенаправления HTTP 3xx. Первоначальная спецификация HTTP не включала временную переадресацию 307 и постоянную переадресацию 308, поскольку эти роли должны были выполняться 301 перемещено навсегда и 302 найдено.

Однако большинство клиентов изменили метод HTTP-запроса с POST на GET для ответов перенаправления 301 и 302, несмотря на то, что спецификация HTTP не разрешает клиентам делать это. Такое поведение потребовало введения более строгого 307 Temporary Redirect 9.0008 и 308 Коды состояния постоянного перенаправления в обновлении HTTP/1.1.

Ответ HTTP 307 Internal Redirect является вариантом кода состояния 307 Temporary Redirect . Он не определен стандартом HTTP и представляет собой просто локальную реализацию браузера. Мы обсудим это позже более подробно.

В то время как коды состояния перенаправления, такие как 301 и 308, кэшируются по умолчанию, другие, такие как 302 и 307, нет. Однако вы можете сделать все ответы перенаправления кэшируемыми (или нет), добавив Cache-Control или Expires Поле заголовка ответа.

HTTP-перенаправления не такие сложные

Использование 302, 303 или 307 для временных перенаправлений

Как видно из приведенной выше диаграммы, для временных перенаправлений у вас есть три варианта: 302, 303 или 307. Однако большинство клиентов обрабатывают статус 302 код в качестве ответа 303 и измените метод HTTP-запроса на GET. Это не идеально с точки зрения безопасности.

» RFC 1945 и RFC 2068 указывают, что клиенту не разрешено изменять метод перенаправленного запроса. Однако большинство существующих реализаций пользовательских агентов обрабатывают 302, как если бы это был ответ 303, выполняя GET для значения поля Location независимо от исходного метода запроса. Коды состояния 303 и 307 были добавлены для серверов, которые хотят однозначно указать, какая реакция ожидается от клиента.
— HTTP/1.1. Определения кодов состояния, W3.org

Таким образом, для временных перенаправлений, когда вам необходимо поддерживать метод HTTP-запроса, используйте более строгий ответ HTTP 307 Temporary Redirect .

перенаправление /register-form.html на signup-form.html или с /login.php на /signin.php.

В случаях, когда вам нужно изменить метод запроса перенаправления на GET, вместо этого используйте ответ 303 See Other .

перенаправление запроса POST со страницы /register.php для загрузки страницы /success.html через запрос GET.

Если ваша целевая аудитория не использует устаревшие клиенты, избегайте использования ответа перенаправления 302 Found .

Понимание HTTP 307 Внутреннее перенаправление для сайтов, поддерживающих только HTTPS

Если у вас есть сайт, поддерживающий только HTTPS (что вам и следует делать), при попытке небезопасного посещения его через обычный http:// ваш браузер автоматически перенаправит на его безопасный https:// версия. Как правило, это происходит с ответом перенаправления 301 Moved Permanently от сервера.

Например, если вы посетите http://citibank.com и загрузите DevTools в Chrome и выберите вкладку Network , вы увидите все запросы, сделанные между браузером и сервером.

Первый ответ — 301 Moved Permanently , который перенаправляет браузер на HTTPS-версию сайта.

Ответ 301 перенаправляет на версию HTTPS

Если мы углубимся в поля Headers первого запроса, то увидим, что заголовок ответа Location определяет безопасный URL-адрес для перенаправления.

Заголовок ответа Location определяет URL-адрес перенаправления

Проблема с этим подходом заключается в том, что злоумышленники могут перехватить сетевое соединение, чтобы перенаправить браузер на пользовательский URL-адрес. Подобные атаки типа «человек посередине» (MITM) довольно распространены. Популярный сериал даже подделывал его в одном из своих эпизодов.

Кроме того, злоумышленник может запустить атаку MITM без изменения URL-адреса, отображаемого в адресной строке браузера. Например, пользователю может быть предоставлена ​​фишинговая страница, которая выглядит точно так же, как исходный сайт.

А поскольку все выглядит одинаково, включая URL-адрес в адресной строке, большинство пользователей с удовольствием введут свои учетные данные. Вы можете себе представить, почему это может быть плохо.

301 перенаправление на HTTPS небезопасно

Безопасное перенаправление с HTTP 307 Внутреннее перенаправление

Теперь давайте попробуем тот же пример с Kinsta. Посещение http://kinsta.com приводит к сетевым запросам, как показано на скриншоте ниже.

Пример 307 Internal Redirect

Первый запрос сайта аналогичен предыдущему примеру, но на этот раз он приводит к 307 Внутренний ответ перенаправления . Нажав на нее, вы увидите более подробную информацию об этом ответе.

Разверните свое приложение в Kinsta.

Начните прямо сейчас с бесплатной пробной версии.

Запустите свои приложения Node.js, Python, Go, PHP, Ruby, Java и Scala (или почти все, что угодно, если вы используете свои собственные файлы Docker) в три простых шага!

Начать бесплатную пробную версию

Примечание: Если вы попытаетесь посетить сайт напрямую с https:// , вы не увидите этот заголовок, поскольку браузеру не нужно выполнять какое-либо перенаправление.

Заголовки ответа 307 Internal Redirect

Обратите внимание на заголовок ответа Non-Authoritative-Reason: HSTS. Это строгая транспортная безопасность HTTP (HSTS), также известная как заголовок ответа Strict-Transport-Security.

Что такое HSTS (строгая транспортная безопасность)?

IETF ратифицировала строгую транспортную безопасность HTTP (HSTS) в 2012 году, чтобы заставить браузеры использовать безопасные соединения, когда сайт работает строго по протоколу HTTPS.

Это похоже на то, как Chrome или Firefox говорят: «Я даже не буду пытаться запрашивать этот сайт или какие-либо его ресурсы по небезопасному протоколу HTTP. Вместо этого я поменяю его на HTTPS и попробую еще раз».

Вы можете следовать руководству Kinsta о том, как включить HSTS, чтобы запустить его на своем веб-сайте WordPress.

Улучшенная безопасность с ответом 307 Internal Redirect

Углубление в заголовок ответа второго запроса даст нам лучшее понимание.

Проверка заголовка ответа HSTS

Здесь вы можете увидеть заголовок ответа strict-transport-security: max age=31536000.

Атрибут max-age заголовка ответа strict-transport-security определяет, как долго браузер должен следовать этому шаблону. В приведенном выше примере это значение равно 3153600 секунд (или 1 год).

Как только сайт вернет этот заголовок ответа, браузер даже не будет пытаться сделать обычный HTTP-запрос. Вместо этого он выполнит внутреннее перенаправление 307 на HTTPS и повторит попытку.

Каждый раз, когда этот процесс повторяется, заголовки ответов сбрасываются. Следовательно, браузер не сможет сделать небезопасный запрос в течение неопределенного периода времени.

Если вы размещаете свой сайт на Kinsta, вы можете создать заявку в службу поддержки, чтобы добавить заголовок HSTS на ваш сайт WordPress. Поскольку добавление заголовка HSTS дает преимущества в производительности, рекомендуется включить HSTS для вашего сайта.

Что такое список предварительной загрузки HSTS?

Даже при использовании HSTS существует очевидная проблема с безопасностью. Самый первый HTTP-запрос, который вы отправляете с помощью браузера, небезопасен, что повторяет проблему, которую мы наблюдали ранее с Citibank.

Кроме того, заголовок ответа HSTS может быть отправлен только через HTTPS, поэтому первоначальный небезопасный запрос не может быть даже возвращен.

Для решения этой проблемы HSTS поддерживает атрибут предварительной загрузки в заголовке ответа. Идея состоит в том, чтобы иметь список сайтов, которые принудительно загружают HSTS в сам браузер, полностью обходя эту проблему безопасности.

Добавление вашего сайта в список предварительной загрузки HSTS браузера сообщит ему, что ваш сайт применяет строгую политику HSTS, даже если он посещает ваш сайт впервые. Затем браузер будет использовать ответ 307 Internal Redirect , чтобы перенаправить ваш сайт на безопасную схему https://, прежде чем запрашивать что-либо еще.

Обратите внимание, что в отличие от 307 Temporary Redirect , ответ 307 Internal Redirect является «фальшивым заголовком», установленным самим браузером. Он не исходит от сервера, веб-хостинга (например, Kinsta) или CMS (например, WordPress).

Добавление сайта в список предварительной загрузки HSTS имеет много преимуществ:

  1. Веб-сервер никогда не видит незащищенные HTTP-запросы. Это снижает нагрузку на сервер и делает сайт более безопасным.
  2. Браузер берет на себя перенаправление с HTTP на HTTPS, делая сайт более быстрым и безопасным.

Требования к списку предварительной загрузки HSTS

Если вы хотите добавить свой сайт в список предварительной загрузки HSTS браузера, необходимо отметить следующие условия:

  • Для вашего домена должен быть установлен действующий сертификат SSL/TLS.
  • Обеспечьте строгое соблюдение HTTPS, перенаправив весь HTTP-трафик на HTTPS.
  • Все субдомены должны обслуживаться через HTTPS, особенно субдомен www , если существует запись DNS для этого субдомена.
  • Ваш базовый домен должен включать заголовок HSTS со следующими атрибутами:
    • Атрибут max-age должен быть установлен как минимум на 31536000 секунд (1 год).
    • includeSubdomains и директивы preload должны быть указаны.
    • Если вы обслуживаете дополнительное перенаправление, оно должно включать заголовок HSTS, а не страницу, на которую оно перенаправляется.

Важно

Удаление вашего домена из списка предварительной загрузки HSTS может быть сложным и трудоемким процессом (до 12 недель и более). Включите HSTS только в том случае, если вы полностью привержены использованию HTTPS на своем сайте. Вы можете удалить свой сайт из списка предварительной загрузки HSTS, отправив форму на hstspreload.org.

Добавление вашего сайта в список предварительной загрузки HSTS

Отправка списка предварительной загрузки HSTS

Существует два способа добавить ваш сайт в список предварительной загрузки HSTS.

  1. Отправив свой сайт в каталог списка предварительной загрузки HSTS. Например, главный список hstspreload.org поддерживается проектом с открытым исходным кодом Chromium и используется большинством основных браузеров (Firefox, Chrome, Safari, IE 11 и Edge).
  2. Добавив на свой сайт следующее поле заголовка:

Строгая транспортная безопасность: max-age=63072000; включать поддомены; предварительная загрузка

При использовании второго метода первое посещение вашего сайта браузером не будет полностью безопасным. Однако последующие посещения будут полностью безопасными.

Пример списка предварительной загрузки HSTS от Mozilla

Вы можете использовать бесплатный онлайн-инструмент, такой как Security Headers, чтобы проверить, использует ли ваш сайт HSTS. Если вас беспокоит поддержка браузерами HSTS, вы можете быть уверены, зная, что HSTS поддерживается почти всеми используемыми сегодня браузерами.

HSTS широко поддерживается во всех основных браузерах

HTTP 307 Redirects and SEO

Поскольку ответ 307 Temporary Redirect показывает, что ресурс временно переместился на новый URL-адрес, поисковые системы не обновляют свой индекс, чтобы включить этот новый URL-адрес. «Ссылочный сок» из исходного URL-адреса не передается новому URL-адресу.

Это отличается от переадресации 301 Moved Permanently, когда поисковые системы обновляют свой индекс, чтобы включить новый URL-адрес и передать «ссылочный сок» с исходного URL-адреса на новый URL-адрес.

При ответе 307 Internal Redirect все происходит на уровне браузера. Следовательно, это не должно иметь прямого влияния на SEO вашего сайта. Однако добавление вашего сайта в список предварительной загрузки HSTS ускорит его загрузку и сделает его более безопасным, что может помочь ему занять более высокое место в результатах поиска.

Будьте осторожны, чтобы случайно не перенаправить пользователей и ботов в бесконечный цикл перенаправления, что приведет к ошибке «слишком много перенаправлений».

Существует множество типов кодов состояния перенаправления HTTP 3xx. Сегодня пришло время погрузиться в коды состояния временной переадресации HTTP 307… увидимся на другой стороне! 🛤Нажмите, чтобы твитнуть

Резюме

Перенаправление URL-адресов позволяет назначить веб-странице более одного URL-адреса. Лучший способ обработки перенаправления URL-адресов — на уровне сервера с ответами кода состояния HTTP 3xx redirect . Если ваш сайт закрыт на техническое обслуживание или недоступен по другим причинам, вы можете временно перенаправить его на другой URL-адрес с ответом 307 Temporary Redirect .

При этом любое перенаправление увеличивает время загрузки страницы. Следовательно, используйте перенаправления разумно, всегда помня об опыте конечного пользователя.


Получите все свои приложения, базы данных и сайты WordPress онлайн и под одной крышей. Наша многофункциональная высокопроизводительная облачная платформа включает в себя:

  • Простая настройка и управление на панели управления MyKinsta
  • Экспертная поддержка 24/7
  • Лучшее оборудование и сеть Google Cloud Platform на базе Kubernetes для максимальной масштабируемости
  • Интеграция Cloudflare корпоративного уровня для скорости и безопасности
  • Глобальный охват аудитории благодаря 35 центрам обработки данных и 275 точкам присутствия по всему миру

Начните с бесплатной пробной версии нашего хостинга приложений или хостинга базы данных. Ознакомьтесь с нашими планами или поговорите с отделом продаж, чтобы найти наиболее подходящий вариант.

http — В чем разница между переадресацией 302 и 307?

спросил

Изменено 3 месяца назад

Просмотрено 181к раз

В чем разница между HTTP-ответом 302 FOUND и 307 TEMPORARY REDIRECT ?

Спецификация W3, по-видимому, указывает, что они оба используются для временных перенаправлений, и ни один из них не может быть кэширован, если это специально не разрешено ответом.

  • http
  • перенаправление

0

307 появился потому, что пользовательские агенты приняли поведение де-факто , чтобы принимать запросы POST, которые получают ответ 302, и отправлять запрос GET в заголовок ответа Location.

Это неправильное поведение — только 303 должно привести к тому, что POST превратится в GET. Пользовательские агенты должны (но не должны) придерживаться метода POST при запросе нового URL-адреса, если исходный запрос POST вернул 302.

307 был введен, чтобы позволить серверам дать понять пользовательскому агенту, что изменение метода должно не должен быть сделан клиентом при следовании заголовку ответа Location.

5

Разница касается перенаправления запросов POST , PUT и DELETE и ожиданий сервера в отношении поведения пользовательского агента ( RFC 2616 ):

Примечание. В RFC 1945 и RFC 2068 указано, что клиенту не разрешено изменить метод на перенаправленный запрос. Однако большинство существующих пользователей реализации агента обрабатывают 302, как если бы это был ответ 303, выполнение ПОЛУЧИТЬ значение поля «Местоположение» независимо от первоначального запроса метод. Коды состояния 303 и 307 были добавлены для серверов, которые желают однозначно определить, какой вид реакции ожидается от клиент.

Также прочитайте статью в Википедии о кодах переадресации 30x.

4

Хорошим примером 307 Internal Redirect в действии является ситуация, когда Google Chrome обнаруживает HTTP-вызов к домену, который, как он знает, требует строгой безопасности транспорта.

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

2

  • 301: постоянное перенаправление: URL устарел и должен быть заменен. Браузеры будут кэшировать это.
    Пример использования: URL-адрес перемещен с /register-form.html на signup-form.html .
    Метод изменится на GET в соответствии с RFC 7231: «По историческим причинам пользовательский агент МОЖЕТ изменить метод запроса с POST на GET для последующего запроса».
  • 302: временное перенаправление. Используйте только для клиентов HTTP/1.0. Этот код состояния не должен изменять метод, но браузеры все равно сделали это. В RFC говорится: «Многие пользовательские агенты до HTTP/1.1 не понимают [303]. Когда возникает проблема взаимодействия с такими клиентами, вместо этого можно использовать код состояния 302, поскольку большинство пользовательских агентов реагируют на ответ 302, как описано здесь. на 303″. Конечно, некоторые клиенты могут реализовать его в соответствии со спецификацией, поэтому, если взаимодействие с такими устаревшими клиентами не является реальной проблемой, 303 лучше подходит для получения стабильных результатов.
  • 303: временное перенаправление, изменение метода на GET.
    Пример использования: если браузер отправил POST на /register.php , то теперь загрузите (GET) /success.html .
  • 307: временная переадресация, идентичный повтор запроса.
    Пример использования: если браузер отправил POST на /register.php , то это говорит ему повторить POST на /signup.php .
  • 308: постоянный редирект, идентичный повтор запроса. Если 307 является эквивалентом 303 «без изменения метода», этот статус 308 является аналогом 301 «без изменения метода».

RFC 7231 (от 2014 г.) очень удобочитаем и не слишком многословен. Если вы хотите узнать точный ответ, рекомендуем прочитать. В некоторых других ответах используется RFC 2616 от 1999 года, но ничего не изменилось.

RFC 7238 определяет статус 308. Он считается экспериментальным, но в 2016 году он уже поддерживался всеми основными браузерами.

8

Первоначально было просто 302

Ответ Что должны делать браузеры
302 Найдено Повторить запрос с новым URL

Идея в том, что:

  • если бы вы выполняли GET в каком-то месте, вы бы переделали свой GET на новый URL
  • , если бы вы делали POST в каком-то месте, вы бы переделали свои POST на новый URL
  • , если вы выполняли PUT в каком-то месте, вы бы переделали PUT на новый URL-адрес
  • .
  • , если вы выполняли DELETE в каком-то месте, вы бы переделали DELETE на новый URL-адрес
  • .
  • и т. д.

К сожалению, все браузеры ошибались. При получении 302 они всегда переключались на GET по новому URL, а не повторяли запрос с тот же глагол ( например , POST ):

  • Мозаика сделала это неправильно
  • Netscape скопировал ошибки в Mosaic; значит они ошиблись
  • Internet Explorer скопировал ошибки в Netscape; значит они ошиблись

Стало де-факто неправильным.

Все браузеры получили 302 неправильно. Так были созданы 303 и 307 .

Ответ Что должны делать браузеры Что на самом деле делают браузеры
302 Найдено Повторить запрос с новым URL GET с новым URL
303 См. прочее GET с новым URL GET с новым URL
307 Временное перенаправление Повторить запрос с новым URL Повторить запрос с новым URL

В форме диаграммы

5 различных видов перенаправлений:

 ╔═══════════╦═══════════════════════════════════ ═════════════╗
║ ║ Переключиться на ПОЛУЧИТЬ? ║
║ ╟ackим Какедлению ╢
║ Временно ║ Нет │ Да ║
╠═══════════╬════════════════════════╪════════════ ═══════════╣
║ Нет ║ 308 Постоянное перенаправление │ 301 Перемещено навсегда ║
╟ackindyacsideabults ───────────╢
║ Да ║ 307 Временная переадресация │ 303 См. другое ║
║ ║ 302 Найдено (намечено) │ 302 Найдено (фактически) ║
╚═══════════╩════════════════════════╧════════════ ═══════════╝
 

Альтернативный вариант:

Ответ Переключатель получить? Временный?
301 Переехал навсегда
302 Найдено (предназначено) Да
302 Найдено (факт) Да Да
303 См. Другое Да Да
307 Временное перенаправление Да
308 Постоянное перенаправление

ОЖИДАЕТСЯ для 302: перенаправление использует тот же метод запроса POST на NEW_URL

 КЛИЕНТ POST OLD_URL -> СЕРВЕР 302 NEW_URL -> КЛИЕНТ POST NEW_URL
 

ACTUAL для 302, 303: перенаправление изменяет метод запроса с POST на GET на NEW_URL

 CLIENT POST OLD_URL -> SERVER 302 NEW_URL -> CLIENT GET NEW_URL (перенаправление использует GET)
CLIENT POST OLD_URL -> SERVER 303 NEW_URL -> CLIENT GET NEW_URL (перенаправление использует GET)
 

ACTUAL для 307: перенаправление использует тот же метод запроса POST на NEW_URL

 POST CLIENT OLD_URL -> SERVER 307 NEW_URL -> CLIENT POST NEW_URL
 

302 — это временное перенаправление, которое генерируется сервером, тогда как 307 — это внутренний ответ перенаправления, генерируемый браузером. Внутреннее перенаправление означает, что перенаправление выполняется браузером автоматически внутри браузера, в основном браузер сам изменяет введенный URL-адрес с http на https в запросе на получение, прежде чем делать запрос, поэтому запрос на незащищенное соединение никогда не отправляется в Интернет. Изменит ли браузер URL-адрес на https или нет, зависит от списка предварительной загрузки hsts, который предустановлен вместе с браузером. Вы также можете добавить любой сайт, поддерживающий https, в список, введя домен в список предварительной загрузки hsts вашего собственного браузера, который находится по адресу chrome://net-internals/#hsts. Еще одна вещь, домены веб-сайтов могут быть добавлены их владельцами. чтобы предварительно загрузить список, заполнив форму на https://hstspreload.org/, чтобы он был предварительно установлен в браузерах для каждого пользователя, хотя я упоминаю, что вы можете сделать это, в частности, и для себя.


Поясню на примере:
Я сделал запрос на получение на http://www. pentesteracademy.com, который поддерживает только https, и у меня нет этого домена в моем списке предварительной загрузки hsts в моем браузере, поскольку владелец сайта не зарегистрировался, чтобы он поставлялся с предустановленной предварительной загрузкой hsts список.
GET-запрос для незащищенной версии сайта перенаправляется на безопасную версию (см. HTTP-заголовок с именем местоположения в ответе на изображении выше).
Теперь я добавляю сайт в свой собственный список предварительной загрузки браузера, добавляя его домен в форму «Добавить домен hsts» по адресу chrome://net-internals/#hsts, которая изменяет мой личный список предварительной загрузки в моем браузере Chrome. Обязательно выберите «Включить субдомены». для СТС вариант есть.
Давайте посмотрим запрос и ответ для одного и того же веб-сайта после добавления его в список предварительной загрузки hsts.

вы можете увидеть внутреннюю переадресацию 307 в заголовках ответа, на самом деле этот ответ генерируется вашим браузером, а не сервером.
Также список предварительной загрузки HSTS может помочь предотвратить доступ пользователей к незащищенной версии сайта, поскольку перенаправление 302 подвержено атакам mitm.
Надеюсь, я немного помог вам понять больше о перенаправлениях.

1

Кроме того, для администраторов серверов может быть важно отметить, что браузеры могут отображать запрос пользователю, если вы используете перенаправление 307.

Например*, Firefox и Opera запросят у пользователя разрешение на перенаправление, тогда как Chrome, IE и Safari сделают перенаправление прозрачно.

*для Bulletproof SSL и TLS (стр. 192).

1

В некоторых случаях злоумышленник может использовать переадресацию 307 для получения учетных данных жертвы.

Дополнительную информацию можно найти в разделе 3.1 Всестороннего формального анализа безопасности OAuth 2. 0.

Авторы вышеупомянутой статьи предлагают следующее:

Исправить. Вопреки текущей формулировке стандарта OAuth, точный метод перенаправления не является деталью реализации, а необходим для безопасности OAuth. В стандарте HTTP (RFC 7231) однозначно определено только перенаправление 303 для удаления тела HTTP-запроса POST. Все остальные коды состояния перенаправления HTTP, включая наиболее часто используемый 302, оставляют браузеру возможность сохранить запрос POST и данные формы. На практике браузеры обычно переписывают запрос GET, тем самым удаляя данные формы, за исключением редиректов 307. Таким образом, стандарт OAuth должен требовать перенаправления 303 для шагов, упомянутых выше, чтобы решить эту проблему.

Единственная разница между 307 и 302 заключается в том, что 307 гарантирует, что метод и тело не будут изменены при выполнении перенаправленного запроса. С 302 некоторые старые клиенты неправильно меняли метод на GET: поведение с не-GET-методами и 302 в этом случае непредсказуемо в Интернете, тогда как поведение с 307 предсказуемо.

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *