http状态码
状态码分类
- 1xx 服务器收到请求
- 2xx 请求成功,如200
- 3xx 重定向,如302
- 4xx 客户端错误,如404
- 5xx 服务端错误,如500
常见状态码
- 200 成功
- 301 永久重定向(一般用于老域名过期,永久跳到新地址)
- 302 临时重定向(每次都访问老地址,在跳到新地址,搜索引擎用的比较多)
- 304 资源已被请求过且未被修改 not modified
- 401 Unauthorized当前请求需要用户验证
- 403 Forbidden 服务器已经收到请求,但拒绝执行 //没有权限
- 404 Not Found 服务器无法根据用户的请求找到资源 //文件不存在或者请求路径有问题
- 500 服务器错误
- 504 网关超时
关于协议和规范
- 就是一个约定
- 要求大家都了解并遵循
- 不要违反规范,例如IE浏览器被淘汰
http methods
传统的methods
- get 获取服务器的数据
- post 向服务器提交数据
- 简单的网页功能,就这两个操作
现在的methods
- get 获取数据
- post 新建数据
- path/put 更新数据
- delete 删除数据
Restful API
- 一种新的API设计方法(早已推广使用)
- 传统API设计:把每个url当做一个功能
- Restful API设计:把每个url当做一个唯一资源
- 尽量不用url参数
- 传统API设计:/api/list?pageIndex=2
- Restful API设计:/api/list/2
- 用method表示操作类型
- 尽量不用url参数
http headers
常见的 Request Headers
- Accept:浏览器可接受的数据格式
- Accept-Encoding:浏览器可接受的压缩算法,如gzip
- Accept-Languange浏览器可接受的语言,如zh-CN
- Connection:keep-alive一次TCP连接可以重复使用
- cookie
- Host
- User-Agent(简称UA)浏览器信息
- Content-type发送数据的格式,如application/json、text/html
常见的 Response Headers
- Content-type: 返回数据的格式,如application/json
- Content-length: 返回数据的大小,多少字节
- Content-Encoding: 返回数据的压缩算法,如gzip
- Connection:keep-alive 一次TCP连接重复使用
- Set-Cookie: 服务端需要通过该字段来修改浏览器中的cookie
缓存相关 Headers
- Cache-Control Expires
- last-Modified if-Modified-Since
- etag if-None-Match
http 缓存
关于缓存的介绍
- 什么是缓存?
保存资源副本并在下次请求时直接使用该副本的技术。当Web缓存发现请求的资源已经被存储,它会拦截请求,返回该资源的拷贝,而不会去源服务器重新下载。 - 为什么需要缓存
- 减少不必要的网络请求,使得页面加载更快;
- 网络请求是不稳定,加大了页面加载的不稳定性;
- 网络请求的加载相比于cpu加载 & 页面渲染都要慢.
- 哪些资源可以被缓存
静态资源(js、css、img)
http缓存策略(强制缓存 + 协商缓存)
- 强制缓存
- 什么是Cache-Control
- 哪些文件可以缓存,需要服务端进行设置。
- Response Headers 中
- 控制强制缓存的逻辑
- 例如:Cache-Control:max-age = 31536000(单位是秒)
- 图示
- Cache-Control的值:
- max-age : 最长过期时间(秒)
- no-cache : 不用本地强制缓存,正常向服务端请求资源,由服务端决定缓存措施
- no-store (不常见): 不用本地强制缓存,也不用服务端的缓存措施(协商缓存),直接由服务端返回新资源
- private : 只允许最终用户缓存
- pubilc : 用户和中间的代理都能缓存资源
- 什么是Cache-Control
- 协商缓存(对比缓存)
- 服务器端缓存策略(不是在服务器端缓存)
- 服务器判断客户端资源,是否和服务端资源一样
- 一致则返回304,否则返回200和最新的资源
- 图示
- 资源标识(在Response Headers中)
- Last-Modified资源的最后修改时间
- 图示
- 图示
- Etag资源的唯一标识(一个字符串,类似人类的指纹)
- 图示
- 图示
- 二者区别
- 会优先使用Etag
- last-Modified 只能精确到秒级
- 如果资源被重复生成,而内容不变,则Etag更精准
- Last-Modified资源的最后修改时间
- 缓存综述流程图
刷新操作方式,对缓存的影响
- 正常操作 : 地址栏输入url ,跳转链接,前进后退等 ; 两种缓存都有效
- 手动刷新 : F5 ,点击刷新按钮,右击菜单刷新 ; 仅协商缓存有效
- 强制刷新 : ctrl +f5 cmd + r ; 都无效