file_get_contents请求失败处理_SpringCloud Gateway网关处理请求过程中遇到400Bad Request问题解决方案...

大家在使用springcloud自己的gateway作为网关服务时,可能会不小心遇到自定义的Filter处理请求Request报文时出现400的错误,而且这个错误还不是每次请求都必现,额什么意思?难不成你是说请求还时好时坏?bingo!就是这么邪乎,这个问题让我也头疼了好是一阵,but最后还是被我攻克啦(出现问题不解决?可不是我的风格!)!那么在这里就跟大家分享一下此问题的解决思路,如果有帮助到您,还请继续关注我的后续文章,谢谢。

  • 问题描述: 客户端请求网关服务时,当前后两次请求时间间隔大概5分钟内时(超过5分钟经测试发现请求正常),第二次请求会出现400 BadRequest错误!android必现,iOS出现频率较低。
  • 解决思路:
  1. 注释掉除用于处理解密的filter(此filter无法注释掉,因为客户端正常请求必须要经过此filter处理,否则将出现无法访问的网关内部异常错误)之外的所有自定义filter,目的是排除法查找是否由于某一个filter写法存在问题所导致。-结论:仍出现400,定位问题失败!
  2. 回顾问题描述,因为不是每次请求都会出现400,同时5分钟为一个关键时间周期,认为可能需要设置请求时间参数,但检查后确认在使用的框架中无此功能,故决定升级Springcloud和SpringBoot到最新版( Hoxton.RELEASE、SpringBoot2.2.4),目的是确认是否是因为框架自身版本低的bug所导致。-结论:仍出现400,定位问题失败!
  3. 以上思路1和2均验证失败后,最终尝试将问题定位到思路1中无法注释掉的用于处理解密的filter。采取排除法将此filter中的代码依次注释掉定位是由于哪个位置导致的400。-结论:发现问题所在位置,是由于接收到的请求没有Content-Type项,导致走到了默认的返回Mono.empty()。
  • 解决方案:

采用设置双保险策略。 设置保险1:为了提高处理效率,当前filter解密报文之前就进行判断,针对Content-Type等于null的情况,直接return chain.filter(exchange),交由下一个filter处理,filter链条继续。 设置保险2:针对类似Content-Type等于null的特殊异常情况,在研究Mono类的用法时发现,存在Mono.empty()、Mono.just()、Mono.JustorEmpty()共计三种方法,故使用Mono.JustorEmpty(data),通过判断data是否为空,来执行empty或者执行正常的just(data不为空执行just),走完如场景重现(见下文)中的index=6之后余下所有的filter,直到执行完成,正常结束所有filter处理。

  • 解决效果: 策略应用后经测试没再出现400的情况,但是出现问题的原理有待进一步分析。
  • 问题原理: 客户端请求网关时,经过Filter处理时,由于接收到的请求headers中会出现Content-Type为null的情况(这个就需要客户端的兄弟们检查一下请求接口中是否有漏传的情况啦),从而导致原有的filter中判断条件不满足,因为之前没有遇到Content-Type等于空的情况,所以Content-Type为空的时候默认就给他返回了Mono.empty(),执行了Mono.empty()之后,就认为所有的filter都执行完成了,filter链条处理结束。但是实际上,Content-Type等于空的时候,只执行到了如场景重现(见下文)中索引index=6的filter,此时filter链条并没有执行完成,直接结束就出现了400。
  • 场景重现: 当前filter中判断到Content-Type为null,执行chain.filter(exchange),debug断点跟踪,如下图所示,解密filter的index=5,经过执行后现在已切换到了下一个filter即index=6,紧接着执行chain.filter(exchange)后面的Mono.empty(),从而导致filter链条提前结束,出现400。

8d2a5264fe398bac54eb2199d6365174.png

好了,说到这里就先暂时告一段落啦,希望我的答疑能够帮助到大家!武汉加油!加油中国 !

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512320.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSDN企业数字化之路 ——「低代码」发展研讨会北京站现场实录大放送

作者 | 千鸟 出品 | CSDN云计算(ID:CSDNcloud) 2021年底,CSDN面向行业开发者和高校学生开发者,展开了关于“低代码”的开发者调研活动。基于调研数据,CSDN提出了对低代码发展趋势的五大方向。在随后举行的 …

MaxCompute 存储设计

简介: 存储策略该怎么设计 写这篇存储规划的文章主要是想告诉大家该如何给存储做一个规划,在关系数据库的时代存储昂贵且珍惜,掰手指头花钱是存储规划的常态。但是到了大数据时代大家又立即就都变成印美元的美国政府了,感觉存储很…

Serverless Devs 2.0 开箱测评:Serverless 开发最佳实践

简介: 当下,Serverless 概念很火,很多同学被 Serverless 的优势吸引过来,比如它的弹性伸缩,免运维,高可用,资费少。但真正使用起来去落地的时候发现问题很多,大型项目如何组织函数&a…

【CDS技术揭秘系列 总篇】阿里云的云定义存储来了

简介: 全新发布的云定义存储 CDS 和传统的存储阵列、分布式存储、软件定义存储的区别在哪里?阿里云存储团队如何看待将来存储的发展趋势?本文邀请了 CDS 研发团队的核心技术负责人为大家揭开围绕着阿里云 CDS 的种种谜团。 云定义存储&#…

TSDB时序数据库时序数据压缩解压技术浅析

