`

解决IE6从Nginx服务器下载图片不Cache的Bug

阅读更多

其实这个Bug是由分两种情况的:

1.和Nginx无关,是针对CSS背景图片的。

一般用户不会碰到,更多的时候是开发者将自己的IE的缓存策略从默认的”自动”改为“每次访问都查询”才发生 的。特点是鼠标一旦浮动到有背景图片的地方,IE会不顾已经缓存的图片,自行去服务器再次获取图片,造成图片短暂消失。这个问题比较简单,可以通过以下脚 本解决。

1 <script type=”text/javascript”>// <![CDATA[
2 try {
3 document.execCommand('BackgroundImageCache', false, true);
4 } catch(e) {}
5 // ]]></script>

2. 但是实际上更常见的原因是Nginx上打开了Gzip压缩功能。

这个是IE6 的著名Bug,早在2002年就被人详细讨论过了,在IE7中有所改进,但微软永远也不会去修复IE6了。

根本原因是Nginx对于启用了Gzip的http上下文,即使你在之前的配置文件里声明过 gzip_disable “MSIE [1-6].”,Nginx不再对IE6用Gzip压缩了,但是送出的http报头却仍然采用了和Gzip压缩数据包相匹配的Vary: Accept-Encoding。IE6不认识这个报头,IE6对除了Vary: User-Agent的报头外,都不查询缓存,直接去服务器申请。更绝得是,不是使用查询文件是否更新,而是强行要求一份完整文件。(IE7总算客气了 点,就是先查询一下文件是否更新在下载,减轻了这个bug的影响)。

这个Bug的级别很高,靠前面1中的方法是不行的。在 NGINX中,通过add-header Cache-Control “post-check:3600, pre-check:43200″; ,象这里 介绍的方法, 也是不行的。通过一番痛苦的摸索,才发现要解决这个Bug,有两个方法,一个是使用Nginx的headers-more-nginx-module, 遇到User-Agent是IE6(或者不管三七二十一),修改报头为Vary: User-Agent。不过这个模块并不是标准配置,需要重新编译Nginx。

另一个更为简便易行的方式就是在诸如图片和CSS,JS文件存取的地方加上一下语句,显示关闭Gzip,并手工加上报头。

1 if ($http_user_agent ~ “MSIE [1-6].”) {
2 #Must explicitly turns off gzip to prevent Nginx set Vary:Accept-Encoding
3 #which will prevent IE6 from caching anything
4 gzip off;
5 add_header Vary “User-Agent”;
6 }
经过我的测试这样是可以解决问题的。这里只能用$http_user_agent来获取浏览器参数,曾经试过$ancient_browser,不 过没有成功。

另外,Nginx本身是有一个Gzip的Derective来控制Header的, 就是gzip_vary。设成gzip_vary off应该也能解决问题,但这是这个参数只能存在与http, location,server这些上下文里,不能添加到if上下文里,所以只能用gzip off; 把gzip完全给关了。

分享到:
评论

相关推荐

    nginx同时做web跟cache服务器

    nginx同时做web跟cache服务器

    java实现客户端上传图片到ftp服务器,nginx提供http服务下载图片

    在Java分布式项目中,涉及到客户端上传图片到FTP服务器并由Nginx提供HTTP服务进行图片下载,这是一个典型的文件传输和Web服务集成的场景。这里主要涉及三个关键知识点:Java FTP客户端编程、Nginx服务器配置以及Java...

    nginx服务器及使用

    **Nginx服务器详解** Nginx是一款高性能的HTTP和反向代理服务器,同时也是一款邮件代理服务器。它以其稳定性高、内存占用少、处理静态文件速度快等特性在Web服务器领域广泛应用。Nginx的设计目标是高并发、低内存...

    nginx_cache_purge.zip

    《Nginx Cache Purge:高效管理Web缓存的利器》 在当今互联网环境中,Web服务器的性能优化至关重要,而缓存技术则是其中的关键一环。Nginx,以其高性能、稳定性以及模块化的特性,成为了许多网站首选的反向代理和...

    Nginx服务器的安装与配置

    4. **静态文件处理**:对于静态文件(如图片、CSS和JavaScript文件),Nginx可以直接从磁盘读取并返回给客户端,无需通过应用服务器处理,大大提高了响应速度。 5. **模块化结构**:Nginx支持多种模块,包括但不限于...

    nginx-1.0.4 服务器软件下载

    nginx-1.0.4 nginx nginx最新版 全能服务器 代理服务器 http://www.bywei.cn/blog 程序员百味 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 ...

    nginx作为http图片服务器示例

    Nginx是一款轻量级的Web服务器,以其高效的并发处理能力、低内存占用以及简单易用的配置而闻名,尤其适合处理静态内容如图片、CSS和JavaScript等。 在描述中提到,“超级性能”是Nginx的一大特点。Nginx采用事件...

    Nginx服务器的安装与配置.pdf

    第9章 Nginx的Web缓存服务与新浪网的开源NCACHE模块.pdf 第10章 Nginx在国内知名网站中的应用案例.pdf 第11章 Nginx的非典型应用实例.pdf 第12章 Nginx的核心模块.pdf 第13章 Nginx的标准HTTP模块.pdf 第14章 Nginx...

    Nginx服务器

    优于Tomact服务器的轻量级服务器,现在大多数公司都在由Tomcat转变为Nginx服务器

    nginx下载服务器配置

    **Nginx下载服务器配置详解** Nginx是一款高性能、轻量级的Web服务器和反向代理服务器,常用于提供静态文件服务、反向代理和负载均衡等任务。在搭建一个用于提供下载服务的Nginx服务器时,我们需要进行一系列的配置...

    搭建nginx点播服务器

    3. 下载Nginx和点播模块:从官方地址下载Nginx的最新源码,同时从GitHub获取点播模块(如nginx-vod-module)。 4. 安装依赖:运行一系列`apt-get install`命令,包括`libpcre3-dev`、`zlib1g-dev`、`openssl`、`...

    Nginx高性能Web服务器详解(完整版)pdf下载

    Nginx是一款高性能的Web服务器,它以其反向代理、负载均衡、静态文件处理和高效非阻塞I/O模型而闻名。Nginx的设计理念是轻量级、高并发,因此在处理高流量网站时表现出色。以下是Nginx的一些核心知识点: 1. **模块...

    Nginx 搭建图片服务器

    图片服务器不仅能集中存储和管理图片资源,还能通过FTP或SFTP服务方便地对图片进行上传、下载等操作。同时,利用Nginx的HTTP服务器功能进行动静分离,可以提高整个系统的性能,降低应用服务器的压力。 安装Nginx的...

    nginx rtmp转发服务器

    - **拉流**:观众可以使用支持RTMP的播放器或网页播放器从服务器拉取流。 - **录制**:通过`record`指令,Nginx RTMP可以自动记录流到本地文件,方便后期处理。 - **HLS切片**:通过`hls on`指令,Nginx RTMP可以...

    nginx图片服务器配置和https配置

    nginx图片服务器配置和https配置

    nginx访问静态文件不下载.rar

    标题 "nginx访问静态文件不下载" 暗示了用户可能遇到了在使用Nginx服务器时,尝试访问静态文件(如HTML、CSS、JavaScript或图片等)却导致浏览器下载文件而不是正常显示的情况。Nginx是一款高性能的HTTP和反向代理...

    nginx服务器

    Nginx是一个轻量级高性能的web服务器,它是为快速响应大量静态文件请求和高效利用系统资源而设计的。与apache使用面向进程或线程的方式处理请求不同,nginx使用异步事件驱动模型在负载下性能更突出。 虽然nginx能...

    详解Nginx服务器中配置超时时间的方法

    在Nginx服务器的配置中,超时时间的设置至关重要,因为它关系到服务器对客户端请求的响应速度和系统的稳定性。本文将深入讲解如何在Nginx中配置超时时间,并介绍相关的参数设置。 首先,我们需要了解何时需要设置...

Global site tag (gtag.js) - Google Analytics