浏览器在响应重定向时是否会忽略位置标题的区分大小写?

时间:2010-09-03 18:33:05

标签: asp.net browser redirect

如果浏览器请求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)可以忽略重定向位置的情况,导致无限循环?

2 个答案:

答案 0 :(得分:1)

我讨厌回答我自己的问题,但这可能是关闭循环的最好方法。过度重定向实际上是由我发布的代码导致的。我被骗了。

我们有一个HttpModule,具有讽刺意味的是,使用了this answer中提到的代码。事实证明,在IE上安装某些版本的Ask.com工具栏会修改用户代理字符串以包含“Ask”,从而导致此“IsCrawler”检查程序出现误报。

因为在这些情况下'IsCrawler'被评估为true,所以执行了导致无限重定向循环的不同代码路径。更改了查询字符串大小写的结果,而不是Web浏览器忽略我所询问的位置标题。

由于我甚至没有真正回答我的问题,如果有人可以发布一个有点权威的答案,说明是否有任何已知的浏览器或情景按照我的要求行事,我会将其标记为接受了答案。

答案 1 :(得分:0)

听起来Ask工具栏正在将自己注入到IE正在使用的请求/响应周期中。我从来没有开发过工具栏,但我认为它非常标准,因为工具栏一直用于劫持URL输入。如果它在实际重定向之前进行了一些内部分析,我可以看到一些粗略编写的代码进行不区分大小写的比较。

我希望您已找到明显的解决方法,例如转发到?qq=ABC并让您的目标网页使用qqq