持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第19天,点击查看活动详情
前言
响应码伴随着前后端联调的始终,也是HTTP协议中的一个重要的部分,今天我们梳理一下所有的响应码,以及这些响应码背后的知识;先把所有响应码列成一个表格:
响应码 | 含义 | 备注(*号的需要牢记) |
---|---|---|
1xx | 请求正在处理 | * |
100 | 继续 | |
101 | 交换协议 | |
2xx | 请求成功 | * |
200 | 成功 | |
201 | 已创建 | |
202 | 接收 | |
203 | 非权威信息 | |
204 | 无内容 | 没有内容为什么不返回200呢? |
205 | 重置内容 | |
206 | 部分内容 | 经常用在范围请求中 |
3xx | 重定向 | * |
300 | 多选择 | |
301 | 永久重定向 | * |
302 | 临时重定向 | * |
302 | ||
303 | ||
304 | 未修改 | * |
305 | 使用代理 | |
306 | 未使用 | |
307 | 临时重定向 | |
4xx | 客户端错误 | *,注意不一定是前端的错 |
400 | 请求错误 | |
401 | 无授权 | * |
402 | 所需付款 | |
403 | 禁止访问 | * |
404 | 未找到 | * |
405 | 方法不允许 | * |
406 | 不可接受 | |
407 | 需要代理身份验证 | |
408 | 请求超时 | |
409 | 冲突 |
204
返回的Response只有Header和状态行,没有response body,通常用来查看Header看看资源是否被修改
206
206代表服务器已经成功处理了部分GET请求,其他请求不会发送此状态码
-
实现断点续传
-
分片下载:比如说在线看一个很大的视频,一般都是边看边下载;浏览器会不断发送206请求,得到的内容就是缓冲,当缓冲完了整个视频就都可以观看任意进度了
301 302
301是永久重定向,302是临时重定向,它们有什么区别呢?
主要是对于SEO的影响,对301搜索引擎会把301之前的网站等同于301跳转之后的,而如果网站出现302那么搜索引擎会认为网站不稳定而直接忽略掉,所以要做SEO排名的网站不要有302响应码
301,302都可以在Nodejs中配置,以express为例
const app = express();
app.use('/redirect',(req,res)=>{
res.redirect(301,"//www.baidu.com")
})
304
协商缓存,这个状态码非常重要
304对应的两种缓存策略,一个是etag / if-none-match
:服务端返回资源时,如果头部带上了etag,那么资源下次请求时就会把值加入到头if-none-match
中,服务端可以对比这个值,确定资源是否变化,未变化则返回304
另一个是last-modified / if-modified-since
:服务器端返回资源时,如果头部带上了 last-modified,那么资源下次请求时就会把值加⼊到请求头 if-modified-since中,服务器可以对⽐这个值,确定资源是否发⽣变化,如果没有发⽣变化,则返回 304
400
400的提示就是客户端错误,但是并不是那么简单,有的时候可能是前端的请求方法或者参数写错了,也有可能是后端的问题
401
一般未登录应该返回401,所以我们需要在axios中设置响应拦截器,当状态码为401时跳转到登录页面;
axios.interceptors.response.use(function (response) {
if(response?.data?.code===401){
window.location.href = '//www.baidu.com'
}
return response;
});
403 404 405
403是禁止访问,一般由资源服务器设置,一般是为了安全而设置的
404是未找到资源
405前端发的请求方法与后端需要的不一致,比如后端需要POST请求而前端用的GET请求,这个时候后端可能会返回405当然也有可能返回400
5xx
如果遇到5xx错误不用问,肯定是服务端的问题了
总结
这些状态码可能在面试过程中会经常考到,但是也不需要死记硬背;只要先记住某一类,那么后面具体的状态码就好记多了