Есть ли еще вариант использования HTTP 301 вместо HTTP 308, чтобы указать, что ресурс перемещен (особенно на сервере ReST)? - PullRequest
0 голосов
/ 22 ноября 2018

Я указываю услугу ReST.Недавно я наткнулся на этот черновой документ IETF , который можно истолковать как предполагающий, что службы ReST всегда должны возвращать 308. Обратите внимание, что срок действия документа истек без замены (я не очень ясно представляю процесс IETF).

Ранее я думал, что служба должна вернуть «301 Moved Permanently» для GET и « 308 Permanent Redirect » для POST, чтобы убедиться, что она не является ненадлежащей.преобразован в GET (чем-то, пытающимся быть умным).

Использование 301 и 308, похоже, выражается в терминах СЛЕДУЕТ и НЕ ДОЛЖНО, а ДОЛЖНО и НЕ ДОЛЖНО, так что неясно, что "правильно "философски.

Прагматически 301 для GET и 308 для POST должны работать.308 для GET не является неправильным, поскольку текущая редакция на момент написания включает пример 308, создаваемого в ответ на GET.Теперь существует проблема развертывания, которая заключается в том, что если клиент не понимает 308, он должен обращаться с ним как с 300 (а не с 301, что имеет для меня больший смысл), но теперь 308 широко понимают, поэтому возникает вопрос, стоит ли вам когда-либоиспользовать HTTP 301?

Если 308, по сути, является исправлением ошибки для 301, почему 301 официально не рекомендуется в HTTP / 1.1?Существует ли законный вариант использования для преобразования POST в GET для перенаправления в ReST или в более общем смысле в HTTP?

Для 301 HTTP / 1.1 говорит:

Примечание: ДляПо историческим причинам пользовательский агент МОЖЕТ изменить метод запроса с POST на GET для последующего запроса.

Почему это было хорошей идеей?Это все еще действует где-нибудь?

См. Также:

1 Ответ

0 голосов
/ 23 ноября 2018

Если 308 по сути является исправлением ошибки для 301, почему 301 официально не рекомендуется в HTTP / 1.1?

Нет, это не так.

RFC 7538 , который определяет код состояния 308, не делает недействительным или делает 301 устаревшим.Он просто определяет другой код состояния, чтобы заполнить пробел в RFC 7231 , который не определяет постоянный вариант кода состояния 307:

+-------------------------------------------+-----------+-----------+
|                                           | Permanent | Temporary |
+-------------------------------------------+-----------+-----------+
| Allows changing the request method from   | 301       | 302       |
| POST to GET                               |           |           |
| Does not allow changing the request       | -         | 307       |
| method from POST to GET                   |           |           |
+-------------------------------------------+-----------+-----------+

В практическом плане я все еще вижу, что 301 широко используется в SEO.И я видел некоторых HTTP-клиентов, которые не распознают 308.


Помимо RFC, давайте посмотрим, что MDN Web Docs из Mozilla говорит о 301:

Код ответа о состоянии перенаправления HyperText Transfer Protocol (HTTP) 301 Moved Permanently указывает на то, что запрошенный ресурс был окончательно перемещен в URL-адрес, указанный в заголовках Location.Браузер перенаправляет на эту страницу, и поисковые системы обновляют свои ссылки на ресурс (в «SEO-говорить» говорится, что «link-juice» отправляется на новый URL).

Даже еслиспецификация требует, чтобы метод (и тело) не изменялся при выполнении перенаправления, не все пользовательские агенты согласуются с ним - вы все равно можете найти этот тип программного обеспечения с ошибками.Поэтому рекомендуется использовать код 301 только в качестве ответа для методов GET или HEAD и вместо этого использовать методы 308 Permanent Redirect для POST, поскольку изменение метода явно запрещено с этим статусом.

Теперь посмотрим, что говорит Mozilla о 308:

Код ответа о состоянии перенаправления гипертекстового протокола (HTTP) 308 Permanent Redirect указывает, чтоЗапрашиваемый ресурс был окончательно перемещен по URL-адресу, указанному в заголовках Location.Браузер перенаправляет на эту страницу, и поисковые системы обновляют свои ссылки на ресурс (в «SEO-говорить» говорится, что «link-juice» отправляется на новый URL-адрес).

Метод запросаи тело не будет изменено, тогда как 301 иногда может быть неверно изменен на метод GET.

Примечание: Некоторые веб-приложения могут использовать308 Permanent Redirect нестандартным способом и для других целей.Например, Google Диск использует ответ 308 Resume Incomplete, чтобы указать клиенту, когда незавершенная загрузка остановилась. (ссылка)

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