我正在构建一个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消失了。我已经使用来自许多不同站点的各种代理进行了测试-结果是相同的。
有人可以告诉我为什么会发生这种情况吗?