题目
http常见的状态码有哪些?
见知识点状态码
http常见的header有哪些?
见知识点常见header
什么是Restful API
见restful API的知识点 和method
描述一下http的缓存机制(重要)
见知识点缓存,重点:综述的图要可以画出来
知识点
状态码分类
- 1xx服务器收到请求
- 2xx请求成功,如200
- 3xx重定向,如302
- 4xx客户端错误,如404
- 5xx服务端错误,如500
常见状态码
- 200成功
- 301永久重定向(配合新地址,浏览器自动处理)
- 302临时重定向(配合location,浏览器自动处理)
- 304资源未被修改
- 404资源未找到
- 403没有权限
- 500服务器错误
- 504网关超时
关于协议和规范
- 就是一个约定
- 要求大家都跟着执行
- 不要违反规范,例如IE浏览器
http methods
传统的methods
GET获取服务器数据POST向服务器提交数据- 简单的网页功能,就这两个操作
- HEAD获取资源的响应消息报头(不常用)
现在的methods
GET获取数据POST新建数据PATCH/PUT更新数据DELETE删除数据TRACE请求回送收到的请求信息,主要用于测试或诊断(不常用)CONNECT请求建立连接隧道,一般在代理中使用(不常用)OPTION请求查询服务器的性能,或查询有关资源的可用选项(不常用)
Restful API
- 一种新的API设计方法
- 传统api设计:把每个url当做一个功能
- RestfulAPI设计:把每一个url当做一个资源
如何设计成一个资源?
- 尽量不用url参数
- 传统API设计:
/api/list?pageIndex=2 - Restful API设计:
/api/list/2
用method表示操作类型
- 传统:
- POST请求
/api/create-blog - POST请求
/api/update-blog?id=100 - GET请求
/api/get-blog?id=100请求使用get,增删改使用post,url的设计更像功能
restfulAPI设计
- POST请求
/api/blog - POST请求
/api/blog/100 - GET请求
/api/blog/100即从url上不知道请求的是什么功能只作为资源的唯一标识。method方法代表了使用的功能
http headers
常见的Requset Headers
Accept浏览器可接受的数据格式Accept-Encoding浏览器可接收的压缩算法,如 gzipAccept-Languange浏览器可接收的语言,如 zh-CNConnection:kepp-alive一次TCP连接重复使用cookieHost域名User-Agent(简称UA)浏览器信息Content-type发送数据的格式,get请求没有,如application/json
常见的Response Headers
Content-type返回数据的格式,如 application/jsonContent-length返回数据的大小,多少字节Content-Encoding返回数据的压缩算法,如 gzipSet-Cookie服务端向客户端设置 cookie
自定义 header
例子通过axios设置自定义请求头,一般可以用于简单的权限验证
缓存相关的headers
Cache-Control&ExpiresLast-Modified&If-Modified-SinceEtag&If-None-Match
http缓存
关于缓存
什么是缓存?
- 把没有必要重新获取的资源,存起来不再重新获取。
为什么需要缓存?
- 通过缓存减少网络请求数量和体积,让页面加载的更快。
哪些资源可以被缓存?
- 静态资源(js css img等)
- 可以通过哈希来判断文件是否被改变
http强制缓存
第一次请求
再次请求
缓存失效
再次请求服务端,重新设置资源
Cache-Control 新标准
- 在Response Headers
- 控制强制缓存的逻辑
- 例如Cache-Control:max-age = 31536000(单位是秒)
cache-control的值
max-age最大过期时间(单位秒);常见no-cache不使用强制缓存,向服务端请求,交给服务端处理;常见no-store不用强制缓存,不让服务端做缓存。private只允许最终用户做缓存public运行中间的路由和代理进行缓存
Expires 老标准
- 同在Response Headers中
- 同为控制缓存过期
- 已被Cache-Control代替
http协商缓存(对比缓存)
- 服务器端缓存策略:服务端判断一个资源是不是可以被缓存或者用缓存
- 服务器判断客户资源,是否和服务端一样
- 一致则返回304,否则返回200和最新资源
资源标识
- 在
Response Headers中,有两种 Last-Modified资源的最后修改时间Etag资源的唯一标识(一个字符串,类似人类的指纹)- 在
requset Header中,有两种与前两者对应 If-Modified-Since客户端向服务端发送由上次Last-Modifed发送来的时间数据If-None-Match客户端向服务端发送上次Etag发送来的资源唯一标识
流程示意:
Last-Modified:
Etag:
图例:
请求图例:
优先级
- 会优先使用Etag
- Last-Modified只能精确到秒级
- 如果资源被重复生成,而内容不变,则Etag更精确
综述
PS:有无缓存通过Cache-Control判断;是否过期通过max-age判断
三种刷新操作
- 正常操作:地址栏输入url,跳转链接,前进后退等
- 手动刷新:F5,点击刷新按钮,右击菜单刷新
- 强制刷新:ctrl+F5
不同刷新操作,不同缓存策略
- 正常操作:强制缓存有效,协商缓存有效
- 手动刷新:强制缓存失效,协商缓存有效
- 强制刷新: 强制刷新失效,协商缓存失效
https
http和https
- http是明文传输,敏感信息容易被中间劫持
- http = http+ 加密,劫持了也无法解密
- 现代浏览器已经开始强制在线上访问使用https协议
加密方式:对称加密,非对称加密
- 对称加密:一个key同负责加密,解密
- 非对称加密:一对key,A加密后,只能用B来解密。
https证书
- 中间人攻击
- 使用第三方证书(慎用免费,不合规证书)
- 浏览器效验证书