如果浏览器请求http://site.com/?q=abc
并获取301
位置http://site.com/?q=ABC
的重定向响应(请注意查询字符串的情况)
浏览器是否可以忽略大小写并重新请求http://site.com/?q=abc
,从而导致无限重定向循环?
这是根据IIS日志似乎发生的情况。它似乎与 Internet Explorer 隔离,安装了 Ask工具栏的某些变体(基于用户代理值)。我甚至安装了Ask工具栏,但无法以任何方式重新创建此场景。
我无法发布源代码,但对于那些想要的东西,这里是一般逻辑:
Page_Load(object sender, EventArgs e)
{
var q = Request.QueryString["q"];
if (q == "ABC")
{
//render page as usual
}
else
{
Response.RedirectPermanent("[thispage]?q=ABC");
}
}
正如您所看到的,如果使用?q=abc
请求此页面,它将被重定向一次,但随后会像往常一样呈现,因为重定向会转到?q=ABC
。
是否有任何情况下浏览器(特别是带有Ask工具栏的IE)可以忽略重定向位置的情况,导致无限循环?
答案 0 :(得分:1)
我讨厌回答我自己的问题,但这可能是关闭循环的最好方法。过度重定向实际上是由我发布的代码导致的不。我被骗了。
我们有一个HttpModule,具有讽刺意味的是,使用了this answer中提到的代码。事实证明,在IE上安装某些版本的Ask.com工具栏会修改用户代理字符串以包含“Ask”,从而导致此“IsCrawler”检查程序出现误报。
因为在这些情况下'IsCrawler'被评估为true,所以执行了导致无限重定向循环的不同代码路径。更改了查询字符串大小写的结果,而不是Web浏览器忽略我所询问的位置标题。
由于我甚至没有真正回答我的问题,如果有人可以发布一个有点权威的答案,说明是否有任何已知的浏览器或情景按照我的要求行事,我会将其标记为接受了答案。
答案 1 :(得分:0)
听起来Ask工具栏正在将自己注入到IE正在使用的请求/响应周期中。我从来没有开发过工具栏,但我认为它非常标准,因为工具栏一直用于劫持URL输入。如果它在实际重定向之前进行了一些内部分析,我可以看到一些粗略编写的代码进行不区分大小写的比较。
我希望您已找到明显的解决方法,例如转发到?qq=ABC
并让您的目标网页使用q
或qq
。