当前位置: 首页 > Web前端 > HTML5

HTTP请求响应头域中ETAG的用法示例

时间:2023-04-05 20:21:53 HTML5

ETAG是ConditionalRequest范畴下的一个概念。条件请求是浏览器可以询问服务器是否有资源的更新副本的请求。浏览器将发送一些关于它所持有的缓存资源的信息,服务器将确定它是否应该返回更新的内容或者浏览器的副本是否是最新的。在后一种情况下,将返回304(未修改)的HTTP状态。HTTP请求头字段中提到的If-Modified-Since或If-None-Match请求字段可以通过设置ETag或Last-Modified来触发。当正确配置的Web服务器看到来自客户端的这些传入请求标头时,服务器可以确认浏览器在其HTTP缓存中已有的资源版本与Web服务器上的最新版本相匹配。如果匹配,服务器可以响应304NotModifiedHTTP响应,这相当于告诉客户端,浏览器,继续使用你已经拥有的资源。当服务器发送这种类型的响应时,需要传输的数据很少,因此通常比必须实际发回所请求的实际资源的副本要快得多。这是因为,虽然条件请求确实是通过网络调用调用的,但未修改的资源会导致响应主体为空——从而节省了将资源传输回最终客户端的成本。后端服务通常也能够在不需要访问资源的情况下非常快速地确定资源的最后修改日期,这本身可以节省大量处理时间。在上面的示例中,浏览器从服务器请求/file并包含一个If-None-Match标头以指示服务器仅在服务器上文件的ETag与浏览器的If-None-Match值文档不匹配时才返回完整。在这种情况下,这2个值确实匹配,因此服务器返回一个304NotModified响应,其中包含文件应该缓存多长时间的说明(cache-control:max-age=120)。