304 Not Modified是什么:
304 Not Modified不是服务器发出的错误,而是一种缓存机制
示例:
它的作用是什么?
它是服务器所承载的业务系统在开发时为了节省带宽和提升浏览器的体验
它对GET/js,css,image等执行了缓存机制。
客户端第一次对服务器发出GET请求,客户端浏览器缓存了该页面,
当客户端第二次对服务器发出同样的GET请求时,若客户端缓存中的标识过期,
客户端将向服务器发出GET请求,验证标识是否与web server中信息一致,
如果Get页面未做任何修改,服务器就是对客户端返回304 Not Modified,客户端直接 从本地缓存中将页面资源调取。
ETag是什么?
HTTP1.1中才加入的一个属性,它用来帮助服务器控制Web端的缓存验证。
它的作用是什么?
它的原理是这样的:
当浏览器请求服务器的某项资源(A)时, 服务器根据A算出一哈希值 (W/"28Ct+64YKTOA0jPTC7rzBS6GiLQRs")
并通过 ETag
返回给浏览器,然后浏览器把
etag:W/"28Ct+64YKTOA0jPTC7rzBS6GiLQRs"
和 A
同时缓存在本地 当下次再次向服务器请求A时,会通过类似 If-None-Match: W/"28-Ct+64YKTOA0jPTC7rzBS6GiLQRs"
的请求头把ETag
发送给服务器,服务器再次计算A的哈希值并和浏览器返回的值做比较,如果发现A发生了变化就把A返回给浏览器(200),如果发现A没有变化就给浏览器返回一个304未修改
。这样通过控制浏览器端的缓存,可以节省服务器的带宽,因为服务器不需要每次都把全量数据返回给客户端。