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

Is it possible to set 301 in an infinite loop based on the request

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

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. 是否可以检测到代码/浏览器的获取? (我不知道怎么问这个。我的意思是当从 Chrome 访问时我得到 URL。但是当从代码执行 GET 时,我得到无限重定向。那些 GET 也是我的问题有什么不同)

P.S:这个问题促使我提出这个问题。 Why Wikipedia returns 301 response code with certain URL?

Is it possible to set 301 in an infinite loop based on the request ?

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

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

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

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

然后您将其修复为:

  • 一个
  • B -> A
  • C -> A

如果任何反向代理缓存在临时缓存中注册了 A -> B 重定向,或者如果这在所有数据库副本中都不是立即可用的(因为 wiki 在应用程序数据库中存储了大量规则) ,然后...您可以在客户端同时获得 A->BB->A 响应。

Why this auto re-direct is happening?

因为你写道:

request.AllowAutoRedirect = true;

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

Is it possible to detect a get from code / browser?

不确定您要的是什么。

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

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

如果您想捕获计算机上的所有 HTTP 流量,您可以随时使用 wireshark, which is not so hard. Or you can enforce all your HTTP traffic in your application or browser through a proxy like Fiddler