Status Code 也是后端服务经常返回的状态码,试想一下,对于每个状态码,如果你能通过一些修改或配置来人为复现它,是不是会更利于你去掌握它呢?本文就是通过制造它们的方式来学习它们。
在超时的场景下会比较像,经常有人不能区分它们。产生的原因也常常会和会有内在的关联,你都了解吗?本文不光制造它们,而且会循序渐进,在对比之中制造它们。
复现环境说明
系统环境和软件环境为:。
再来介绍一下本文复现会用到的和的几个配置。
php-fpm配置:
所有复现场景都是在根目录下创建一个文件,然后通过访问 来查看响应,代码如下:
下面来逐一复现这些状态码的产生场景。
502
定义
,,网关错误,它往往表示网关从上游服务器中接收到的响应是无效的。
先来了解一下网关是什么含义,从宏观定义上来说只要连接两个不同的网络的设备都可以叫网关,其实具体到应用层请求这一领域,网关就是指是转发其他服务器通信数据的服务器,对于本文的复现环境而言,当客户端请求数据到达,负责把请求转交给(即)进行处理,那么在这个场景中就是网关。
并不是指网关本身出了问题,而是从上游接收响应出了问题,比如由于上游服务自身超时导致不能产生响应数据,或者上游不按照协议约定来返回数据导致网关不能正常解析。
复现路径1
关闭进程,返回。
这个比较容易理解,参照上面的定义,因为进程关闭,连接不上,即的上层无响应数据导致的网关错误。
错误日志如下:
复现路径2
启动进程,修改的和代码的时间来复现。
php代码:
php-fpm.conf配置:
nginx配置:
设置的最大执行时间是5s,但是脚本需要的执行时间大于7s,所以进程执行5s时就回退出,此时脚本没有正常执行完,返回给网关的数据为空,于是导致。
错误日志如下:
错误日志如下:
504
定义
,,网关超时。
它表示网关没有从上游及时获取响应数据。注意它和在超时场景下的区别,是指上游因为超过自身允许的执行时间而不能正常生成响应数据,而是指在还未执行完成的某一时刻,由于超过了自身的超时时间,则以为上游没有按照设置时间返回响应数据就会返回, 此时对于而言还会继续执行下去,直到执行完成。
复现路径
代码
配置:
配置:
脚本执行时间需要7s,远小于的一次请求的最大请求时间30s,所以脚本可以正常完成执行,这个可以查看文件内容来得到证明。
由于从读取数据的超时时间为5s,所以在5s的时科,还未从获取到响应数据,于是返回。
错误日志如下:
499
定义
, , 客户端主动断开连接。
是指一次http请求在客户端指定的时间内没有返回响应,此时,客户端会主动断开连接,此时表象为客户端无响应返回,而的日志中会 为。
此状态码在浏览器请求时几乎不可见,因为浏览器默认的超时时间会很长。多见于服务之间的调用,在业务架构中常常会分层设计,拆分为不同的子系统或者微服务,这样系统之间就会常常通过方式来请求,并且会设置每次请求的超时时间,当请求在请求时间内所调用的上游服务无返回,则会主动关闭连接,上游服务日志中会记录一条。
复现路径
我们用上面复现时相同的代码和配置。
代码
配置:
配置:
我们在终端使用命令来请求, 表示超时时间,单位为秒
返回为:
的日志的为,如下:
500
定义
, , 服务器内部错误,服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。
日常开发中错误几乎都是由于脚本语法出现错误导致无法正常执行。
复现路径
代码:
由于代码语法错误,执行失败,然后告诉这一结果,则返回。
错误日志:
总结
是由于超过客户端设置的请求超时时间,客户端主动关闭连接,服务器为。
多是由于代码语法错误,导致执行错误并且会把错误结果通知服务器,服务器则报。
是由于由于在自身的执行时间要求内无法按时完成,则无法返回给服务器正常响应,此时服务器会返回。
是在服务器设置的超时时间内无法按时返回响应,服务器则返回。
都会因为超时而产生,区别是超时超了谁的时,是超了客户端本身的连接时间,是超了的执行时间,是超了服务器本身的最大允许读取时间。
领取专属 10元无门槛券
私享最新 技术干货