http缓存的是指:当Web请求抵达缓存时, 如果本地有“已缓存的”副本,就可以从本地存储设备而不是从原始服务器中提取这个文档。
一、http有三种缓存方式:
1、强制缓存
服务端设置响应头Cache-Control:
1)max-age=xxx,并且设置Expires响应头过期时间,客户端自行判断是否读取缓存(Cache-Control: no-cache)
2)no-cache时,表示禁用缓存(Cache-Control: no-cache)
2、协商缓存
通过状态码304告诉客户端该走缓存
3、通过文件内容来缓存
1)修改文件时间:通过文件的最后修改时间判断该不该读取缓存,服务端设置响应头Last-Modified,通过文件的最后修改时间判断该不该读取缓存,服务端设置响应头Last-Modified。
客户端把上次服务端响应头中的Last-modified值通过if-modified-since 传递给服务端 , 服务端通过比较当前文件的修改时间和上次修改时间(上次传给客户端的值)。
xmlHttp.setRequestHeader("If-Modified-Since","0");
xmlHttp.setRequestHeader("Cache-Control","no-cache");
服务器检查参数值,如果文件没有改变则返回304,此时浏览器就访问本地缓存了。如果服务器上该文件被修改过,那么参数值就不一样,服务器就把最后的文件返回给浏览器。
2)修改文件内容:通过文件的内容来判断该不该读取缓存,服务端通过把文件指定的内容(如版本号)读取出来,通过md5进行base64加密得出hash值,把这个值设置响应头Etag,客户端下一次请求通过if-none-match带过来,服务端再比对当前文件内容加密得出的hash值和上次是否一样。
二、H5缓存
1、设置meta
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="0">
2、H5设置文件更新版本(或时间戳),通过更新文件后缀达到浏览器控制重新加载的作用。
网友评论