【微服务部署】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上,作用是是应用程序在组装当前的请求地址时使用到正确的地址

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

相关推荐
Dm_dotnet1 小时前
WPF应用最小化到系统托盘
c#
stark张宇2 小时前
告别Git恐惧症!一套课程搞定Win/Mac/Linux三端配置与核心原理
git·架构·github
radient2 小时前
初识Agent、Prompt、Function Coding、MCP
后端·程序员·架构
jh_cao2 小时前
(3)SwiftUI 的状态之上:数据流与架构(MVVM in SwiftUI)
ios·架构·swiftui
文火冰糖的硅基工坊3 小时前
《投资-93》价值投资者的认知升级与交易规则重构 - 衡量公司价值的本质是在公司的整个存续期间能够创造多少自由现金流,而不是当下有多少现金流。
重构·架构·产业链
*长铗归来*3 小时前
ASP.NET Core Web API 中控制器操作的返回类型及Swagger
后端·c#·asp.net·.netcore
brzhang5 小时前
当我第一次看到 snapDOM,我想:这玩意儿终于能解决网页「截图」这破事了?
前端·后端·架构
R-G-B6 小时前
【06】C#入门到精通——C# 多个 .cs文件项目 同一项目下添加多个 .cs文件
开发语言·c#·c# 多个 .cs文件项目
青衫客3613 小时前
基于 Python 构建的安全 gRPC 服务——TLS、mTLS 与 Casbin 授权实战
python·安全·微服务
可触的未来,发芽的智生16 小时前
触摸未来2025.10.06:声之密语从生理构造到神经网络的声音智能革命
人工智能·python·神经网络·机器学习·架构