今天早上我尝试访问我使用iPad(Safari Mobile/Webkit)构建的Web应用程序时遇到了一个非常奇怪的问题。在前端,Web应用程序严重依赖于XHR/Ajax请求。在后端,如果“Accept-Encoding”包含“gzip”,则服务器配置为gzip压缩响应。使用Safari对SSL进行Gzip压缩?
一切都很好,直到我翻转服务器到SSL。然后我开始在Safari中出现间歇性的“CFURLErrorDomain:303”错误。
快速搜索后,我发现这个链接:
http://beyondrelational.com/modules/2/blogs/45/posts/12034/failed-to-load-resource-safari-issue.aspx
根据该链接时,Safari使得通过SSL/HTTPS XHR(AJAX)请求时需要一个内容长度报头。就我而言,服务器直接将内容压缩到输出流,所以我无法知道最终内容的长度。
作为一种变通方法,添加以下逻辑服务器上:
if (request.isEncrypted()) gzip =
!request.getHeader("User-Agent").toLowerCase().contains("webkit");
换言之,如果连接是通过SSL加密的,并且浏览器是一些WebKit的衍生物(例如野生动物园,铬等),那么不要压缩输出。这似乎工作,但它真的放慢了速度。
所以我的问题是这样的:
Safari浏览器是否支持gzip压缩了SSL响应还是我找错了树?
我有同样的问题,我认为。你是如何修补你的服务器来解决这个问题的?我想我需要做类似的事情,看起来你也使用Java。 – chubbsondubs