我已经阅读了很多讨论,并发现大多数声明称expires
优先于last-modified
,这意味着如果response
已经过期,它甚至不会发出if-modified-since
到服务器,当然response
代码不是304。
但是我的情况非常奇怪,我已经在last-modified
中返回response
,并且CDN /代理方面以某种方式添加expires
标头,其值与{{1}相同} date
标头,我认为response
和expires
标头中的相同值会立即导致date
陈旧,但事实上,我的客户端浏览器仍然会发出请求{ {1}}标头,这将导致从服务器返回304 response
代码。
我通过if-modified-since
阅读,但它并没有说明多少。那么这个案子会发生什么?
答案 0 :(得分:1)
差不多2年但找不到答案......
我找到了一些reference:
新鲜度寿命是根据几个标题计算的。如果一个 指定“Cache-control:max-age = N”标题,然后指定新鲜度 生命周期等于N.如果这个标题不存在,那就非常 通常情况下,检查是否存在Expires标头。如果 Expires头存在,然后它的值减去Date的值 标题决定了新鲜度。最后,如果没有标题 存在,查找Last-Modified标头。如果这个标题是 目前,缓存的新鲜度生命周期等于值 Date标题减去Last-modified标题的值除以 10。
虽然我在RFC中找不到确认的优先级,但我认为这个MDN报价足够可靠。
如果某些浏览器没有以这种方式实现,这是很正常的......所以为了避免任何问题,最好不要同时在响应中返回这两个标头。