springcloud gateway转发后getServerName被更改的问题

这篇具有很好参考价值的文章主要介绍了springcloud gateway转发后getServerName被更改的问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

=== MimeHeaders ===
accept = */*
knife4j-gateway-code = ROOT
content-type = application/x-www-form-urlencoded
user-agent = Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36
request-origion = Knife4j
origin = http://localhost:7003
sec-fetch-site = same-origin
sec-fetch-mode = cors
sec-fetch-dest = empty
referer = http://localhost:7003/doc.html
accept-encoding = gzip, deflate, br
accept-language = zh-CN,zh;q=0.9
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
forwarded = proto=http;host="localhost:7003";for="[0:0:0:0:0:0:0:1]:1926"
x-forwarded-for = 0:0:0:0:0:0:0:1
x-forwarded-proto = http
x-forwarded-prefix = /biz-core
x-forwarded-port = 7003
x-forwarded-host = localhost:7003
host = 192.168.1.196:8083
content-length = 0

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

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

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

2)设置gateway按原头部进行转发。添加参数PreserveHostHeader:
bootstrap.yml文章来源地址https://www.toymoban.com/news/detail-725305.html

server:
  port: 7003
spring:
  application:
    name: gateway
  cloud:
    nacos:
      default-filters:
        - PreserveHostHeader #发送原主机头
      discovery:
        namespace: public
        server-addr: 192.168.1.196:8848

到了这里,关于springcloud gateway转发后getServerName被更改的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringCloud Gateway解决CROS跨域问题

    目录 一、问题 二、原因 二、解决方法 1、gateway设置允许跨域 2、手动写一个 CorsResponseHeaderFilter 的 GlobalFilter 去修改Response中的头 前端代码访问后端代码时候会出现   这种报错,前端会显示 不允许有多个’Access-Control-Allow-Origin’ CORS头 仔细查看返回的响应头,里面包含了

    2024年01月19日
    浏览(51)
  • 跨域问题以及在springcloud的gateway中解决跨域问题

    跨域问题: 当两个页面的 域名不一致时, 浏览器禁止 请求的发起者与服务端发生跨域 ajax请求 ,请求被浏览器拦截的问题 。 发生跨域问题需要满足的点有:1.两个页面的域名不一致 2.两个页面发生的是ajax请求。 这里不允许跨域是 浏览器禁止的 ! 域名不一致包括 域名不同

    2024年02月16日
    浏览(32)
  • gateway网关导致多重跨域问题The ‘Access-Control-Allow-Origin‘ header contains multiple values

    F12控制台报错:Access to XMLHttpRequest at \\\'XXX from origin \\\' http://localhost:8001\\\' has been blocked by CORS policy: The \\\'Access-Control-Allow-Origin\\\' header contains multiple values \\\' http://localhost:8001, http://localhost:8001\\\', but only one is allowed. 实际后台请求成功了,但是还是显示报错然后发现出现重复headers,标头只能

    2024年02月08日
    浏览(78)
  • SpringCloud + SpringGateway 解决Get请求传参为特殊字符导致400无法通过网关转发的问题

    title: “SpringCloud + SpringGateway 解决Get请求传参为特殊字符导致400无法通过网关转发的问题” createTime: 2021-11-24T10:27:57+08:00 updateTime: 2021-11-24T10:27:57+08:00 draft: false author: “Atomicyo” tags: [“tomcat”] categories: [“java”] description: “SpringCloud + SpringGateway 解决Get请求传参为特殊字符导致

    2024年02月07日
    浏览(45)
  • gateway配置跨域出现响应头重复问题The ‘Access-Control-Allow-Origin‘ header contains multiple values ‘*, *‘, but on

    这里的意思是只允许Access- control - allow - origin包含一个值,但这里有多个值 查看请求信息 可以看到响应标头中确实有多个重复k-v,检查gateway网关配置 可以看到这里配置了一次跨域,查看配置文件,检查对应的controller 可以看到这里也配置了一次跨域,所以出现响应标头k-v重复问题

    2024年02月13日
    浏览(42)
  • nginx转发headers内容丢失解决办法

    开发网关项目时,在请求时往请求头header中放入了签名sign_key信息,在接收请求时再从header中拿出,在本地调试时是可以的,但上线之后通过Nginx代理之后发现拿不到。 nginx代理默认会把header中参数的 \\\"_\\\" 下划线去掉,所以后台服务器后就获取不到带\\\"_\\\"线的参数名。需要在htt

    2024年02月11日
    浏览(64)
  • 【Java】SpringCloud Gateway自定义过滤器中获取ServerHttpRequest的body中的数据为NULL的问题

    这个情况出现在,我需要进行验证码的校验,因此用户的请求首先需要被验证码过滤器校验,而验证码过滤器不需要设定为全局过滤器,因此我就单纯的把它设定为了一个局部过滤器,代码如下 然后我进行请求的时候,json参数如下 然后请求经过解析后会发现,字符串居然是

    2024年02月09日
    浏览(51)
  • nginx 把所有请求转发到另一个端口, 并添加header头,怎么配置

    要将nginx中的所有请求转发到另一个端口,可以使用nginx的 proxy_pass 指令来实现。以下是配置文件示例: 在上述配置中,我们创建了一个服务器块,并监听80端口,这是常见的HTTP请求端口。 server_name 指令用于指定该服务器块适用的域名,你需要将其替换为你的域名。 location

    2024年02月12日
    浏览(35)
  • gateway路由转发

    今天学习的时候看到yml中有关与gateway的配置没看懂 然后就去网上学习了一下,分享我一下我的学习成果吧, gateway可以开启从注册中心转发路由 然后就是有一个routes的配置 这边的 predicates 就是你访问gateway路由端口后的路径,类似于我访问 http://localhost:gateway端口/case/api/sys

    2024年02月12日
    浏览(33)
  • Gateway路由转发,报404错误

    项目使用SpringCloud分为多个微服务,在使用Gateway进行路由转发时,找不到对应的微服务模块,导致返回404报错。 当用户发出请求达到 GateWay 之后,会通过一些匹配条件,定位到真正的服务节点,而 Predicate就是匹配条件 。当满足条件后才会进行转发路由,如果是多个,那么

    2024年02月11日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包