如何从Location头构造URI?

时间:2018-04-30 07:32:43

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

对" http://fakedomain.com/my/abc/redirect.php?url=www.example.com"的GET请求URL结果显示在以下响应标头

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 " ?

为什么会像这样构建网址?

1 个答案:

答案 0 :(得分: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标题字段在某些响应中用于引用a      与响应相关的特定资源。的类型      关系是由请求方法和      状态代码语义。

 Location = URI-reference
     

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

URI-reference概念在RFC 3986中定义如下(突出显示是我的):

  

4.1. URI Reference

     

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

 URI-reference = URI / relative-ref
     

URI-reference是URI或相对引用。 如果     URI-reference的前缀与后面的方案的语法不匹配     通过冒号分隔符,URI引用是一个亲戚     参考。 [...]

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

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

  

4.5. Suffix Reference

     

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

 www.w3.org/Addressing/
     

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

     

虽然这种使用后缀引用的做法很常见,但它     应尽可能避免,不应使用     预计会有长期参考的情况。启发式     上面提到的将随着时间的推移而改变,特别是在新的URI方案时     变得流行,并且在脱离背景使用时经常是不正确的。 [...]

     

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