首页 > 其他分享 >案例分享-丢失的请求头

案例分享-丢失的请求头

时间:2024-06-18 09:10:45浏览次数:29  
标签:http 请求 nginx access 案例 token 丢失 链路 分享

 拍摄于富平中华郡  

 

背景

今天组内一个小哥找我协助看一个问题,现象是他开放了一个Api给第三方调用,需要在http中传递一个名字为access_token的头,但是发布到测试环境以后却怎么也获取不到这个头,本地调试是没有问题的,希望协助看看。

排查

http传递头还会出问题,这都是很成熟的东西了,大概率是代码写的有问题。我提出看一眼代码,就一行request.getHeader,也不应该出问题,那是哪里出了问题呢?

“弄清楚请求链路,从外到内,从内到外逐个分析”。

冷静下来分析一番以后我觉得可能是请求链路上的其他节点没有正确传递access_token导致,所以我带着小哥大概梳理了一下请求链路,大致是这样(可能和真实的不同,只是按我了解到的):

浏览器->外网nginx->k8s ingress->springboot服务。

接下来就开始从内到外逐个逐个节点测试分析,找出元凶。

1.先进入springboot服务所属的容器内使用curl 127.0.0.1测试,等于自己访问自己,排除其他节点的干扰,结果是可以正常拿到access_token的值,排除代码问题

curl -H 'access_token: xxxx' http://127.0.0.1:8080/xxx

  

2.进入ingress的容器内依然是curl 127.0.0.1测试,这时的请求链路相当于curl->k8s ingress->springboot服务,目的是验证k8s ingress是否会影响请求头的传递。

#这里有个细节是多加了Host: 域名,至于为什么这里留个思考题
curl -H 'Host: 域名' -H 'access_token: xxxx' http://127.0.0.1:8080/xxx

 

3.以此类推测试&分析。

其实在做完第一步的时候我脑袋里突然闪过了答案(很久之前遇到过,一开始没想起来),后面的步骤就没有进行,写在这里只是想把自己排查这类问题的思路和大伙做一个交流,至于答案是什么我先卖个关子,我接下来先普及一个冷知识。

http请求头规范

https://www.rfc-editor.org/rfc/rfc9110.html#name-field-names

 

 

大概意思是请求头的名称应该是由字母(特指英文字母)、数字、- 组成,最好是以字母开头,还特别说了如果请求头包含_可能带来一些问题,有兴趣的可以去了解,这里就不啰嗦了。

真凶

到这里也许你已经发现了一些端倪,前面提到的access_token不正是包含_吗,从rfc文档来看这个头是不符合规范的,所以就在nginx那里翻了车,一起来看下官网的介绍。

https://nginx.org/en/docs/http/ngx_http_core_module.html#underscores_in_headers

 

解读下这段文字的意思:nginx会将带有_的请求头丢弃,不会往后传递,如果不希望丢弃可以修改underscores_in_headers的值为on或者将ignore_invalid_headers修改为off。

最终处理

1.梳理链路上的nginx,修改underscores_in_headers或者ignore_invalid_headers的值;

2.将access_token修改为access-token,使其符合规范;

最终采用方案2解决,原因很简单,修改请求链路上的参数影响较大,而且不一定能覆盖全,已知的有nginx,保不齐还有slb、iis、apache等,不可控因素太多。

 

 

 

 

标签:http,请求,nginx,access,案例,token,丢失,链路,分享
From: https://www.cnblogs.com/chopper-poet/p/18253203

相关文章

  • 决策树算法介绍:原理与案例实现
    一、引言在机器学习领域,决策树是一种常用且直观的分类和回归方法。它通过一系列简单的决策规则,将数据集分割成更小的子集,最终形成一个树状结构。本文将详细介绍决策树算法的原理,并通过具体案例实现来帮助读者更好地理解和应用这一算法。二、决策树原理1.决策树的基本概念......
  • 更简易、高效的微软Edge-tts库实时详细的经验分享
    Edge-tts是一个利用微软AzureCognitiveServices的在线文本转语音服务的Python库。它允许开发者在Python代码中使用该服务,而无需安装MicrosoftEdge浏览器、Windows操作系统或使用API密钥。这个Edge-tts库通过调用微软Edge浏览器的文本朗读相关API实现文本转......
  • 【专题】2022年建筑近零碳升级白皮书报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=34225原文出处:拓端数据部落公众号近零碳建筑的减碳路径涵盖了近零能耗建筑的技术理念,包括被动式节能和主动式节能,以及建筑整体的智能化和人性化改造。此外,加大新能源系统的建设力度和采用购买国家核证自愿减排量等碳交易方式,也是为了达到满足碳排......
  • Unity制作影视互动游戏视频加密方案分享
    前言随着《完蛋!我被美女包围!》和《美女,别影响我学习》等影视互动游戏的爆火公司最近也有款影视互动项目于是乎就接到了对视频加密的任务毕竟谁也不想直接被拿到几十个G的视频原文件看完直接退款吧于是乎研究了一下当前的加密方案(仅限用Unity原生VideoPlayer播放) 一......
  • Windows11系统Win32_EncryptableVolume.dll文件丢失问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个Win32_EncryptableVolume.dll文件(挑选合适......
  • Windows11系统webview2_integration.dll文件丢失问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个webview2_integration.dll文件(挑选合适的版......
  • Windows11系统webengine4.dll文件丢失问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个webengine4.dll文件(挑选合适的版本文件)把......
  • Windows11系统webview2standalone.dll文件丢失问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个webview2standalone.dll文件(挑选合适的版本......
  • 是否可以从存储闪存卡中恢复数据?如何避免存储卡数据丢失?
    天津鸿萌科贸发展有限公司致力于数据恢复业务二十余年,为政府机构、各类大中型企业、医疗教育部门及个人用户等提供了专业的数据恢复服务,避免了重大损失。存储卡无处不在:智能手机、数码相机、平板电脑和摄像机。它们体积小,方便,并以相对较低的成本提供大量的数据存储空间。但是,......
  • 数实融合创新发展 隆道分享企业级AI应用
    在数字化浪潮的推动下,人工智能(AI)技术正以前所未有的速度改变着各行各业,重塑企业的运营管理模式和创新发展路径。6月14日,数实融合全国行(潍坊站)暨AI企业级应用专题会在山东潍坊成功召开。北京隆道网络科技有限公司总裁吴树贵应邀出席本次会议,并发表了题为“企业级AI研发探索”......