荔枝FM 的一些知名的 podcast 提供了 RSS(大概是为了发布到 iTunes?),可以用第三方播客客户端订阅,不过最近我的 Podcast Addict 中有几个 podcast 总是无法更新,始终报发生错误。开始以为是荔枝设置了什么 UA 检测之类的屏蔽了第三方客户端——对国内公司有这个揣度不过分吧,而且浏览器看对应 RSS 的地址是正常的。
然后就给 Podcast Addict 反馈了一下,因为如果是 UA 屏蔽的话,给荔枝反馈肯定是没用的,而播客客户端绕过这个应该不麻烦。结果和作者一来二去发现,应该不是 UA 屏蔽。问题似乎出在处理 gzip 的响应时候,不知道 Podcast Addict 请求的时候发了什么头,反正荔枝服务器是返回了 gzip 压缩的内容。但也许是荔枝返回的内容本身有问题,也许是 Podcast Addict 处理不好 gzip 的内容(感觉可能性不大),总之就是失败就是了。另一个佐证就是,使用在线 XML 验证器验证荔枝的 RSS URL 会报错,但不是报语法错,也是报和 gzip 相关的 CRC 校验错,似乎问题是在荔枝那边?
CRC check failed 0x2 != 0xc5cd947fL (Server response declares Content-Encoding: gzip; misconfigured server?)
给荔枝反馈没回音(意料之中),于是自己动手好了。搭个反向代理,然后把请求头的 Accept-Encoding 清空,不汇报支持 gzip,这样荔枝返回的是普通内容,就可以正常解析了。
可以把 RSS 地址中的 host 部分替换成 lizhi.old9.me 即可。
update: 又查了一下这个报错,gzip 本身没问题,validator 和播客客户端都可以处理 gzip 内容(理所当然),但是在解压 gzip 内容的时候,可能有的 UA 会做 CRC 校验,然而恰好荔枝的 gzip 过不了 CRC(头部多了 61 0d 0a,尾部多了 0d 0a 30 0d 0a 0d 0a,这是啥?),结果就出错了。总之锅是在荔枝那边没跑了。