了解HTTP状态码及其含义很重要,特别是在前端与后端的请求交互过程发生错误后排查错误的时候
5xx 服务器错误
- 500 服务器的
内部错误
可能是服务端内部编程语言的语法错误导致的
- 502 Bad Gateway 服务器自身是正常的,但访问的时候出错了,啥错误咱也不知道
- 503 服务器崩了
场景:
1、站点`遭到攻击`,在`超过限制`时报503错误,待攻击停止就可以恢复了;
2、站点`规模较大`,并发请求过多;
解决:这种建议修改优化程序或需要升级更高类型主机
3、程序有错误,在短时间内产生`多次工作进程崩溃`,会因IIS7的快速故障防护功能而关闭程序池;
4、站点提供下载,当`带宽超过限制`时会报错,需停止下载功能,或者升级主机解决。
4xx 请求错误
- 400 报文存在语法错误
场景:
前端提交数据的`字段名称`和`字段类型`与后端的真实数据`没有一致`;
解决:
比如前端提交数据到后台应该是`json字符串类型`,前端没有用`JSON.stringfy`将对象转化为字符串
- 401 Unauthorized 需要用户名和密码
场景:
对于`需要登录才能请求`的网页,如果该网页的服务器收到请求当中`没有cookie`或`token不匹配`的情况返回此响应
其中没有cookie可能是因为:1. 用户`没有登录`;2. 浏览器根据cookie的samesite字段作出`对csrf攻击的防范`
- 403 Forbidden 服务器拒绝访问
场景:
原本我们链接地址是https://www.ceshi.com; 但是不小心配置成了http://www.ceshi.com,最后就会导致403的报错
解决:就是将http改成https
细看了下:这个错误应该是403.4。403.4错误是由于要求SSL而造成的,您必须在要查看的网页的地址中使用"https"
- 404 Not Found 服务器上找不到请求资源
Web 服务器找不到您所请求的文件或脚本。请`检查 URL `以确保路径正确
- 405 请求方式不对
场景:
一般是GET和POST混淆,一般是`在POST的时候出现`的
Apache、IIS、Nginx等绝大多数web服务器,都`不允许静态文件响应POST请求`
解决:
把 POST `改成 GET`
- 408 Request Timeout 服务器等待了
太长时间
- 414 Request-URI Too Long:
请求行
里的 URI 太大 - 431 Request Header Fields Too Large
请求头
的字段内容太大 - 413 Request Entity Too Large:
请求体
的数据过大 - 429 Too Many Request: 客户端发送的
请求过多
3xx 用户需要进一步细化请求
- 301 被请求 url 永久转移到新的 url
- 302 被请求 url 临时转移到新的 url
详解:
301和302状态码都表示`重定向`,就是说浏览器在拿到服务器返回的这个状态码后会`自动跳转`到一个`新的URL地址`
这个新的地址可以从`响应头`的`Location首部`中获取
请求url是:http://localhost:8081/web/hello
问题:网址 URL 劫持(由302重定向造成的)
场景:
- 从网站A(
内容烂但URL简洁
)上做了一个302跳转到网站B(搜索排名很靠前但可能URL很长很乱
) - 有些搜索引擎有时(可能是因为A的网址简洁)会
使用网站B的内容
,但却显示收录了网站A的地址
- 网站B在为网站A作贡献,网站A
接管网站B的优秀排名
。从另一个角度讲,网站B的内容
被网站A窃取
了 解决: 向搜索引擎提供商如Google、Baidu提出举报
- 304 浏览器请求的资源跟缓存的资源一样
缓存机制详见 浏览器系列 -- 浏览器缓存 和 浏览器系列 -- CDN缓存
2xx
- 200 OK 表示请求成功,通常在
响应体
中放有数据 - 204 No Content 表示请求成功,但响应头后没有
body
数据 - 206 Partial Content 顾名思义,表示只是
部分内容
,它的使用场景为 HTTP分块下载
和断点续传
,当然也会带上相应的响应头字段Content-Range