【问题标题】:How the URI on constructed from Location header?如何从 Location 标头构造 URI?
【发布时间】:2018-04-30 07:32:42
【问题描述】:

对“http://fakedomain.com/my/abc/redirect.php?url=www.example.com”URL 的 GET 请求会产生以下响应标头,

HTTP/1.1 302 Found
Date: Mon, 30 Apr 2018 07:39:12 GMT
Server: Apache/2.2.15 (CentOS)
X-Powered-By: PHP/5.3.3
Location: www.example.com
Content-Length: 40
Connection: close
Content-Type: text/html; charset=UTF-8

服务器准备/用户代理如何从这个位置标头准备 URL。

它是否向“www.example.com”发送重定向请求? 或者 它是否向 "http://fakedomain.com/my/abc/www.example.com" 发送重定向请求?

为什么会这样构建 URL?

【问题讨论】:

    标签: http redirect user-agent http-status-code-302


    【解决方案1】:

    它是否向www.example.com 发送重定向请求?还是向http://fakedomain.com/my/abc/www.example.com发送重定向请求?

    请求应该被重定向到http://fakedomain.com/my/abc/www.example.com

    RFC 7231Location 标头说以下内容(突出显示是我的):

    7.1.2. Location

    Location 标头字段在某些响应中用于引用 与响应相关的特定资源。的类型 关系由请求方法和 状态码语义。

     Location = URI-reference
    

    字段值由单个 URI 引用组成。 [...]

    URI-reference 概念在RFC 3986 中定义如下(高亮是我的):

    4.1. URI Reference

    URI-reference 用于表示资源的最常见用法 标识符。

     URI-reference = URI / relative-ref
    

    URI-reference 是 URI 或相对引用。 如果 URI 引用的前缀与所遵循的方案的语法不匹配 通过它的冒号分隔符,那么 URI-reference 是一个相对的 参考。 [...]

    所以www.example.com 应该被解释为relative reference 而不是absolute URI

    www.example.com 情况在RFC 3986 中被描述为suffix reference:它与相对路径引用具有相同的语法,并且不能在需要相对引用的上下文中使用(重点是我的):

    4.5. Suffix Reference

    URI 语法旨在明确引用资源和 通过 URI 方案的可扩展性。但是,作为 URI 标识和 使用已变得司空见惯,传统媒体(电视、广播、 报纸、广告牌等)越来越多地使用 URI作为参考,只包含权限和路径 URI 的一部分,例如

     www.w3.org/Addressing/
    

    或者只是一个单独的 DNS 注册名称。这些参考是 主要用于人类解释而不是机器, 假设基于上下文的启发式方法足以 完成 URI(例如,大多数以 www 开头的注册名称 可能有一个 URI 前缀 http://)。虽然没有 用于消除 URI 后缀歧义的标准启发式方法集,很多 客户端实现允许用户输入它们,并且 启发式解决。

    虽然这种使用后缀引用的做法很常见,但它 应尽可能避免使用,切勿用于 需要长期参考的情况。启发式 上面提到的会随着时间而改变,特别是当一个新的 URI 方案 变得流行,并且在脱离上下文使用时通常是不正确的。 [...]

    由于 URI 后缀与相对路径引用具有相同的语法,因此 后缀引用不能在相对的上下文中使用 需要引用。因此,后缀引用仅限于 没有定义基本 URI 的地方,例如对话框和 线下广告。

    【讨论】:

      猜你喜欢
      • 2014-05-05
      • 2021-11-12
      • 2012-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多