共计 689 个字符,预计需要花费 2 分钟才能阅读完成。
ETAG 属于条件申请 (Conditional Request) 领域下的概念。
条件申请是浏览器能够询问服务器是否有更新的资源正本的申请。浏览器将发送一些对于它所持有的缓存资源的信息,服务器将确定是否应该返回更新的内容或者浏览器的正本是最新的。在后者的状况下,返回 304(未修改)的 HTTP 状态。
通过设置 ETag 或 Last-Modified,能够触发 HTTP 申请头部字段中提到的 If-Modified-Since 或 If-None-Match 申请字段。
当正确配置的 Web 服务器看到来自客户端的这些传入的申请标头时,服务器能够确认浏览器在其 HTTP 缓存中曾经领有的资源版本是否与 Web 服务器上的最新版本匹配。
如果匹配,则服务器能够响应 304 Not Modified HTTP 响应,相当于通知客户端即浏览器,请持续应用你曾经领有的资源
。
服务器发送这种类型的响应时,须要传输的数据非常少,因而通常比必须理论发送回所申请的理论资源的正本要快得多。
这是因为,只管条件申请的确会通过网络调用调用,但未修改的资源会导致响应主体为空——节俭了将资源传输回最终客户端的老本。后端服务通常还可能十分疾速地确定资源的最初批改日期,而无需拜访资源,这自身能够节俭大量的解决工夫。
上图的例子是,浏览器从服务器申请 /file 并蕴含 If-None-Match 标头,以批示服务器仅在服务器上文件的 ETag 与浏览器的 If-None-Match 值 不匹配
时,才返回残缺文件。
在这种状况下,这 2 个值的确匹配,因而服务器返回 304 Not Modified 响应,其中蕴含无关文件应缓存多长时间的阐明(缓存管制:max-age=120)。