如何区分重定向Location头中的相对路径与新域名?
重定向中相对URL与新URL的区分规则及实际处理
判断逻辑
区分重定向指向的是相对路径还是完整新URL,核心看Location头的内容格式:
- 如果
Location值以协议前缀(如http://、https://)开头,这是完整的绝对URI,直接跳转至该地址即可,比如Location: http://baz.htm就会跳转到这个新域名地址。 - 如果
Location值没有协议前缀,那就是相对引用,需按以下三类规则基于当前请求的URI拼接:- 双斜杠开头(如
//other.domain/path):属于网络路径引用,会沿用当前请求的协议(http/https),拼接成对应协议的完整地址。 - 单斜杠开头(如
/baz.htm):属于绝对路径引用,会使用当前请求的协议+域名,拼接成http://foo.bar/baz.htm这类地址。 - 无斜杠开头(如
baz.htm):属于相对路径引用,会基于当前请求的完整路径(含层级)拼接。如果当前请求是根路径http://foo.bar,就拼接为http://foo.bar/baz.htm;如果当前请求是http://foo.bar/sub/,则拼接为http://foo.bar/sub/baz.htm。
- 双斜杠开头(如
你的例子处理
当处于http://foo.bar时,收到Location = baz.htm,这个值既没有协议前缀,也不以斜杠开头,属于相对路径引用,因此应该跳转至http://foo.bar/baz.htm,而非http://baz.htm(后者只有当Location明确写为带协议的绝对URI时才会触发)。
内容的提问来源于stack exchange,提问作者Sim
相关产品推荐
相关产品推荐

