本文共 955 字,大约阅读时间需要 3 分钟。
服务器正在返回错误的HTTP标头,导致数据无法正确解码。这种情况的具体原因尚不明确,但WRCCWrappers.py作为CGI脚本,它本身并不会输出HTTP标头。然而,在DOCTYPE声明之后,它包含了一个双换行符,这可能导致Apache服务器插入了额外的标头。
当使用cURL命令进行测试时,服务器返回了一个200 OK的响应,但标头中缺少有效的DOCTYPE声明。这意味着其他标头将被忽略。这种情况下,Content-Encoding: gzip标头被正确返回,但由于DOCTYPE行缺失,Apache服务器可能在处理响应时出现了问题。
此外,在Python 2环境下,HTTP标头解析器可能会将DOCTYPE声明视为一个标头,这可能进一步影响标头的处理。为了验证这一点,可以使用以下命令查看完整的HTTP响应头信息:
curl -D -o /dev/null -s -H 'Accept-Encoding: gzip, deflate' http://www.wrcc.dri.edu/WRCCWrappers.py?sodxtrmts+028815+por+por+pcpn+none+mave+5+01+F
从响应头信息来看,服务器返回了正确的Content-Encoding: gzip值,但由于DOCTYPE行缺失,Apache服务器未能正确处理压缩编码。在这种情况下,请求库(如requests)可能无法自动检测到数据是gzip编码的,因此需要手动指定Accept-Encoding标头为identity,以确保服务器不会对响应进行压缩。
解决方法是将Accept-Encoding标头设置为identity,这样服务器就不会对响应进行gzip压缩。可以通过以下方式实现:
headers = {'Accept-Encoding': 'identity'}r = requests.get(url, headers=headers) 返回的响应将是未压缩的原始数据。在Python 2环境下,HTTP标头解析器可能会将DOCTYPE声明视为一个标头,因此需要确保在处理响应时正确解析这些标头信息。
通过以上方法,可以确保服务器不会对响应进行压缩,从而避免因HTTP标头错误导致的数据解码问题。
转载地址:http://rbofk.baihongyu.com/