一、http常见的状态码
1.状态码分类
1xx 服务器收到请求
2xx 成功,操作被成功接收并处理
3xx 重定向,需要进一步的操作以完成请求(eg.请求的资源已移动到新的地址)
4xx 客户端错误,请求包含语法错误或无法完成请求
5xx 服务器错误,服务器在处理请求的过程中发生了错误
2.常见状态码
200:成功
301:永久重定向(配合location,浏览器自动处理)
302:临时重定向(配合location,浏览器自动处理)
304:缓存,资源未被修改
404:资源未找到
403:没有权限
500:服务器错误
504:网关超时
二、什么是Restful API
1.传统的methods
get 获取服务器的数据
post 向服务器提交数据
2.现在的methods
get 获取数据
post 新建数据
patch/put 更新数据
delete 删除数据
3.Restful API:一种新的API设计方法
传统API设计:把每个url当做一个功能
Restful API:把每个url当做一个唯一的资源的标识
4.如何设计成一个资源?
①尽量不用url参数
传统API设计:【请求第二页数据 】 /api/list?pageIndex=2
Restful API设计:【请求第二页数据】/api/list/2 // 唯一资源的标识,第二页的一个标识
②用method表示操作类型
传统API设计:
post请求 【创建一个博客】/api/create-blog
post请求 【更新一个博客】/api/update-blog?id=1
get请求 【获取一个博客】/api/get-blog?id=1
Restful API设计:
post请求 【创建新的blog数据】/api/blog // 整个blog的资源标识
patch请求 【更新id=1的blog】/api/blog/1 //id=1的资源标识
get请求 【获取id=1的blog】/api/blog/1 //id=1的资源标识
三、http常见的header
1.Request Headers
1.Accept 浏览器可接收的数据格式
2.Accept-Encoding 浏览器可接收的压缩算法,如gzip
3.Accept-Language 浏览器可接收的语言,如zh-CH
4.Connection:keep-alive 一次TCP连接重复使用
5.cookie 每次同域请求资源的时候都会把cookie带上
6.Host 请求的域名
7.User-Agent(简称UA) 浏览器信息
8.Content-type 发送数据的格式
2.Response Headers
1.Content-type 返回数据的格式,如application/json
2.Content-length 返回数据的大小
3.Content-Encoding 返回数据的压缩算法,如gzip
4.Set-Cookie 服务端要去改cookie的时候通过Set-cookie
3.自定义header
可以在Request Header、Response Header里面自定义header。例如:有些接口要求在headers里加一个密钥才能通过请求,否则认为你是非法请求
4.缓存相关headers
Cache-Control
Expires
Last-Modified
If-Modified-Since
Etag
If-None-Match
四、http缓存策略(强制缓存+协商缓存)
1.强制缓存
(1)Cache-Control
1.在Response Header中
2.由Cache-Control控制强制缓存的逻辑(本质是由服务端控制的)
3.举例:Cache-Control:max-age=31536000(单位是秒)【把js文件缓存一年的时间】
4.cache-control的值
max-age 设置缓存过期时间
no-cache 不用本地缓存,到服务端去请求,至于服务端怎么处理我们不管
no-store 不用本地缓存,而且不用服务端的一些缓存措施
private 只允许最终用户做一些缓存(比如电脑,手机,浏览器)
public 允许中间的一些路由或代理做缓存
(2)Expires
1.同在Response Headers中
2.同为控制缓存过期
3.已经被Cache-Control代替
2.协商缓存
是服务端缓存策略,即由服务端来判断资源是否能被缓存或是否可以用缓存
服务端判断客户端资源是否和服务端资源一样
怎么告诉客户端:返回304,否则返回200和最新的资源
1.资源标识在Response Header中
2.资源标识有两种
Last-Modified 资源的最后修改时间
Etag 资源的唯一标识(一个字符串,类似人类指纹不重复)
3.优先使用Etag(如果资源被重复生成,而内容不变,则Etag更精确(Etag是根据内容计算的))