HTTP常见状态码
这里主要介绍运维过程中经常遇到的状态码。并通过业界流行的Nginx进行模拟实现,让大家能够对HTTP状态码有一个理性的认识(必会,牢记)
实验场景
操作系统 centos 7.3
实验用的软件包 nginx php-fmp php http-tools(直接使用yum仓库原生软件包)
yum -y install nginx php-fmp php http-tools
2xx状态码
2xx 类型的状态码表示一个HTTP请求成功(比如 200)
3xx状态码
3xx 类型状态码主要表示HTTP请求URL重定向行为(常见301,301,304)
301状态码
URL 永久性重定向,在nginx中通过rewrite指令结合permanent标记实现
302状态码
URL 临时重定向,在nginx中通过rewrite指令结合redirect标记实现
301与302的区别
301与302状态码都是URL重定向,其中301是永久,302是临时。不管是永久还是临时对于用户来说两者没有任何感官上的区别。都是在访问链接A时跳转到了链接B,并看到浏览器上的地址同样由A变成了B。
它们主要区别在于搜索引擎,搜索引擎是要建立索引规则和权重的,如果链接A被设定为永久重定向到B,那搜索引擎可以确定A的地址永久改变了,就会把B当做唯一有效的目标地址。这时搜索引擎会把老地址相关信息带到新地址,同时在搜索引擎库中彻底废弃原先的老地址,而搜索引擎对于302则没有这样的行为
304状态码
客户端缓存,通过nginx中的expires指令完成
4xx状态码
4xx 类型状态码主要表示客户端错误,客户端发起HTTP请求头不完整,客户使用的用户名,密码错误等,都会被标记为客户端错误。(常见400,401,403)
400状态码
当web服务器遇到不完整的HTTP请求头时,会返回400状态码。请求头信息或者Cookis信息过大,通常是导致不完整的请求头的原因。(由web服务器端的配置决定)
在nginx中这类web服务器中,决定这个值的配置字段是large_client_header_buffers。通过调整这个字段,可以模拟400状态码
401状态码
权限验证错误。就是需要用户名,密码等权限认证,但是客户端又没有通过认证。在nginx中想要模拟必须将nginx调整为认证模式。
403状态码
没有权限访问。文件权限过小或者人为设置不允许某个ip地址访问等,都会出现403状态码
404状态码
文件不存在,当我们访问一个不存在的文件时,就会出现404状态码。
499状态码
499这个状态码不是htto协议中定义的标准状态码,而是nginx自己定义的一个状态码
当客户端主动断开连接的时候,nginx就会返回499的状态码。按照这个状态码的定义,只要nginx返回结果之前主动断开客户端连接,就会出现499状态码。
5xx状态码
5xx 类型的状态码主要表示服务端错误,此时就不需要纠结客户端问题
500状态码
服务器端代码出现异常。代码语法错误,连接不上数据库等就会出现500状态码
502状态码
502 Bad Gateway。nginx 502错误的原因比较多,主要是因为在代理模式下后端服务器出现问题引起的。这个错误一般都不是nginx本身的问题,一定要从后端找原因。比如出现一种后端PHP-FPM进程挂掉的情况,就会出现502状态码。
504状态码
504 Gateway Time-ou 超时 当PHP-FPM的执行时间大于nginx的读超时时间,就会出现504状态码