last-modified vs expires precedence

时间:2015-08-20 02:45:40

标签: http web httprequest httpresponse

我已经阅读了很多讨论,并发现大多数声明称expires优先于last-modified,这意味着如果response已经过期,它甚至不会发出if-modified-since到服务器,当然response代码不是304。

但是我的情况非常奇怪,我已经在last-modified中返回response,并且CDN /代理方面以某种方式添加expires标头,其值与{{1}相同} date标头,我认为responseexpires标头中的相同值会立即导致date陈旧,但事实上,我的客户端浏览器仍然会发出请求{ {1}}标头,这将导致从服务器返回304 response代码。

我通过if-modified-since阅读,但它并没有说明多少。那么这个案子会发生什么?

1 个答案:

答案 0 :(得分:1)

差不多2年但找不到答案......

我找到了一些reference

  

新鲜度寿命是根据几个标题计算的。如果一个   指定“Cache-control:max-age = N”标题,然后指定新鲜度   生命周期等于N.如果这个标题不存在,那就非常   通常情况下,检查是否存在Expires标头。如果   Expires头存在,然后它的值减去Date的值   标题决定了新鲜度。最后,如果没有标题   存在,查找Last-Modified标头。如果这个标题是   目前,缓存的新鲜度生命周期等于值   Date标题减去Last-modified标题的值除以   10。

虽然我在RFC中找不到确认的优先级,但我认为这个MDN报价足够可靠。

如果某些浏览器没有以这种方式实现,这是很正常的......所以为了避免任何问题,最好不要同时在响应中返回这两个标头。