【已解决】Illegal character ((CTRL-CHAR, code 31)) 排查解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【已解决】Illegal character ((CTRL-CHAR, code 31)) 排查解决相关的知识,希望对你有一定的参考价值。

参考技术A 在一次与前端联调中,发现一个新增接口一直报错:

开始的我以为请求参数序列化异常,或者有特殊字符,通过格式后检查,并不是!

通过对请求参数(参数格式为:application/json)的格式化进行检查,发现并没有特殊字符,最主要的是:我本地请求接口也报了这个错 (! - !)!后面一次偶然的尝试,我发现将请求的json列表参数去掉几个,就....成功了~,初步段定:参数过大!

这里需要提一点:我们的项目是使用的微服务架构,采取的DDD模式开发,所有的前端请求必须先通过路由到聚合BFF服务,然后才是将需要的参数请求到后端核心CORE服务。本次的问题:由前端触发,聚合层转发,核心层报错。

通过之前的分析,知道了 Illegal character ((CTRL-CHAR, code 31)) 的问题是因为聚合层往核心层进行过feign调用时参数过大,经过网络传输到达后端服务时数据丢失导致解析失败。所以接下来调整聚合层的feign的压缩配置:

我们项目使用的openfeign,网上有他的官方配置文档: https://docs.spring.io/spring-cloud-openfeign/docs/3.0.3/reference/html/#feign-requestresponse-compression ,如果使用的其他feignClient,可以参考对应的配置文档。

到这里,简单的调整已经结束,按理说应该是OK的,但是并没有。。调用接口仍然报相同的错!!!

随后,进入了茫茫的找解决方案的步骤,这里记录一下我做过的一些尝试:

经过很多尝试,以及网上可靠方案,还是一样报错...此时有点怀疑自己了。。。再之后我突然想到:参数配置没问题,参数配置值是不是有问题?feign请求参数过小导致没有压缩?

之后调整feign压缩的最小阈值: feign.compression.request.min-request-size = 4096 然后就成功!!!真是可喜可贺@@

说实话,这个问题解决起来很简单,相信很多人应该在配置好请求参数压缩配置,应该就happy ending了;我这因为对参数 min-request-size 太信任了所以才有了后续的探索过程。

回到正题,对于feign调用,可以有很多的其他优化参数,这里只针对参数压缩做了一些分享,有兴趣的可以尝试在网关层尝试做手工压缩的方式。这里贴一下完整的配置:

idea创建项目时出现Artifact contains illegal characters的解决方法

idea创建项目时出现Artifact contains illegal characters的解决方法

【现象】

 

【解决方法】

此处无法创建是因为Artifact的命名为大小写混合,将大写改为小写即可正常创建,即

 

以上是关于【已解决】Illegal character ((CTRL-CHAR, code 31)) 排查解决的主要内容,如果未能解决你的问题,请参考以下文章

idea创建项目时出现Artifact contains illegal characters的解决方法

调用Http get 接口报错:java.lang.IllegalArgumentException: Illegal character in query at index 解决办法

调用Http get 接口报错:java.lang.IllegalArgumentException: Illegal character in query at index 解决办法

使用httpclient调用url出现错误Illegal character in scheme name at index 0解决方案

jsp 引用 focus.swf,火狐浏览器报错:SyntaxError: illegal character 如何解决?急

链路追踪 Zipkin+Sleuth 解决 Illegal character in scheme name at index 0: 192.168.100.130:9411/xxx/xx