目录

问题背景

分析方法

问题原因


问题背景

这个问题来源于我在开启kubectl proxy代理的时候,通过kubectl apply -f xxx.yaml向代理提交一个configMap对象,返回了 "Error while proxying request: invalid character '\x1f' looking for beginning of value" 的报错。

分析方法

我通过打印请求,得到了 kubectl apply -f xxx.yaml 的基本流程:

  • 首先,会发起一个 GET /openapi/v2 的请求
  • 然后会发起一个 POST 请求,并且 body 中内容就是 yaml 文件的内容。

通过查询这个问题出现的原因得知,出现的原因是解析接口返回的字节符切片错误,出现了一堆乱码。解析失败是因为请求在 Header 里加入了Accept-Encoding: gzip,导致返回的结果被 gzip 压缩,然后返回的结果无法通过正常的 ioUtil.ReadAll(rsp.Body) 取出的内容去反序列化。

具体的解决手法参考见 invalid character '\x1f' looking for beginning of value

问题原因

沿着这个思路,我在开启的代理代码里面发现了一段返回结果的拦截

func (mtp *MyTransport) RoundTrip(req *http.Request) (*http.Response, error) {rsp, err := mtp.RoundTripper.RoundTrip(req)if err != nil {return nil, err}defer rsp.Body.Close()b, err := ioutil.ReadAll(rsp.Body) //读取后,rsp body内容将就空了。需要重新赋值回去if err != nil {return nil, err}//序列化对象obj := unstructured.Unstructured{}if err = obj.UnmarshalJSON(b); err == nil {addCustomColumn(&obj, req)b, err = obj.MarshalJSON()if err != nil {return nil, err}} else {return nil, err}rsp.Body = ioutil.NopCloser(bytes.NewReader(b)) //tips 给body赋值的方法fmt.Println("响应对象类型:" + obj.GetKind())rsp.Header.Set("Content-Length", strconv.Itoa(len(b))) //这个很重要,如果修改了body内容需要重新计算长度return rsp, nil
}

原因是因为我需要在 kubectl get xxx 的时候对返回的结果反序列后修订内容,再序列化后返回。

参考网上的解决方法,方法一是删除 Header 中的 Accept-Encoding: gzip,方法二是添加一段读取 gzip 压缩内容 Body 的代码

if req.Header.Get("Accept-Encoding") == "gzip" {gr, err = gzip.NewReader(rsp.Body)if err != nil {return nil, err}
}

两种方法都没能成功,同样返回 "invalid character '\x03' looking for beginning of value"。

最后想到了,我其实并不需要为 /openapi/v2 这类的请求加工处理返回结果,所以只要跳过反序列化就可以,因此在 RoundTrip 中加入

//针对openapi做处理
if regexp.MustCompile(OpenApiPattern).MatchString(req.RequestURI) {return rsp, nil
}

最后 kubectl apply -f xxx.yaml 测试 ,通过。

“invalid character ‘\x1f‘ looking for beginning of value“ 报错解决方法相关推荐

  1. 导入 SQL 时出现 Invalid default value for ‘create_time‘ 报错解决方法

    导入 SQL 时出现 Invalid default value for 'create_time' 报错解决方法 参考文章: (1)导入 SQL 时出现 Invalid default value ...

  2. fatal: --author 'invalid author' is not 'Name email' and matches 报错解决

    fatal: –author 'invalid author' is not 'Name ' and matches 报错解决 一般修改一下用户名和邮箱就可以了 //git 修改当前的project的 ...

  3. Dangling meta character '+' near index 0 + 报错 解决方法

    1.split方法转化字符串为数组: String[] str=reader.readLine().split("+"); 报错: Exception in thread &quo ...

  4. docker 报错 error: invalid character ‘\x00‘ looking for beginning of value

    执行docker build的时候报错:error: invalid character '\x00' looking for beginning of value. 环境: Docker versi ...

  5. UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xc0 in position 0: invalid start byte报错解决

    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc0 in position 0: invalid start byte报错解决 这个错误一 ...

  6. tomcat配置SSL报错解决:java.lang.IllegalArgumentException: Invalid character (CR or LF) found in method nam

    使用CAS单点登陆时,在tomcat的server.xml中配置了https协议的证书认证,但访问时报错: INFO [http-nio-8443-exec-4] org.apache.coyote. ...

  7. 导入sql时出现Invalid default value for ‘create_time‘报错处理方法

    (上图是初始的sql文件的内容) 在开发微信小程序时,需要导入.sql文件,但是最一开始导入的时候没有任何改动进行了导入,报错如下 PS E:\weichatApp\my-project\server ...

  8. Python-logging报错解决:UnicodeEncodeError: 'gbk' codec can't encode character '\u' in position: illegal

    我在Python3 中使用Logging模块把日志打到终端输出时会报错. 代码如下: import logging logging.basicConfig(level=logging.INFO,fil ...

  9. Maven报错解决:Element 'dependency' cannot have character [children], because the type's content type is

    在用maven的时候遇到报错: Element 'dependency' cannot have character [children], because the type's content ty ...

最新文章

  1. ThreadLocal可以解决并发问题吗
  2. b站上java和python视频可以吗_b站有哪些好的java视频?
  3. Python类与对象技巧(1):字符串格式化、封装属性名、可管理的属性、调用父类方法
  4. 【数据竞赛】5行代码提升GBDT,提升巨大!
  5. 操作系统页面置换算法
  6. Linux下如何定位Java进程CPU利用率过高原因
  7. HTML5 API详解(3):为何网页上要增加Battery电池状态API
  8. Apache服务器的下载与安装
  9. 页面跳转与重定向(之一)
  10. 多数人只有一种工资收入,想赚更多钱,只有去做副业
  11. 一组数字1-n,随机取走3个,求被取走的数【腾讯前端面试题】
  12. android studio for android learning (十) android之activity的启动和关闭
  13. 【Gym-101775 J】Straight Master【差分、贪心】
  14. Matlab图像处理系列2———空间域平滑滤波器
  15. 边缘计算是什么 优点
  16. android 绘制分割线,Android 布局中分割线创建的三种方式
  17. 计算机指法标准,标准盲打指法练习
  18. 利用Python解决利率相关计算问题(利率计算器):本金翻倍,定期取款,多重利率,通货膨胀等问题
  19. 一个很不错的C++类的练习题目
  20. android传屏器怎么获取热点,手机做热点怎么投屏 为你介绍投屏的方法

热门文章

  1. 扫描发送找不到计算机,win7系统找不到扫描仪怎么办 win7系统找不到扫描仪解决方法...
  2. column-count瀑布流实现左右顺序
  3. JAVA算法练习(5):错误票据
  4. ssh: connect to host gitlab.rails.cn port 22: Connection timed outfatal: Could not read from remote
  5. dyld: Library not loaded:
  6. 深度学习中的数学公式(二:线性代数、概率论、数理统计相关公式)
  7. 2020 ICPC 昆明站 I(Mr. Main and Windmills)
  8. 全运会开幕-天翼云全力打造“智慧赛事”
  9. NOJ 1145.求图像的周长
  10. 北京面授python培训机构