ssl - 使用 Safari 通过 SSL 进行 Gzip 压缩?

标签 ssl safari gzip content-length

今天早上,我在尝试访问我正在使用 iPad (Safari Mobile/Webkit) 构建的网络应用程序时遇到了一个非常奇怪的问题。在前端,Web 应用严重依赖 XHR/Ajax 请求。在后端,如果“Accept-Encoding”包含“gzip”,则服务器配置为 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) 请求时需要内容长度 header 。在我的例子中,服务器将内容直接 gzip 到输出流,所以我无法知道最终内容的长度。

作为解决方法,我在服务器上添加了以下逻辑:

    if (request.isEncrypted()) gzip =
        !request.getHeader("User-Agent").toLowerCase().contains("webkit");

换句话说,如果连接是通过 SSL 加密的,并且浏览器是一些 webkit 衍生产品(例如 Safari、Chrome 等),那么不要压缩输出。这似乎有效,但它确实减慢了速度。

所以我的问题是:

Safari 是否支持通过 SSL 的 gzip 压缩响应,还是我找错了树?

最佳答案

原来我看到的错误是服务器中的错误,与 Safari 无关。服务器在压缩大字节数组时依赖于分块传输编码。单独的“ block ”被分解成片段(标题、正文、尾部)并在单独的消息中发送给客户端。 SSL 客户端(safari)期待一个连续的“ block ”,所以当它看到一个不完整的 block 时不知道该怎么做。服务器已打补丁,问题现已解决。

关于ssl - 使用 Safari 通过 SSL 进行 Gzip 压缩?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12978583/

相关文章:

ruby-on-rails - 在 Flynn 中安装 TLS 证书

c# - 将 HttpWebRequest 发送到 HTTPS REST 服务

javascript - 在 iOS 应用程序中设置 cookie 并从 Safari 读取该 cookie

java - 使用 Java 压缩和解压缩文件夹和文件

java - 使用已知证书的 SSL 服务器套接字和握手

java - 使用来自 Java 的证书登录网页

javascript - jQuery innerwidth/innerheight 无法在 Chrome/Safari 中正确处理图像

html - Safari 滚动 div 卡住了

tcl - 如何在 TCL 中读取 gzip 文件?

apache - 为什么对 Apache 提供的文本文件使用 deflate 而不是 gzip?