http状态码分类:
1**:服务器收到请求,需要请求者继续执行操作
2**:成功,操作被成功接收并处理
3**:重定向,需要进一步的操作以完成请求
4**:客户端错误,请求包含语法错误或无法完成请求
5**:服务器错误,服务器在处理请求的过程中发生了错误
状态码301:永久性转移
状态码302:临时性转移
301和302都代表重定向,浏览器拿到这个状态码后会自动跳转到新的url地址
抓取一个302临时重定向,新的url地址可以从响应标头的Location字段获取,在地址栏可以看到输入的A地址变为B地址。
不同点为301表示旧地址A的资源已经被永久移除了,302表示旧地址A的资源还存在。
状态码304:当浏览器请求未改变且已缓存的资源时,服务器会返回304状态码;告知浏览器,该资源从某个时间段之后没有改变,可以用在浏览器端缓存的资源
强缓存与协商缓存
1、强制缓存:
服务器通知浏览器一个缓存时间,在缓存时间内,下次请求直接使用缓存中的资源
Expires(http1.0的产物)
1、是一个绝对时间,是缓存过期时间
2、用以表达在这个时间点之前发起请求可以直接从浏览器中读取数据,而无需重新发起请求
3、用户可能将本读时间进行修改,从而导致浏览器判断缓存失效,重新请求资源
Cache-Control(http1.1的产物)
1、以时间间隔标识失效时间,解决了Expires服务器和客户端相对时间的问题
2、比Expires多了很多选项设置,如max-age、public等
Disk Cache 存储在硬盘中的缓存
Memory Cache 内存中的缓存
设置请求缓存:
<meta http-equiv="Cache-Control" content="max-age=7200" />
<meta http-equiv="Expires" content="Mon, 20 Jul 2013 23:00:00 GMT" />
2、协商缓存:
协商缓存每次读取数据都要和服务器通信,相关头信息为:Last-Modified/If-Modified-Since、ETag/If-None-Match,这两组头信息成对出现,前面为响应标头,后面为请求标头,通信后由服务器校验,返回304状态码时,浏览器直接使用缓存
Last-Modified/If-Modified-Since是http1.0的产物,表示服务器资源最后一次修改的时间(GMT格式)
ETag/If-None-Match是http1.1的产物,是服务器资源的唯一标识,服务器资源有变化则重新生成该标识
Last-Modified/If-Modified-Since
1、服务器通过Last-Modified告知浏览器资源最后一次修改时间,如下图,响应标头里有Last-Modified字段,浏览器将这个字段及其内容存入缓存数据库种
2、下一次请求该资源时,如刷新页面操作,浏览器会找出这个值写入请求头If-Modified-Since字段中
3、服务器收到这个值If-Modified-Since后与Last-Modified对比,如果相等,表示未修改,则响应304状态码,反之则表示修改了,响应200状态码并返回数据
该方式存在一定缺陷:如果是周期性重写,实际内容没有改变也会被记录改变
ETag/If-None-Match
1、服务器返回ETag,作为资源是否有变化的标识
2、浏览器在下一次发起请求时,会将上一次的ETag值赋给If-None-Match并放在请求标头中,服务器用这个值和上一次的值匹配,如果一致则返回304,浏览器相应读取本地缓存,否则返回200及新的资源