是否可以根据请求在无限循环中设置301

时间:2015-10-18 07:08:09

标签: http redirect language-agnostic

请考虑这种语言不可知。我真的很想知道下面会发生什么。代码在C#中。问题是,我正在尝试获取此URL: 来自代码的https://fr.wikipedia.org/wiki/Monast%C3%A8re_d%27Arkadi。 无论我做什么,我都会得到超过" MaximumAutoRedirects"或"操作 超时"。

C#中的示例代码,虽然我在其他语言中看到类似的结果:

var url = "https://fr.wikipedia.org/wiki/Monast%C3%A8re_d%27Arkadi";
var request = (HttpWebRequest)WebRequest.Create(url);
try
{
    request.CookieContainer = new CookieContainer();
    request.MaximumAutomaticRedirections = Int32.MaxValue;
    request.AllowAutoRedirect = true;
    request.Method = "GET";
    using (WebResponse response = request.GetResponse())
    using (var stream = response.GetResponseStream())
    {
        var reader = new StreamReader(stream);
        var res = reader.ReadToEnd();
    }
}
catch (Exception ex)
{

}

我的问题:

  1. 为什么会发生这种自动重定向?
  2. 是否可以从代码/浏览器中检测到get? (我不知道怎么问这个。我的意思是当从Chrome访问时我得到了URL。但是当从代码执行GET时,我会得到无限的重定向。所以那些GET有任何不同是我的问题)
  3. P.S:这个问题促使我问这个问题。 Why Wikipedia returns 301 response code with certain URL?

1 个答案:

答案 0 :(得分:2)

  

是否可以根据请求在无限循环中设置301?

是。 http服务器可以向您发送一个无限的方案。通常,浏览器将检测到无限重定向循环并停止重定向。服务器端的配置问题可以创建重定向循环。 HTTP客户端应该能够检测到并在经过一定量的重定向后停止(并且request.MaximumAutomaticRedirections = Int32.MaxValue在这种情况下可能过大)

为什么会这样?好吧,错误。您可以在HTTP服务器配置中编写具有无限重定向的规则,HTTP服务器不是编译器,这在服务器端不会被检测到。

或者您可能需要管理很多不同的服务器,并且它们并非都能同时获得最后的配置。在维基百科案例中,可能是某人修复页面的重定向。说你有:

  • A - >乙
  • C - >乙

你将其修复为:

  • A
  • B - > A
  • C - > A

如果任何反向代理缓存在临时缓存中注册了A -> B重定向,或者在所有数据库副本中都没有立即可用(因为维基在应用程序数据库中存储了大量规则),那么...您可以在客户端同时收到A->BB->A个回复。

  

为什么会发生这种自动重定向?

因为你写道:

request.AllowAutoRedirect = true;

请注意,我不是C#专家,但似乎合法。

  

是否可以从代码/浏览器中检测到get?

不确定你要求的是什么。

修改 好的,所以你的问题是如何跟踪浏览器在进行简单GET 时产生的HTTP流量,以及如何跟踪代码中的跟踪信息。

在浏览器上,您有一些本机工具,例如开发工具中的网络选项卡,您可以在其中激活preserve log按钮来跟踪重定向,但是对于简单的重定向,我认为您甚至不需要预先记录日志查看302回复,然后是其他请求。

如果要捕获计算机上的所有HTTP流量,可以始终使用wireshark,这不是很难。或者,您可以通过Fiddler等代理在您的应用程序或浏览器中强制执行所有HTTP流量。