2010-11-05 384 views
5

我们有我们的嵌入式设备的Web服务器上的一个简单的HTML登录表单。 Web服务器由于严重的内存限制而被自定义编码。不管这些限制,我们都喜欢Chrome并希望支持它。如何解决Chrome发送的“Content-encoding gzip deflate”头文件?

所有浏览器在我们的登录表单中发布HTTP请求,其中包含预期的“用户名= myname & password = mypass”字符串,但不包含Chrome。相反,我们从Chrome收到“Content-encoding gzip deflate”请求。顺便说一句,“所有浏览器”,我的意思是这个测试可以在Internet Explorer 9 beta,8,7,6; Firefox版本4测试版,3,2;歌剧10,9; Safari 5,4,3;和SeaMonkey 2.

参考w3.org的http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html的“14.2 Accept Charset”部分,我们试着发回一个HTTP 406代码来表明这个服务器不支持该编码,希望Chrome会再次尝试和发布预期的字符串是标准的方式。由Web服务器返回406代码清晰地显示在Chrome的“检查元素”窗口,但它似乎是Chrome被视为一个错误代码,并没有进一步的请求被发送到Web服务器。 “登录失败。”我们也尝试了HTTP返回代码405和200,结果相同。

有没有办法绕过这种行为,或者阻止Chrome发送“Content-encoding gzip deflate”请求的客户端JavaScript或者服务器端的响应,这会很好地解释Chrome不要做gzip,只是发送给我们经常的方式?

我们试图张贴到谷歌Chrome疑难解答论坛,没有任何反应。

任何帮助将不胜感激!

最好的问候, 伯特

回答

0

这听起来使用Chrome做一个张贴到服务器的第一次,铬默认使用gzip编码时等。很奇怪。

简单的解决方法是只需将您的用户名/密码作为GET参数,并且在发送响应时,只要您不发送gzip内容编码,chrome就应该从该点开始使用非gzip的帖子。希望工程?

0

我与印刷到stdout一个简单的Python脚本测试了这一点一点。我以为我遇到了同样的问题,但后来我意识到我只是忘记刷新标准输出。看来,Chrome始终会在发送请求内容之前将请求发送到标题的末尾,你必须使用第二个接收调用来获取POST数据。相比之下,整个Firefox请求在一次recv调用中返回。

2

你找错节的错误代码:RFC 2616第14.11指定您发送一个415(不支持的媒体类型),如果你不能与内容编码处理。