文章目录
- 1. ForwardedHeaders
- 1.1 场景
- 1.2 关键的HTTP头
- 1.3 核心处理要点
1. ForwardedHeaders
1.1 场景
- 获取用户IP
- 获取用户请求的原始URL
1.2 关键的HTTP头
- X-Forwarded-For
- X-Forwarded-Proto
- X-Forwarded-Host
1.3 核心处理要点
- 设置PathBase
- 设置ForwardedHeaders中间件
- 设置受信任的网关或代理的IP段
public void ConfigureServices(IServiceCollection services)
{
...
services.Configure<ForwardedHeadersOptions>(options =>
{
// 默认情况下ForwardedHeadersOptions有默认的设置和代理,这里要清除掉
options.KnownNetworks.Clear();
options.KnownProxies.Clear();
options.ForwardedHeaders = ForwardedHeaders.All;// 允许输出所有类型头
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (Configuration.GetValue("USE_PathBase", false))
{
app.Use((context, next) =>
{
context.Request.PathBase = new PathString("/mobile");
return next();
});
}
if (Configuration.GetValue("USE_Forwarded_Headers", false))
{
app.UseForwardedHeaders();
}
// 通过上述两段代码就可以使应用程序正确感知到用户的原始响应,默认情况下应用程序是没有开启这两段设置的
}
// 控制器测试
[HttpGet]
public IActionResult ShowRequestUri()
{
return Content(Request.GetDisplayUrl());
}
[HttpGet]
public IActionResult ShowHeaders()
{
var sb = new System.Text.StringBuilder();
foreach (var item in Request.Headers)
{
sb.AppendLine($"{item.Key}:{item.Value}");
}
return Content(sb.ToString());
}
UseForwardedHeaders 作用是将当前的请求X-Forwarded-Header应用到HTTP Context上,作用是是应用程序在组装当前的请求地址时使用到正确的地址文章来源:https://uudwc.com/A/BrYG4
通过以上设置,应用程序输出真实的请求地址,网关中不需要设置文章来源地址https://uudwc.com/A/BrYG4