Какова цель поля заголовка HTTP "Content-Location"?

Смущен / вдохновлен комментарием к моему вопросу. Уважают ли поисковые системы поле заголовка HTTP "Content-Location"? Я хотел бы знать, какова точная цель Content-Location Поле заголовка в HTTP есть и как его можно использовать.

4 ответа

Решение

В ответ на запрос GET, Content-Location в HTTP может использоваться, когда запрошенный ресурс имеет несколько доступных представлений, например, несколько языков. Выбор возвращаемого ресурса будет зависеть от заголовков Accept в исходном GET-запросе.

Обычно местоположение, указанное в заголовке Content-Location, отличается от местоположения, указанного в URI исходного запроса.

В ответ на запрос PUT или POST,

  • Если URI Content-Location отличается от запрошенного URI, то запись в кэше по указанному URI становится недействительной. (см. https://tools.ietf.org/html/rfc7234 и https://tools.ietf.org/html/rfc2616)
  • Если URI Content-Location совпадает с запрошенным URI, то это указывает кэшам, что ответ на запрос PUT/POST совпадает с ответом, который будет получен ответом 200 на запрос GET в том же местоположении. и, таким образом, может быть кэширован. (см. https://tools.ietf.org/html/rfc7231). Обратите внимание, что Firefox и Chrome не реализуют это.

HTTP-заголовок Content-Location должен объявлять уникальное местоположение ресурса, который использовался для ответа на HTTP GET (например, запрос был GET /frontpage HTTP/1.1Сервер может добавить заголовок HTTP Content-Location: http://domain.com/frontpage.english.msie-optimized информирование пользовательского агента о том, что если этот конкретный ответ потребуется позже, следует использовать предоставленное местоположение, поскольку исходное местоположение может зависеть от различных вещей, которые затем должны быть объяснены с помощью "Vary"заголовок).

Однако обратите внимание, что HTTP-заголовок Content-Location проблематичен при использовании в реальном мире, поскольку разные браузеры (пользовательские агенты) обрабатывают его по-разному: http://mail.python.org/pipermail/web-sig/2004-October/000985.html

Это происходит из-за раздела 14.14 RFC 2616, в котором говорится, что "значение Content-Location также определяет базовый URI для объекта". Короче говоря, соответствующий пользовательский агент будет вычислять BASE URL для извлеченного документа с использованием заголовка Content-Location, что может привести к использованию разных относительных URL, если извлеченный документ не определяет URL BASE, а реальный извлеченный URL и Content-Location достаточно различаются (часть URL "directory" / "path" отличается).

Кроме того, я пока не вижу каких-либо преимуществ использования HTTP Content-Location (однажды я надеялся, что это можно использовать для подсказки о постоянном расположении закладки в случае, если просматриваемый в данный момент URL-адрес является изменчивым, например domain.com/news/latest, но похоже, это не так).

Мой текущий совет - забудьте о Content-Location for HTTP, но вы можете использовать его для электронной почты MIME.

Раздел 14.14 RFC 2616 гласит:

Поле заголовка объекта Content-Location МОЖЕТ использоваться для предоставления местоположения ресурса для объекта, заключенного в сообщении, когда этот объект доступен из местоположения, отдельного от URI запрошенного ресурса...

Это используется в AtomPub (RFC 5023, раздел 9.2):

Если запрос на создание содержал документ ввода Atom, а последующий ответ от сервера содержит заголовок Content-Location, который соответствует символьному символу заголовка Location, тогда клиенту разрешается интерпретировать объект ответа как полное представление Недавно созданная запись. Без соответствующего заголовка Content-Location клиент НЕ ДОЛЖЕН предполагать, что возвращенный объект является полным представлением созданного ресурса.

Проверьте RFC2557 по адресу: http://www.faqs.org/rfcs/rfc2557.html для более глубокого объяснения, если вы заинтересованы. В настоящее время я пишу об этом для класса. Это немного старо, но все еще актуально.

Другие вопросы по тегам