常见的 HTTP 状态码以及代表的意义
1xx => Informational(信息性状态码),接受的请求正在处理
- 100 => 正在初始化(一般是看不到的)
- 101 => 正在切换协议(websocket 浏览器提供的)
2xx => Success(成功状态码),请求正常处理完毕
- 200 OK => 请求成功
- 201 Created => 创建用户,已成功创建
- 202 Accepted => 表示接受
- 204 No Content => 无内容
3xx => Redirection(重定向状态码),需要进行附加操作一完成请求
- 301 Moved Permanently => 永久重定向
- 302 Move Temporarily => 临时重定向(一般用来做服务器负载均衡)
- 304 Not Modified => 本次获取的内容是读取缓存中的数据,会每次去服务器校验
- 307 Temporary Redirect => 临时重定向(请求方法和消息主体不会发生改变)
- 308 Permanent Redirect => 永久重定向(请求方法和消息主体不会发生改变)
一、 Q:301和302的区别?(Cache和SEO)
- 使用301后,即使服务器删除了重定向。由于301会产生浏览器缓存仍旧自动重定向到新网址。
- 使用302后,SEO仍旧会将新的内容收录到旧的网址中,而使用301后,SEO会将新的内容收录到新的网址中。
二、 Q:302和307的区别?(301和308的区别是同理的)
- 同样为临时重定向,当发送重定向请求的时候,307 状态码可以确保请求方法和消息主体不会发生变化。
- 当你返回302状态码并且使用了GET以外的请求方法,老的浏览器会帮你转换成GET请求,意味着302后重定向的请求方法会发生变化。但如果使用 307 状态码,之后的请求方法就是可预测的。(由原理可知,使用GET请求时两者没有区别)
三、 Q:304的强缓存和协商缓存
四、 Q:403什么时候会出现
- 爬虫爬的太多了给予IP无法访问的权限
4xx => Client Error (客户端错误状态码),服务器无法处理请求
- 400 Bad Request => 语法错误,请求参数有误
- 401 Unauthorized => 身份未认证,没有登录网站
- 403 Forbidden => 禁止访问,没有权限
- 404 Not Found=> 资源不存在
- 405 Method Not Allowed => 服务器禁止了使用当前HTTP方法的请求
- 409 Conflict => 编辑冲突
5xx => Server Error(服务器错误状态码),服务器处理请求出错
- 500 Internal Server Error => 未知错误,内部错误
- 502 Bad Gateway => 网关错误
- 503 Service Unavailable => 服务器超负荷,当前无法处理请求(假设一台服务器只能承受 10000 人,当第 10001人访问的时候,如果服务器没有做负载均衡,那么这个人的网络状态码就是 503)
- 504 Gateway Timeout => 网关超时
- 505 HTTP Version Not Supported => 服务器不支持请求的 HTTP 协议的版本,无法完成处理。
洗尽铅华始见金,褪去浮华归本真