对我的问题的评论感到困惑/受到启发搜索引擎是否尊重 HTTP 标头字段“Content-Location”?,我想知道,Content-Location
HTTP 中的 header 字段的确切用途是什么以及如何使用它。
4 回答
作为对 GET 请求的响应,当请求的资源具有多种可用的表示形式(例如多种语言)时,可以使用 HTTP 中的 Content-Location。返回的资源的选择将取决于原始 GET 请求中的 Accept 标头。
通常,Content-Location 标头中指定的位置与原始请求的 URI 中指定的位置不同。
响应 PUT 或 POST 请求,
- 如果 Content-Location URI 与请求的 URI 不同,则指定 URI 处的缓存条目无效。(见https://www.rfc-editor.org/rfc/rfc7234#section-4.4和https://www.rfc-editor.org/rfc/rfc2616#section-13.10)
- 如果 Content-Location URI 与请求的 URI 相同,那么这向缓存表明对 PUT/POST 请求的响应与在同一位置对 GET 请求的 200 响应将收到的响应相同因此可以被缓存。(请参阅https://www.rfc-editor.org/rfc/rfc7231#section-3.1.4.2)请注意,Firefox 和 Chrome 似乎没有实现这一点。
Content-Location HTTP 标头应该声明用于响应 HTTP GET 的资源的唯一位置(例如 request was 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
这是因为 RFC 2616 第 14.14 节说“Content-Location 的值还定义了实体的基本 URI”。简而言之,一个兼容的用户代理将使用 Content-Location 标头计算获取的文档的 BASE URL,如果获取的文档没有定义 BASE url 并且实际获取的 URL 和 Content-Location 差异足够大,这可能会导致使用不同的相对 URL (URL 的“目录”/“路径”部分不同)。
此外,我还没有看到使用 HTTP Content-Location 的任何优势(我曾经希望这可以用于提示永久书签位置,以防当前查看的 URL 不稳定,例如 domain.com/news/latest 但情况似乎并非如此)。
我目前的建议是忘记 HTTP 的 Content-Location,但您可以将它用于 MIME 电子邮件。
当该实体可从与请求资源的 URI 不同的位置访问时,可以使用 Content-Location 实体头字段为消息中包含的实体提供资源位置...
这在AtomPub (RFC 5023, Section 9.2)中使用:
如果创建请求包含一个 Atom 条目文档,并且来自服务器的后续响应包含一个与 Location 标头逐字符匹配的 Content-Location 标头,则客户端有权将响应实体解释为以下内容的完整表示新创建的条目。如果没有匹配的 Content-Location 标头,客户端不得假定返回的实体是已创建资源的完整表示。
如果您有兴趣,请查看 RFC2557: http: //www.faqs.org/rfcs/rfc2557.html以获得更深入的解释。我目前正在为一堂课写这篇文章。它有点旧,但仍然相关。