前言
标*
号的表示平常可能会常遇见的,也是平时容易遇到,面试可能会考到的。
状态码
1开头
1开头的一般表示服务器收到请求了,但是认为请求还没发送完全
状态码 | 说明 |
---|---|
100 | 这个状态码是告诉客户端应该继续发送请求,这个临时响应是用来通知客户端的,部分的请求服务器已经接受,但是客户端应继续发送求请求的剩余部分,如果请求已经完成,就忽略这个响应,而且服务器会在请求完成后向客户发送一个最终的结果; |
101 | 表示要把请求协议改成HTTP2,不支持老版本了 |
2开头
2开头表明服务器正常接收到数据,并且返回响应
状态码 | 说明 |
---|---|
* 200 | 这个是最常见的http状态码,表示服务器已经成功接受请求,并将返回客户端所请求的最终结果; |
202 | 表示服务器已经接受了请求,但是还没有处理,而且这个请求最终会不会处理还不确定; |
204 | 服务器成功处理了请求,但没有返回任何实体内容 ,可能会返回新的头部元信息; |
3开头
3开头表示重定向,资源位置变化了
状态码 | 说明 | 场景 |
---|---|---|
* 301 | 客户端请求的网页已经永久移动到新的位置,当链接发生变化时,返回301代码告诉客户端链接的变化,客户端保存新的链接,并向新的链接发出请求,已返回请求结果; | 例如你访问一个网站,结果这个网址到期了,后端给你返回的响应请求头中的location就是新的地址,浏览器自动跳转到新的网址,并且永久记录新地址,下次直接访问新地址 |
* 302 | 表示临时性重定向。区别于301,浏览器不会记住新地址,每次访问还是先去旧地址,后端返回location再去新地址 | 例如搜索引擎搜索出来的一条条外网的链接,当你点击其中一条时,是先进入搜索引擎的对应这条结果的地址,然后才重定向到真正的外网地址。类似的还有短网址。 |
* 304 | 服务端资源未被修改,还可以使用你本地的资源 |
4开头
4开头表示发的请求有问题,问题在客户端那边
状态码 | 说明 | 场景 |
---|---|---|
400 | 请求的东西服务端完全无法理解 | 发送请求附带的参数格式有问题,一般是数据类型的问题; |
* 401 | Token码过期 | |
* 403 | 理解了你的请求,但是服务器拒绝或者禁止访问 | 无用户权限 |
* 404 | 客户端请求的资源没有找到或者是不存在; | 后端这个接口不存在;资源不存在; |
405 | 请求的方式和文档所提供的不符合; | |
415 | 发送的数据格式有错误,可用JSON.stringify()解决; |
5开头
5开头一般都是服务器端的问题
状态码 | 说明 | 场景 |
---|---|---|
* 500 | 服务器遇到未知的错误,导致无法完成客户端当前的请求; | 1.说明后端写的代码有问题;2.在重复添加同一信息的用户后,出现500报错;通过resource获取的错误信息可以知道,后台会返回一个错误的信息,提示“该用户已经注册”;3.还有可能是请求的参数写错了,没按文档来; |
503 | 服务器由于临时的服务器过载或者是维护,无法解决当前的请求 | |
* 504 | 网关超时 |
补充
因为有些状态码对应的情况是多场景的(也就是一对多),所以有时候并不能通过状态码去准确的定位请求问题(例如500)。
一般后端会设计成失败都响应500,然后通过一个字段描述具体失败的原因。
附上一个不错的状态码对照表。
请求方法
get
获取数据post
新建数据options
是浏览器自行发起的请求,例如用来测试服务端支持哪些类型的请求方法、或者做请求预检patch/put
更新数据delete
删除数据- …其他不常见
大多数公司都只使用到get和post,post的功能涵盖了修改删除等。
post和get的区别
- get不会有请求体,数据都附带在url中,只能传递少量的数据;post有请求体,可以传输大量的数据。
- get由于参数都暴露在url中,如果有敏感数据,会变得不安全。
- get只支持appliacation-x-www-form-urlencoded编码,而post可以设置Content-Type支持多个编码。
- get请求只会发送一次,post会先发送一个预检options请求,发送内容为header,然后服务器响应100,浏览器才继续发送一个完整的post请求。
其他的区别我觉得不重要就不记录了
Restful API
- 一种新的API设计方法;
- 传统api设计:把每个url当做一个功能;restful api当做一个唯一的资源;
来理解第二句,举例一个查询地址,传统的api地址一般为/user/list?page=1
,而restful api是/user/list/1
。传统的地址一下子就能读出功能是什么,而restful api其实单纯看地址是看不出来功能的,还需要配合最新的请求方法定义,例如get,就能知道是查询操作,查询第一页的用户列表。同理post、patch、delete都一样。