码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • springcloud gateway转发后getServerName被更改的问题


    该问题起源于一次将代码移植到微服务产生。当使用springcloud gateway更换掉nginx网关后,出现无法登录的情况,跟进发现转发的信息里丢失了Host

    1. === MimeHeaders ===
    2. accept = */*
    3. knife4j-gateway-code = ROOT
    4. content-type = application/x-www-form-urlencoded
    5. user-agent = Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36
    6. request-origion = Knife4j
    7. origin = http://localhost:7003
    8. sec-fetch-site = same-origin
    9. sec-fetch-mode = cors
    10. sec-fetch-dest = empty
    11. referer = http://localhost:7003/doc.html
    12. accept-encoding = gzip, deflate, br
    13. accept-language = zh-CN,zh;q=0.9
    14. cookie = oxygentk=99d0a1b10bdd1443589a3416184d31984ed81136535c2e6498edbae12728f748; oxygenuid=36AB9A653683D50D4EC7E525BD9C96E9; charge-key={%22userId%22:3603%2C%22name%22:%22%E6%96%B0%E6%89%8B3603%E5%95%8A%22%2C%22icon%22:%22https://whalesing-web.oss-cn-guangzhou.aliyuncs.com/appres/forbidden.png%22}; AWX_RISK_ID=f6f3dd72e6cee7611eddf8328462756df97853ca; Hm_lvt_5819d05c0869771ff6e6a81cdec5b2e8=1684128760; Hm_lpvt_5819d05c0869771ff6e6a81cdec5b2e8=1684129236; lang=zh-CN; i_like_gogs=f529fa5db09e7bdd; JSESSIONID=20A183584BD3512F939D5696D56DA14A
    15. forwarded = proto=http;host="localhost:7003";for="[0:0:0:0:0:0:0:1]:1926"
    16. x-forwarded-for = 0:0:0:0:0:0:0:1
    17. x-forwarded-proto = http
    18. x-forwarded-prefix = /biz-core
    19. x-forwarded-port = 7003
    20. x-forwarded-host = localhost:7003
    21. host = 192.168.1.196:8083
    22. content-length = 0

    上面看到host信息已经变成ip地址,而原地址被放到了x-forwarded-host。

    因为request.getHeaders()会优先获得Host的Header,导致了request.getHeaders()的结果和原信息不一致。解决办法有两种

    1)单独获得x-forwarded-for头部信息

    2)设置gateway按原头部进行转发。添加参数PreserveHostHeader:
    bootstrap.yml

    1. server:
    2. port: 7003
    3. spring:
    4. application:
    5. name: gateway
    6. cloud:
    7. nacos:
    8. default-filters:
    9. - PreserveHostHeader #发送原主机头
    10. discovery:
    11. namespace: public
    12. server-addr: 192.168.1.196:8848

  • 相关阅读:
    vue3+Element-plus el-select 下拉选择 多选增加全选封装组件
    人工智能数学课高等数学线性微积分数学教程笔记(4. 多元函数的微分学)
    vscode远程连接开发机失败/解决方案大合集
    基于51单片机的温度控制系统数码管显示蜂鸣器报警proteus仿真原理图PCB
    【django问题集】django.db.utils.OperationalError: (1040, ‘Too many connections‘)
    测试用例设计方法之——招式组合,因果判定
    数据之道读书笔记-06面向“自助消费”的数据服务建设
    ASEMI-KBL410是什么元器件,kbl410整流桥参数
    《重构代码设计》
    你必须知道的Linux基础知识(一)
  • 原文地址:https://blog.csdn.net/applebomb/article/details/134024538
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号