简介: 目前,物联网、工业互联网、车联网等智能互联技术在各个行业场景下快速普及应用,导致联网传感器、智能设备数量急剧增加,随之而来的海量时序监控数据存储、处理问题,也为时序数据库高效压缩、存储数据能力提出了更…

Atmosic推出ATM33新品,全新的ATM33系列性能大升级

为减少各种物联网产品高昂的电池更换成本,以及降低对环境的危害,在上个月举行的媒体发布会中,Atmosic营销及业务拓展副总裁 Srinivas发布了公司的新产品——ATM33,并详细解析了ATM33的技术特性和主要应用领域。 ATM33系列产品可支…

什么是低代码(Low-Code)?

简介: 什么是低代码?我们为什么需要低代码?低代码会让程序员失业吗?本文总结了低代码领域的基本概念、核心价值与行业现状,带你全面了解低代码。 阿里云 云原生应用研发平台EMAS 彭群(楚衡) 一…

php用wordanalysis抓取姓名_利用vba查询/抓取 外部数据

考虑这么一个excel文件,路径为:"E:dataEdata.xlsx",样式如封面图片所示想要在其他excel文件中,通过代码直接抓取Edata.xlsx中想要的数据,做法如下:先在Visual Basic中勾选“工具-引用-Microsoft …

如何加速云原生数据应用?这个开源项目备受关注

简介: 自2020年9月Fluid正式对外开源,发展短短一年时间, Fluid 便一次获得两项开源界的重要认可,证明着其所专注的云原生、AI 领域也正在迎来广泛关注。这其中的意义和价值如何?我们尝试管中察豹,从 Fluid …

使用 Cilium 增强 Kubernetes 网络安全

作者 | Addo Zhang来源 | 云原生指北TL;DR在本篇,我们分别使用了 Kubernetes 原生的网络策略和 Cilium 的网络策略实现了 Pod 网络层面的隔离。不同的是,前者只提供了基于 L3/4 的网络策略;后者支持 L3/4、L7 的网络策略。通过网络策略来提升…

内含干货PPT下载|一站式数据管理DMS关键技术解读

简介: 深入解读实时数据流、库仓一体数据处理等核心技术 “数聚云端智驭未来”——阿里云数据库创新上云峰会暨第3届数据库性能挑战赛决赛颁奖典礼已圆满结束,更多干货内容欢迎大家观看峰会直播回放。 峰会直播回放📎数聚云端 智驭未来——…

好饭不怕晚,扒一下 Redis 的配置文件

作者 | 阿Q来源 | 阿Q说代码在往期的文章中我们已经对Redis的概念和基本命令进行了讲解,今天我们来看下它的配置文件,Redis的配置文件在我们的开发和实际应用中起着非常重要的作用。我们可以在安装目录下找到redis.conf配置文件,通过vim命令进…

ICBU可控文本生成技术详解

简介: 文本生成(Text Generation)是自然语言处理(Natural Language Processing,NLP)领域的一项重要且具有挑战的任务。顾名思义,文本生成任务的目的是生成近似于自然语言的文本序列,…

云拨测助力节卡机器人 全面优化海外网站性能

简介: 【案例分享云拨测】借助云拨测,节卡机器人有效挖掘性能瓶颈,经过优化,提升网站打开速度 50% 以上,提高了运营推广活动的 ROI,帮助节卡为全球用户提供更加优质的服务! 作者|白…

分享一个巨好用的 HTTP 命令行宝藏工具

作者 | Eason来源 | 程序员巴士HTTPie是一个命令行 HTTP 客户端。它的目标是使 CLI 与 Web 服务的交互尽可能人性化。HTTPie 设计用于测试、调试以及通常与 API 和 HTTP 服务器交互。http 和 https 的命令允许创建和发送任意 HTTP 请求。HTTPie 整体采用简单自然的语法&#xf…

mysql远程备份工具_innobackupex实现MySQL远程备份

一、了解innobackupex1、mysqldumpmysql逻辑备份工具,作用于服务器本地,不需要额外安装插件可以单表备份,备份为sql文件形式、方便,在多个场景通用可通过shell命令实现定时备份,但备份时如果用户有操作,容易…

技术干货 | Native 页面下如何实现导航栏的定制化开发?

简介: 通过不同实际场景的描述,供大家参考完成 Native 页面的定制化开发。 很多 mPaaS Coder 在接入 H5 容器后都会对容器的导航栏进行深度定制,本文旨在通过不同实际场景的描述,供大家参考完成 Native 页面的定制化开发。 欢迎关…

深入理解云计算OpenAPI体系

简介: 就云计算的API来看,当前并没有类似POSIX这样的API标准,基本上各大厂商各自为政。当然,有一些业界主流标准例如OAS获得多数云厂商的支持,但云厂商本身的API却往往由于历史原因、技术路线原因百花齐放,…

Gartner:2025年有效细分市场中过半企业的 IT 支出将转向云

来源 | CSDN云计算 根据Gartner的最新预测,2025年有效细分市场中的企业在公有云计算领域的IT支出将超过传统IT服务支出。 Gartner的“云迁移”研究只包括可以迁移到云的企业IT市场,即应用软件、基础设施软件、业务流程服务和系统基础设施市场。2025年在这…

阿里云容器服务全面升级为 ACK Anywhere,让云的边界拓展至企业需要的每个场景

简介: 2021 年 9 月 26 日上海阿里云计算峰会上,阿里巴巴研究员、阿里云云原生应用平台负责人丁宇宣布,阿里云容器服务全面升级为 ACK Anywhere,让企业在任何需要云的地方,都能获得一致的容器基础设施能力。 此次升级的…