当https请求资源时,为什么缺少“ X-Forwarded-For”和“ Via”标头?

时间:2019-02-15 22:02:08

标签: c# asp.net-core https kestrel x-forwarded-for

我正在构建一个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消失了。我已经使用来自许多不同站点的各种代理进行了测试-结果是相同的。

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

0 个答案:

没有答案