【微服务部署】04-ForwardedHeaders

文章目录

    • [1. ForwardedHeaders](#1. ForwardedHeaders)
      • [1.1 场景](#1.1 场景)
      • [1.2 关键的HTTP头](#1.2 关键的HTTP头)
      • [1.3 核心处理要点](#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上,作用是是应用程序在组装当前的请求地址时使用到正确的地址

通过以上设置,应用程序输出真实的请求地址,网关中不需要设置

相关推荐
JQLvopkk1 小时前
能用C#开发AI
开发语言·人工智能·c#
郝学胜-神的一滴2 小时前
当AI遇见架构:Vibe Coding时代的设计模式复兴
开发语言·数据结构·人工智能·算法·设计模式·架构
芭拉拉小魔仙7 小时前
企业级Vue项目的状态管理:从原理到实战架构
前端·vue.js·架构
游乐码9 小时前
c#类和对象
开发语言·c#
马士兵教育10 小时前
程序员简历如何编写才能凸显出差异化,才能拿到更多面试机会?
开发语言·后端·面试·职场和发展·架构
SailingCoder11 小时前
【 从“打补丁“到“换思路“ 】一次企业级 AI Agent 的架构拐点
大数据·前端·人工智能·面试·架构·agent
OpenTiny社区11 小时前
Angular Module→Standalone 架构进化解析
前端·架构·angular.js
无心水12 小时前
5、微服务快速启航:基于Pig与BladeX构建高可用分布式系统实战
服务器·分布式·后端·spring·微服务·云原生·架构
沃码12 小时前
【Lively Wallpaper 】插件开发:LivelyProperties.json 全流程实战教程
c#·json·livelywallpaper·视频壁纸
rolt16 小时前
DDD岁月史书之二:分层架构是DDD提出的吗
架构·产品经理·uml·领域驱动设计