小编Vla*_*mir的帖子

当同时使用gzip和Etag时,无法缓存资源

我正在尝试在浏览器中缓存(javascript)资源并正确设置响应标头中的所有Cache-control:max-age,Expires和Etag(如屏幕截图所示).

浏览器请求"if-none-match"和"if-modified-since",并且在这两种情况下满足条件:

  • if-modified-since = last-modified(文件从未更改过)
  • if-none-match = Etag(再次,文件从未更改过)

所以我应该得到回复304,对吗?但不,我一直得到200 OK,这意味着apache每次都会继续为文件服务(尽管是压缩的).经过Firefox,Chrome,curl测试 - 没用.服务器总是服务整个文件,即使我没有要求它...

使用curl,我已经将问题追溯到gzip和Etag:

  • 如果我删除gzip(并从请求Etag中剪切后缀-gzip) - 一切都很好:304
  • 如果我保留gzip并完全删除请求Etag - 一切都很好:304
  • 但是如果我同时保留'accept-encoding:gzip'和Etag,即使请求和响应Etags都是相同的(这次最后使用'-gzip'),服务器返回错误的200.感觉就像apache比较ez之前的gzipping失败,决定它不匹配,然后提供gzip文件,即使在Etag匹配的gzip之后.

这是请求/响应:

  • 请求方法:GET
  • 状态代码: HTTP/1.1 200 OK

请求标题00:09:12.000

  • User-Agent:Mozilla/5.0(X11; Ubuntu; Linux i686; rv:36.0)Gecko/20100101 Firefox/36.0
  • 如果 - 无匹配:"24e55-51138062ce6c0-gzip"
  • If-Modified-Since:星期六,2015年3月14日04:26:43 GMT
  • 连接:保持活力
  • 缓存控制:max-age = 0
  • Accept-Language:en-US,en; q = 0.5
  • Accept-Encoding:gzip,deflate
  • 接受: /

响应标头Δ1100ms

  • 变化:接受编码
  • 服务器:Apache/2.4.7(Ubuntu)
  • Last-Modified:周六,2015年3月14日04:26:43 GMT
  • Keep-Alive:超时= 5,最大= 100
  • 到期日:2015年3月25日星期三16:09:13 GMT
  • Etag:"24e55-51138062ce6c0-gzip"
  • 日期:2015年3月18日星期三16:09:13 GMT
  • 内容类型:应用程序/ javascript
  • 内容长度:53331
  • 内容编码:gzip
  • 连接:保持活力
  • 缓存控制:max-age = 604800

caching header http response

13
推荐指数
2
解决办法
6441
查看次数

标签 统计

caching ×1

header ×1

http ×1

response ×1