📜  什么是HTTP ETag?(1)

📅  最后修改于: 2023-12-03 14:49:10.502000             🧑  作者: Mango

什么是HTTP ETag?

在HTTP协议中,ETag是一个用于HTTP响应头中的实体标签。ETag的主要作用是帮助Web服务器判断一个资源是否被修改过,从而决定是否需要将新的资源返回给客户端。ETag一般在文件下载和缓存控制等场合中被广泛使用。

什么是ETag?

ETag实际上就是资源的唯一标识符,用来标示一个特定版本的资源。ETag的值由服务器根据响应的实体内容生成,并且在每次响应时都会随着响应头一起发送到客户端。

一般情况下,服务器会根据文件内容的摘要算法(如MD5),将文件内容转化为一个字符串作为ETag的值。由于摘要算法的结果是唯一的,因此ETag也就成为了一个可以精确标识一个资源的唯一标识符。

ETag的作用

ETag最主要的作用就是帮助Web服务器判断一个资源是否被修改过。当客户端请求一个资源时,服务器会根据请求头中的If-None-Match字段与资源的ETag进行比对。如果两者相等,那么说明资源没有被修改过,服务器可以返回一个特殊的响应头(304 Not Modified),告诉客户端直接使用本地缓存的资源即可;如果两者不相等,那么说明资源已经被修改过,服务器需要返回新的资源内容给客户端。

ETag的作用还包括了支持断点续传和实现强缓存、协商缓存等功能。

ETag的应用
强缓存

强缓存是指浏览器向服务器请求资源时,如果该资源存在缓存中,并且缓存没有过期,则直接使用缓存中的资源,不会向服务器重新请求资源。常见的强制缓存的方式有两种:Expires和Cache-Control,前者已经逐渐被后者替代。Cache-Control的值包括max-age和s-maxage两个部分,它们的单位都是秒。

如果想要强制浏览器再次请求同样的资源,可以通过改变该请求的ETag来实现,因为浏览器只要发现ETag发生了变化,就会重新请求服务器返回最新的资源。

协商缓存

协商缓存是指服务器收到客户端缓存过的资源请求后,通过比对资源的ETag值和Last-Modified时间来判断资源是否被修改过,并决定是否需要返回新的资源内容。协商缓存有两种方式:If-Modified-Since和If-None-Match。

其中,If-Modified-Since是指当客户端发送请求时,会发送该资源的Last-Modified字段给服务器,服务器通过比对该字段和当前资源的最后修改时间来判断资源是否被修改过,如果没有被修改,则返回特殊的响应头;如果被修改,则返回新的资源内容。

If-None-Match则是通过客户端发送请求时,发送资源的ETag值给服务器,服务器通过比对该值和当前资源的ETag来判断资源是否被修改过,如果没有被修改,则返回特殊的响应头;如果被修改,则返回新的资源内容。

总结

ETag是HTTP协议中的一个与缓存控制相关的实体标签,主要作用是帮助Web服务器判断一个资源是否被修改过,从而决定是否需要将新的资源返回给客户端。ETag的实现包括强缓存和协商缓存两种方式,它可以帮助Web开发者更好地控制资源的缓存,提高Web应用的性能和响应速度。