所以我为REST API设置了一个Web服务器,我用PHP编写它。
我已经设置了Apache,以便我可以使用gzip压缩:
<IfModule mod_mime.c>
AddType application/x-javascript .js
AddType text/css .css
</IfModule>
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript application/json
<IfModule mod_setenvif.c>
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</IfModule>
<IfModule mod_headers.c>
Header append Vary User-Agent env=!dont-vary
</IfModule>
</IfModule>
然后使用curl我测试我被发回的标题:
HTTP/1.1 200 OK
Date: Sat, 24 Oct 2015 23:24:34 GMT
Server: Apache/2.4.10 (Unix) OpenSSL/1.0.1j PHP/5.6.3 mod_perl/2.0.8-dev Perl/v5.16.3
Last-Modified: Sat, 24 Oct 2015 23:04:13 GMT
ETag: "b9413-522e1bf1eb540-gzip"
Accept-Ranges: bytes
Vary: Accept-Encoding,User-Agent
Content-Encoding: gzip
Content-Length: 4204
Content-Type: text/plain
很好,这似乎有效。但是,当我运行创建资源并在JSON响应中返回对象(或错误)的测试脚本(index.php)时,我得到以下内容:
HTTP/1.1 201 Created
Date: Sat, 24 Oct 2015 23:26:01 GMT
Server: Apache/2.4.10 (Unix) OpenSSL/1.0.1j PHP/5.6.3 mod_perl/2.0.8-dev Perl/v5.16.3
X-Powered-By: PHP/5.6.3
Location: api.domain.com/rest/v1/users/12345
Connection: close
Content-Language: en
Vary: User-Agent
Content-Type: application/json; charset=utf-8
为什么JSON响应不会返回压缩?我故意返回&gt; 700kb只是为了确保它压缩一些东西。
在返回JSON响应之前,我在服务器中显式设置了content-type
标头。这还不够吗?我猜这是一个PHP文件可能是问题,但我没有足够的经验知道Apache是否有问题/修复。
但是,如果我将ob_start("ob_gzhandler”);
添加到我的PHP代码中,则会压缩内容。
另外,值得一提的是.txt和index.php在同一个文件夹中。
答案 0 :(得分:0)
尝试下一步(确保已安装filter_module
):
<IfModule filter_module>
FilterProvider COMPRESS DEFLATE "%{Content_Type} = 'application/json'"
</IfModule>