gzip编码是否兼容JSON?

9

我正在试图找出我的AJAX调用中发生的一些奇怪问题。 我的PHP脚本在开头有这个:

ob_start("ob_gzhandler");

在处理HTML时非常好用。但是使用application/json数据有什么问题吗?有没有任何浏览器问题大家知道的呢?


对我来说它运行良好。在php 5.5.15中,它正确地发送了使用内容编码gzip的json数据。 - RN Kushwaha
4个回答

7

我不这么认为……我之前使用过存储为gzipped JSON的静态文件,并且在AJAX中可以正常工作。

编辑:我检查了我的php脚本,唯一特殊的事情就是包含了这些头信息:

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

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


有趣。我使用application/json,因为我认为这是处理JSON数据的标准方式。 - Jordie
我试图回忆起我遇到的确切问题。可能是因为 AJAX 部分没有问题,但是对于调试来说非常麻烦,因为 Firefox 不知道如何显示 application/JSON,而 text/plain 则可以正常工作。 - Jason S
(在这里,“debugging”指的是直接在浏览器中查看JSON网址,而不是在我的应用程序的AJAX部分中设置断点/日志记录) - Jason S

3

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

请确保您的服务器发送正确的内容编码头,即

Content-Encoding: gzip

在发送经过gzip压缩的内容之前,您还应该检查浏览器发送的头文件,以确保接受编码头文件正确。

Accept-Encoding: gzip,deflate

这就是 ob_gzhandler 的设计思路。 - Jayrox

2

当浏览器在请求头中指定Accept-Encodinggzip时,您可以提供经过压缩的内容。在这种情况下,JSON和HTML之间没有区别,也不会出现任何问题。


1

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

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


1
这就是 ob_gzhandler 的作用。我更喜欢编程控制。 - Jordie

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