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

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

相关推荐
一叶飘零_sweeeet22 分钟前
MySQL高可用生产落地全解:主从同步、MGR集群、读写分离从原理到实战
数据库·mysql·架构·mysql高可用
知识分享小能手32 分钟前
Redis入门学习教程,从入门到精通,Redis集群架构:语法知识点、使用方法与综合案例(6)
redis·学习·架构
l1t38 分钟前
DeepSeek总结的用 C# 构建 DuckDB 插件说明
前端·数据库·c#·插件·duckdb
tianyuanwo39 分钟前
Koji 分布式编译调度机制深度解析:多架构异构节点的资源优化方案
分布式·架构
iReachers2 小时前
恒盾C#混淆加密大师 1.4.5 最新2026版本发布 (附CSDN下载地址)
c#·c#混淆·c#加密·wpf加密·winform加密
源远流长jerry2 小时前
RDMA 技术深度解析:从原理到实践
linux·网络·tcp/ip·架构·ip
Are_You_Okkk_2 小时前
开源知识库的核心技术赋能与企业级落地路径
人工智能·架构·开源
源远流长jerry2 小时前
RDMA 基本元素详解:从 WQE 到 QP 再到 CQ
linux·开发语言·网络·tcp/ip·架构·ip
小江的记录本2 小时前
【VO、DTO、Entity】VO、DTO、Entity三大核心数据对象全解析(附核心对比表 + 代码示例)
java·数据库·spring boot·spring·架构·mybatis·数据库架构
SuniaWang3 小时前
《Spring AI + 大模型全栈实战》学习手册系列·专题一:《RAG技术全景解析:从原理到架构设计》
java·javascript·人工智能·spring boot·后端·spring·架构