if-modified-since和if-none-match有什么区别?我有一种感觉,if-none-match用于文件,而if-modified-since用于页面?
Answers:
关于之间的差异Last-Modified/If-Modified-Since
和ETag/If-None-Match
:
两者可以互换使用。但是,根据资源的类型及其在服务器上的生成方式,一个或另一个问题(“因为...?是否已对其进行了修改?” /“此标记是否仍与此ETag匹配?”)可能更容易回答。 。
例子:
mtime
的Last-Modified
日期是最简单的解决方案。ETag
会容易得多。请参阅以下链接,以获取有关该主题的更多详细信息:
If-Modified-Since
与比较,Last-Modified
而If-None-Match
与比较ETag
。双方Modified-Since
并ETag
可以用来识别资源的特定变异。
但是的比较If-Modified-Since
来Last-Modified
给你的信息缓存的变种是否是旧的还是新的,而的比较If-None-Match
来ETag
只是给你俩是否是信息相同与否。此外,大多数ETag
生成器是否都包含系统特定inode的信息,因此将文件移动到其他驱动器也可能会更改文件ETag
。
正如谷歌的最佳做法所述:
为所有可缓存资源指定Expires或Cache-Control max-age之一,以及Last-Modified或ETag之一,这一点很重要。同时指定Expires和Cache-Control:max-age或同时指定Last-Modified和ETag是多余的。
https://developers.google.com/speed/docs/best-practices/caching
Last-Modified
with的限制ETag
(或在useragent上If-Modified-Since
使用If-None-Match
)。同样,W3规范也不限制您。它说,不要用If-Modified-Since
带If-Match
,但我认为这是因为组由ETag的定义已经更新日期,但相同的内容文件应该是相当小的。
If-Modified-Since使用日期,而If-None-Match使用ETag。它们都可以用于“页面”(即HTML)和其他文件。