覆盖HTTP 301响应

时间:2017-01-17 20:31:50

标签: http browser-cache

我在网站上有两页。最初/a返回301重定向到/b。我更改了网页,以便/b现在返回301重定向到/a(现在有内容而不是/b)。我看到的行为是浏览器使301从/a无效到/b,并将其替换为从/b/a的新301,从而阻止了重定向循环。

我想确认我在当前浏览器(Chrome,Firefox,IE和Edge)中看到的行为被理解为正确行为。我看过RFC 2616,但据我所知,它并没有覆盖这个角落的情况。任何人都可以确认这是规范所定义的行为,还是已经确立的先例(即浏览器多年来一直表现这种行为)?

有关详细信息,我正在处理的具体案例是主动将HTTPS重定向到HTTP的页面。我想反转这个以强制HTTPS。就我而言,/a/b实际上是同一页面,只是通过不同的协议访问。

修改

RFC 2616的

Section 10.3说:

  

客户端应该检测无限重定向循环,因为这样的循环会为每次重定向生成网络流量。

我猜这是我所看到的缓存破坏行为的指导原则。关于行为是否符合规范,或者只是唯一有意义的事情,仍然不是一个可靠的答案。

修改2

RFC的另一个相关位(Section 13.12

  

如果在缓存同一资源的任何现有响应时从资源收到新的可缓存(请参阅第14.9.2节,第13.2.5节,第13.2.6节和第13.8节)响应,则缓存应该使用新响应来回复对当前的要求。它可以将它插入到缓存存储器中,如果满足所有其他要求,可以使用它来响应以前导致旧响应返回的任何未来请求。如果它将新响应插入缓存存储,则应用第13.5.3节中的规则。

根据我发布的部分,似乎我看到的行为是规范建议的,如果没有完全拼写出来的话。

1 个答案:

答案 0 :(得分:0)

RFC 7231超文本传输​​协议(HTTP / 1.1)的

Redirection 3xx section:语义和内容定义了这种行为。相关摘录:

  

客户应该检测并干预周期性重定向(即,      "无限"重定向循环)。

     

注意:此规范的早期版本建议使用    最多五次重定向([RFC2068],第10.3节)。内容    开发人员需要意识到一些客户可能会实现这样的    固定的限制。