这个问题与我之前的帖子有关: Android ICS 的 CSS 加载问题。
Android ICS 的默认浏览器和 Dolphin 浏览器在哪里出现 CSS 和 JS 渲染问题。此内容由我的服务器后端引擎提供,该引擎使用(Apache2 + FastCGI + Python)设置。
在搜索可能的问题时,我发现问题的主要原因是,内容不是从服务器以压缩形式发送的。
因此示例响应标头看起来如下所示:
Connection Keep-Alive
Content-Encoding gzip
Content-Length 5997
Content-Type text/css
Date Sun, 29 Jul 2012 14:29:08 GMT
Keep-Alive timeout=15, max=100
Server Apache (Ubuntu)
Vary Accept-Encoding
如果从平面文件中提供相同的内容。响应标头如下所示。所有浏览器都正确呈现。
Accept-Ranges bytes
Connection Keep-Alive
Content-Encoding gzip
Content-Length 1430
Content-Type text/css
Date Sun, 29 Jul 2012 14:28:57 GMT
Etag "a9c06-176d-4c5e693c2a6c0"
Keep-Alive timeout=15, max=100
Last-Modified Sat, 28 Jul 2012 16:46:59 GMT
Server Apache (Ubuntu)
Vary Accept-Encoding
还有一些方法,Android ICS 的默认浏览器和海豚浏览器无法呈现内容(特别是 css、js 内容)。它适用于所有其他浏览器。
但本质上,后端引擎也存在一些问题,因为它发送了未压缩的数据。在 Response 标头中,这里有几个有趣的点:
- 响应标头包含显示“ Content-Encoding gzip ”的字段
- 但 Content-Length 显示资源的未压缩版本的长度。
为了解决这个问题,我在 Architecture 中尝试了一些小的改动,在我认为可能是问题原因的地方。我注意到,用 CGI 替换 fastCGI 解决了我的问题,并且数据现在以压缩格式发送。
问题
虽然问题解决了,但我肯定想使用 fastCGI。所以我正在寻找可以解决问题的可能的配置更改。我在服务器的 Apache 设置中做了以下安排:
- 从可用的 Apache 模块启用 deflate模块。
我的
/etc/apache2/mods-enabled/deflate.conf
文件有以下文本:<IfModule mod_deflate.c> # these are known to be safe with MSIE 6 AddOutputFilterByType DEFLATE text/html text/plain text/xml # everything else may cause problems with MSIE 6 AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE application/x-javascript application/javascript application/ecmascript AddOutputFilterByType DEFLATE application/rss+xml </IfModule>
我有以下几行来使 fastCGI 与我在
/etc/apache2/sites-enabled/default
文件中的脚本一起工作。<Files my_script_name.py> SetHandler fastcgi-script </Files> FastCgiServer /path_to_script/my_script_name.py -processes 4 -socket /tmp/my_script_name.sock
问题
我尝试了各种配置更改,但似乎都没有解决我的问题。我在这里缺少什么来启用 fastCGI 压缩吗?