使用相对位置标题有什么后果?


17

根据规范,重定向中使用的Location标头需要服务器名称

HTTP/1.1 301 Moved Permanently
...
Location: http://example.com/foo/baz/bar

但是,在2012年,大多数Web浏览器将识别相对路径,并使用原始服务器名称将您重定向到新位置

HTTP/1.1 301 Moved Permanently
...
Location: /foo/baz/bar

使用Location标头中的相对URL是否有负面/令人惊讶的后果?我特别关心的是Google /搜索引擎将如何解释这一点,但是如果有其他任何我不介意的事情,我很乐意听到。


您能否引述您从中获得该要求的确切信息?没有挑战性,我只是没有立即看到它,也不希望阅读整个RFC来找到它。另外,您引用的是HTTP 1.0规范,但在示例中使用了HTTP 1.1标头。(其可以或可以不改变允许的内容。)
苏”

10.11节。tools.ietf.org/html/rfc1945#page-44据 我所知,在1.1规范中也没有任何东西可以“解决”此问题。
艾伦·斯托姆

Answers:


15

根据HTTP / 1.1标准的当前版本RFC 2616,Location标头的值必须是绝对URI

然而,在标准草案通过编写HTTPbis工作组最终取代RFC 2616,这已被更改为允许相对URI为好,这显然是因为

“ [RFC 2616中的Location标头的定义在各种方式上有所不同,至少Web浏览器需要如何处理它们才能与Web内容进行互操作”

实际上,AFAIK几乎所有主要的浏览器和搜索引擎都可以理解并接受对相对URL的HTTP重定向。但是,直到有一天HTTPbis草案成为正式标准并被广泛采用之前,总会有一些新的或晦涩难懂的用户代理对信件执行当前标准,并且仅接受绝对URL。因此,目前安全的做法是Location,按照Postel定律的建议,仅在标头中使用绝对URL :

“对发送的内容要保守,对接收的内容要宽松。”


3
RFC 2616现在已被7231淘汰,它允许Location标头中的相对URL。因此,按字母执行标准的用户代理现在将接受相对URL
ZoFreX

6

HTTP 1.1 RFC http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.30的第14.30节没有明显不同。我不知道您会对此有任何实际的实际限制。

我唯一看到过关于此问题的警告是,当我以前在Lynx中进行测试并且位置不是绝对的时,它会警告您“位置值不是绝对的”-但是,如果我没记错的话,它仍然会让您走到新位置。我刚刚测试了Lynx 2.8.7,尽管它可能是配置问题,但看起来它不再这样做了。

现在,您说:

我特别关心的是Google /搜索引擎将如何解释这一点,但是如果还有其他我想不到的事情,我很想听听。

我相信这值得测试。我将设置一个url,将其放在您网站的xml sitemap中,并按照您的描述将该url作为重定向。我认为要做的是使用Google网站站长工具检查它,看看是否有负面影响。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.