我在Apache的httpd.conf中添加以下行: - 一个Apache不发送304响应(如果mod_deflate模块和AddOutputFilterByType启用)
AddOutputFilterByType DEFLATE text/html text/css application/javascript application/x-javascript application/json
我有一个HTML文件(test.html中)脚本包括: -
<script type="text/javascript" src="/test.js"></script>
的问题是,每次我打开test.html的时间,test.js还装有HTTP状态:200
的问题是:为什么条件得到我不满意?
如果我注释掉httpd.conf中的 “AddOutputFilterByType” 行,阿帕奇发送304
如果我在httpd.conf使AddOutputFilterByType,请求头是: -
Host: optimize User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 GTB5 (.NET CLR 3.5.30729) FirePHP/0.2.4 Accept: */* Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip, deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://optimize/ Cookie: PHPSESSID=nbq6h0eeahkshkcbc6ctu2j2b4 If-Modified-Since: Tue, 19 May 2009 07:06:46 GMT If-None-Match: "2000000000717f-2c25a-46a3e8dcc2ad8"-gzip Cache-Control: max-age=0
而响应标题是: -
Date: Fri, 22 May 2009 07:03:40 GMT Server: Apache/2.2.9 (Win32) PHP/5.2.6 Last-Modified: Tue, 19 May 2009 07:06:46 GMT Etag: "2000000000717f-2c25a-46a3e8dcc2ad8"-gzip Accept-Ranges: bytes Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 52583 Keep-Alive: timeout=5, max=98 Connection: Keep-Alive Content-Type: application/javascript
更新:我注意到,如果我禁用ETag的,它工作正常。我的意思是它发送304.
FileETag None
但我真的想保持ETag,因为它(我知道有一个inode披露问题)。
你有没有找到一个解决办法? Apache 2.4似乎也在做同样的事情,总是发送200响应gzip'd内容 – virtualeyes 2013-01-14 17:40:12
任何你想保留ETags的原因?如果你只是提供已经具有“Last-Modified”日期来重新验证的静态内容,那么获得它们就没有意义。当然,砍掉它们现在是最简单的RFC兼容解决方法。 – 2016-10-02 21:09:09
ETags *是*需要的。如果您想用旧版本替换内容(例如,需要恢复为旧版本而没有引入错误的JavaScript文件),并且在使用文件的旧日期时,那么简单的日期比较将不足以满足要求。 – 2017-01-23 08:55:49