前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >我发现了知乎的一个bug!

我发现了知乎的一个bug!

作者头像
轩辕之风
发布2024-07-01 12:51:28
830
发布2024-07-01 12:51:28
举报
文章被收录于专栏:编程技术宇宙编程技术宇宙

大家好,我是轩辕。

前段时间,一位粉丝微信上给我发了一个图,图片是一个知乎文章的截图,内容显示乱码,怀疑是微信bug:

随后他把这个链接发给了我:

https://www.zhihu.com/column/c_1663245806869291008

我这边用Chrome浏览器发现能正常打开:

但奇怪的是,我换了另一台机器,打开确实出现了乱码的情况:

事情确实有点蹊跷,我对比了两边的接口通信情况,发现两边对www.zhihu.com这个域名解析的IP地址不一样:

难道是因为这个原因,于是我尝试改host,让乱码的机器上域名解析的结果也和正常显示的机器保持一致,结果发现依然乱码:

好吧,看来跟IP无关。

对于乱码问题,一般情况下,会怀疑浏览器因为编码问题渲染出错。咱们不管啥编码不编码的,我们直接来抓个包来看看正常和乱码两种情况下,服务器返回的数据:

下面是我用wireshark抓包,正常显示时候,服务器返回的内容:

注意看上面网页标题:AMBA学习对应的十六进制数据流是41 4d 42 41 e5 ad a6 e4 b9 a0,其中学习两个汉字对应的是e5 ad a6 e4 b9 a0,这是UTF-8编码,一个汉字占3个字节。

然后是乱码情况下,服务器返回的内容:

可以看到,服务器确实返回了不一样的内容,乱码的AMBA聪贩对应的十六进制数据流是41 4d 42 41 e8 81 aa e8 b4 a9,其中聪贩两个汉字对应的是e8 81 aa e8 b4 a9

所以,并不是因为浏览器原因导致渲染出错,浏览器不应该背这个锅。

经过我反复尝试,发现这并不是一个偶发性的bug,只要是新的浏览器或者无痕模式下,都能稳定性复现这个问题。

既然如此,那服务器是如何决定什么时候返回正常的,什么时候返回乱码的呢?因为并不随机啊!

那问题只能出在客户端的请求上。

然后我又仔细对比两边的请求头有啥不一样,发现正常显示的这边,会有一堆的cookie值。

于是我决定用Python,写段代码自己来请求这个URL。当不带cookie的情况下,直接请求,内容果然是乱码的。

而当携带cookie之后,内容正常了(注意上面说过,正常显示的时候,学习对应的十六进制数据流应该是e5 ad a6 e4 b9 a0):

看来锅在Cookie这里!那这么多Cookie值,问题出在哪一个呢?

我尝试一个个排查,最终锁定了这个名叫__zse_ck的Cookie:

当存在这个Cookie的时候,就不会乱码了,这又是什么原因呢?这就要取决于知乎后端的逻辑了。

我问了一下ChatGPT可能的原因:

而且大家注意这个乱码它是随机的,并不是每次都一样,这就更疑惑了。

进一步我发现,这并不是这个URL的问题,而是知乎所有专栏都有的问题,比如我自己的专栏:

当采用无痕模式打开的时候:

而且只有这个页面乱码,点具体每一个文章进去都是正常的。

大胆盲猜一波:在知乎专栏这个页面,上面那个Cookie值会决定知乎后端服务走入不同的处理逻辑,而在这里的两个逻辑里,使用了不同的编解码处理方式,导致返回给浏览器的数据出现了错误。

至于为什么会随机每次不一样,大家觉得可能是什么原因?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程技术宇宙 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档