如何绕过由Chrome发送的“Content-encoding gzip deflate”头部?

5
我们在嵌入式设备的Web服务器上有一个简单的HTML登录表单。由于内存限制严重,Web服务器是自定义编码的。尽管存在这些限制,我们喜欢Chrome并希望支持它。
所有浏览器都会向我们的登录表单发布HTTP请求,其中包含预期的“username=myname&password=mypass”字符串,但Chrome不会。相反,我们从Chrome收到了一个“Content-encoding gzip deflate”的请求。顺便说一下,“所有浏览器”是指已经测试过在Internet Explorer版本9 beta、8、7、6;Firefox版本4 beta、3、2;Opera 10、9;Safari 5、4、3;和SeaMonkey 2上运行良好。
参考w3.org的“14.2接受字符集”章节(http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html),我们尝试发送HTTP 406代码来指示此服务器不支持该编码,希望Chrome会再次尝试以标准方式发布预期的字符串。Web服务器返回的406代码在Chrome的“检查元素”窗口中清晰地显示,但似乎被Chrome视为错误代码,并且没有进一步的请求发送到Web服务器。“登录失败。”我们还尝试了HTTP返回代码405和200,结果相同。
是否有一种方法可以通过客户端JavaScript绕过此行为,以防止Chrome发送“Content-encoding gzip deflate”请求,或者使用服务器端响应来向Chrome解释我们不执行gzip,只需按常规方式将其发送给我们?
我们尝试在Google Chrome故障排除论坛上发布帖子,但没有得到回复。
非常感谢您的帮助!
最好的问候, Bert
3个回答

2
您正在错误的部分查找错误代码:RFC 2616的第14.11节规定,如果您无法处理Content-Encoding,则发送415(不支持的媒体类型)。请注意查看。

0

听起来像是在使用Chrome第一次向服务器发送POST请求时,默认使用gzip编码。相当奇怪。

简单的解决方法是将您的用户名/密码作为GET参数放置,当发送响应时,只要不发送gzip内容编码,Chrome就应该从那时开始使用非压缩的POST请求。希望这个方法有效?


0
我用一个简单的Python脚本测试了一下,它会将内容打印到stdout。起初我以为遇到了同样的问题,但后来发现只是忘记刷新stdout了。看起来Chrome总是在发送请求内容之前将请求发送到头部的末尾,你必须使用第二个recv调用来获取POST数据。相比之下,整个Firefox请求可以在单个recv调用中返回。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接