HTTP 中的常用状态码及使用场景

作为前端 , 经常需要从后端获取数据 , 所以对 HTTP 的掌握也是很重要的 。
其中 HTTP 状态码则代表了当前请求的状态 , 比如客户端还是服务端错误之类的 , 也是考的比较多的点
1xx 消息这类状态码 , 代表请求已被服务端接受 , 但服务端还要继续进行处理 。
100 Continue继续 。
服务端收到请求 , 并表示可以继续 。在客户端准备推送较大的数据时 , 可以用 100 表示允许 。
101 Switching Protocols切换协议 。
比较常见的是响应 WebSockets 连接 , 浏览器会先发送 HTTP 请求 , 在请求头里带上希望升级为 WebSockets 协议的相关信息 。
服务端收到后 , 如果支持 WebSockets , 就会返回这个状态码 101 , 进行 HTTP 到 WebSockets 的协议切换 。
2xx 成功这类状态码代表服务已被正常处理 。
200 OK成功 。
200 是用得最多的状态码 , 前端请求接口 , 数据正常返回 , 就会拿到这个状态码 。这是大家最喜欢看到的状态码 。
3xx 重定向代表客户端需要进行进一步操作才能完成请求 。
301 Moved Permanently永久重定向 。
请求的资源被永久移动到其他位置 。
假如我们的一篇博客的 url 地址发生了永久的改变 , 但用户收藏夹里的链接还是旧的 , 我们就可以在用户请求旧链接时 , 返回 301 状态码 , 并赋上一个重定向地址 。
HTTP/1.1 301 Moved PermanentlyLocation: http://www.example.org/index.asp这样用户就能跳到正确的新地址中 。
这新的重定向地址会被浏览器缓存 , 下次用户访问旧链接时 , 就不会发请求拿到 301 , 而是直接就跳到重定向地址了 。
所以设置重定向地址时要小心点 , 别搞错了 。
还有一个常用用途是 HTTP 链接跳转到 HTTPS 链接 。
比如我们访问 http://zhihu.com/ , 就会跳转到 https://www.zhihu.com/

HTTP 中的常用状态码及使用场景

文章插图
 
302 Found临时重定向 。
原始描述短语为 Moved Temporarily
适合一些临时的重定向操作 , 比如因为服务器崩溃导致一些页面无法提供正确的访问 , 在修复期间 , 则可以通过 302 先暂时地重定向到一个新的地址 。修复完后再让用户继续访问原链接 。
302 不会持久缓存 , 但可以设置缓存时间持续一段时间 。
HTTP/1.1 302 FoundLocation: https://www-temp.example.org/Cache-control: private; max-age=600304 Not Modified没有改变 。
304 指的是资源相比上次没有发生变化 , 客户端可以继续使用之前缓存的资源 , 以减轻浏览器负担 。
这里涉及到了 HTTP 缓存中的强缓存和协商缓存知识 。协商缓存中会用到 304 状态码 。
具体可以看我之前写的一篇文章:《HTTP 缓存策略:强缓存和协商缓存》
4xx 客户端错误客户端的问题 。
400 Bad Request不好的请求 。
通用的客户端错误 , 表示问题是出在客户端身上的 。比如传的参数不对 。
在前端和后端对接接口时 , 比较常看到这个错误 , 因为容易写错参数名 , 或者后端新增或修改了参数 。
404 Not Found不存在 。
广为人知的状态码 , 代表 url 对应资源不存在 。
比如一些文章被删除 , 是直接在数据库中进行不可逆地彻底删除的 。然后就导致用户访问这个页面时 , 服务器找不到对应数据 , 然后就返回一个 404 , 并提示 “页面不存在” 。
405 Method Not Allowed方法不被允许 。
请求方法没用对 , 比如一个请求应该用 POST , 你却用了 GET 请求 , 就会得到 405 。
拿到 405 通常说明你的 url 没错 , 错的是方法 。如果 url 也不对 , 你拿到的将是 404 。
5xx服务器错误服务端的问题 , 快去找后端 , 别老抓着前端一顿问 。
500 Internal Server Error内部服务错误 。
后端服务器的代码出了 bug , 比如读取了一个 null 的属性 , 就会导致服务无法正常运行下去 , 然后后端就会捕获(catch)这个错误 , 返回 500 , 告知是后端服务器出了问题 。
严重的情况下 , 后端服务直接崩溃 。


推荐阅读