常用状态码
200 请求返回成功
301 永久重定向
302 临时重定向
304 资源未更改(对应笔记中客户端缓存)
400 客户端代码错误
401 未认证
403 forbidden,服务端理解客户端的请求,但拒不执行
404 页面,资源找不到
405 请求方法不被允许
500 服务端不可预知的错误
502 bad gateway 网关请求服务器拿到无效返回
503 系统当前不可用
504 服务器超时
由304引出的客户端缓存
HTTP1.0时使用expires来保存失效时间,当响应头有这个字段时,浏览器强制缓存,即,下次再访问这个文件,直接从缓存中读取,不向服务器发送请求
缺点:这个时间是服务端返回的服务端时间,客户端时间与服务端时间可能不一致
HTTP1.1时使用cache-control作为是否缓存以及缓存策略的字段
cache-control:
1. no-store 不进行任何形式缓存
2. no-cache 不直接使用缓存,其实在浏览器是存储了的,进程内存/硬盘,需要请求服务端进行校验资源是否修改,未修改则返回304,空body,使用缓存,不然,重新返回响应体,状态码200 协商缓存
3. max-age 这个时间之内都可以直接从缓存中获取,不用重新请求,强缓存
4. private 只能客户端缓存,不允许代理服务器进行缓存
5. public 都可以进行,客户端以及代理服务器,如cdn
返回的max-age = 0与no-cache等价,都是每次都去服务器校验更新状态
浏览器请求过程
浏览器第一次访问请求,服务器返回Last-Modified(服务器最后修改文件的时间),Etags(当前文件的版本),如果是no-cache或max-age则将响应体和缓存标识存入浏览器缓存中
第二次请求,max-age直接从缓存中获取数据,no-cache从缓存中获取标识去请求服务端,字段为if-modified-since和if-None-Match,先校验if-None-Match与服务器etags,再校验if-modified-since,如果没有更改,则返回标识和空的响应体,状态码304,资源未改变,不然返回200及新的缓存标识和响应数据
使用if-modified-since缺点
1. 如果资源修改时间更新了,但是内容没有修改,那么达不到缓存的目的
2. 如果资源在毫秒之间更改,但是缓存的last-modified时间保存的是秒,这时候是不应该使用缓存的
强缓存:减少请求,就减少了带宽时间,强缓存未失效的话返回状态码永远是200
协商缓存:请求数不变,但是304状态只会返回空的响应体,节省传输时间
网友评论