【问题标题】:Is gzip encoding compatible with JSON?gzip 编码与 JSON 兼容吗?
【发布时间】:2010-10-14 01:58:59
【问题描述】:

我正试图缩小我的 AJAX 调用中出现的一些奇怪之处。我的 PHP 脚本一开始就有这个:

ob_start("ob_gzhandler");

适用于 HTML。但是用 application/json 数据做这件事有什么问题吗?任何人都知道的任何浏览器问题?

【问题讨论】:

  • 它对我来说工作正常。它在 php 5.5.15 中正确发送带有内容编码 gzip 的 json 数据

标签: php json encoding gzip


【解决方案1】:

我不会在 PHP 中启用压缩,而是在 Apache 中启用压缩(使用 mod_deflate),这样您就可以检查各种不兼容的浏览器,并且只为接受并正确处理它的浏览器发送压缩数据。

http://httpd.apache.org/docs/2.0/mod/mod_deflate.html

【讨论】:

  • 这就是 ob_gzhandler 所做的。我更喜欢程序化控制。
【解决方案2】:

一些较旧的浏览器,例如某些版本的 IE6,会破坏 gzip 压缩的内容,尤其是 js 内容。

只需检查您的服务器是否发送了正确的内容编码标头,即

Content-Encoding: gzip

在发送 gzip 压缩的内容之前,您还应该检查浏览器发送的标头是否有正确的接受编码标头...也就是说,

Accept-Encoding: gzip,deflate

【讨论】:

  • 这就是 ob_gzhandler 的想法
【解决方案3】:

我不这么认为...我以前使用过存储为 gzip 压缩 JSON 的静态文件,它与 AJAX 配合得很好。

编辑:我检查了我的 php 脚本,我做的唯一特别的事情就是包含这些标题:

Content-Encoding: gzip
Content-Type: text/plain

如果我没记错的话,每当我尝试将 Content-Type 更改为指示 JSON 的内容时,客户端都会遇到问题。

【讨论】:

  • 这很有趣。我使用 application/json 因为我认为这就是你应该为 json 做的事情。
  • 我试图记住我遇到的确切问题。可能是 AJAX 部分不介意,但是对于调试来说,这是一个很大的痛苦,因为 Firefox 不知道如何显示 application/JSON,而它可以很好地处理 text/plain。
  • (通过“调试”我的意思是直接在我的浏览器中查看 JSON url,而不是通过在我的应用程序的 AJAX 部分放置断点/日志记录)
【解决方案4】:

只要浏览器在Accept-Encoding 请求标头中指定gzip,您就可以提供压缩后的内容。在这种情况下,JSON 和 HTML 之间没有区别,也不会引起任何问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-27
    • 2021-04-30
    • 1970-01-01
    • 2015-01-17
    • 2016-08-09
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    相关资源
    最近更新 更多