3

这个问题与我之前的帖子有关: 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 标头中,这里有几个有趣的点:

  1. 响应标头包含显示“ Content-Encoding gzip ”的字段
  2. 但 Content-Length 显示资源的未压缩版本的长度。

为了解决这个问题,我在 Architecture 中尝试了一些小的改动,在我认为可能是问题原因的地方。我注意到,用 CGI 替换 fastCGI 解决了我的问题,并且数据现在以压缩格式发送。


问题

虽然问题解决了,但我肯定想使用 fastCGI。所以我正在寻找可以解决问题的可能的配置更改。我在服务器的 Apache 设置中做了以下安排:

  1. 从可用的 Apache 模块启用 deflate模块。
  2. 我的/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>
    
  3. 我有以下几行来使 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 压缩吗?

4

1 回答 1

2

最后,我能够在这里找到问题的解决方案: http ://wiki.catalystframework.org/wiki/deployment/apache_fastcgi

在这里,为了回答一个问题:为什么我的应用程序如此缓慢、提供空白页和/或反应不及时?在常见问题解答部分,他们清楚地说明了这一点。

mod_fastcgimod_deflate在某些版本的 apache(例如 Debian Lenny 库存包)下不能很好地共存。一种解决方法是不加载 deflate 模块。另一种解决方案是构建和安装 mod_fastcgi 的最新快照版本(可在 http://www.fastcgi.com/dist/找到)。

因此,正如帖子中所建议的那样,我在服务器上更新了libapache2-mod-fastcgi包,现在我正在客户端获取具有正确响应头值的压缩数据。

于 2012-08-07T13:21:11.717 回答