0

我正在构建一个 Asp.Net Core Web 应用程序。我创建了一个以 json 格式返回请求标头的资源。我假设,当我通过透明代理服务器(来自列表https://www.proxynova.com/proxy-server-list/transparent-proxies/)请求此资源时,保证添加 X-Forwarded-For 和 Via 标头要请求,我将在响应的 json 中看到这些标头:

请求: https ://res.cloudinary.com/leninsdo/image/upload/v1550267036/1_vmfx0z.png

回复: https ://res.cloudinary.com/leninsdo/image/upload/v1550267039/2_dtftny.png

但是,当我通过 https 请求具有相同代理的完全相同的资源时,我在响应中看不到这些标头:

请求:https ://res.cloudinary.com/leninsdo/image/upload/v1550267251/3_qlifuv.png

回复:https ://res.cloudinary.com/leninsdo/image/upload/v1550267313/4.png

我使用 Kestrel 作为 Web 服务器,并以这种方式在 Program.cs 中对其进行配置:

WebHost.CreateDefaultBuilder(args)
      .UseKestrel(options =>
      {
           options.Listen(IPAddress.Loopback, 5000);
           options.Listen(IPAddress.Any, 80);
           options.Listen(IPAddress.Any, 443, listenOptions =>
           {
                listenOptions.UseHttps(CertFilename, CertPassword);
           });
      })
      .UseSetting("https_port", "443")
      .UseStartup<Startup>()
      .Build();

控制器中迭代标头并将它们序列化为 json 的代码也很常见,并且似乎不是问题的根源:

List<Header> headers = new List<Header>(); //later returned in json
foreach(var key in context.Request.Headers.Keys)
{
    var values = StringValues.Empty;
    Request.Headers.TryGetValue(key, out values);
    headers.Add(new Header{ //my custom class with two fields - Key and Value
        Key = key,
        Value = (String) Convert.ChangeType(values.ToString(),typeof(String))
    });
}

而且我完全不知道为什么当通过 https 而不是 http 请求资源时,标头 Via 和 X-Forwarded-For 会消失。我已经使用来自许多不同站点的各种代理对其进行了测试 - 结果是相同的。

有人能告诉我为什么会发生这种情况吗?

4

0 回答 0