阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

HTTP常用状态码分析

134次阅读
没有评论

共计 3388 个字符,预计需要花费 9 分钟才能阅读完成。

不管是面试还是工作中,经常会碰到需要通过 HTTP 状态码去判断问题的情况,比如对于后台 RD,给到前端 FE 的一个接口,出现 502 或者 504 error 错误,FE 就会说接口存在问题,如果没有知识储备,那就只能 RD 自己背锅 … 但是这其实更多是需要运维 OP 去排查。

状态码的分类

1XX:Infomational(信息性状态码)接收的请求正在处理

2XX:Success(成功状态码)请求正常处理完毕

3XX:Redirection(重定向状态码)需要进行附加操作以完成请求

4XX:Client Error(客户端错误状态码)服务器无法处理请求

5XX:Server Error(服务器错误状态码)服务器处理请求出错

2XX 成功

2XX 的响应结果表明请求被正常处理了。

200 OK

表示从客户端发来的请求在服务器端被正常处理了。

在响应报文中,随状态码一起返回的信息会因方法的不同而发生改变。比如,使用 GET 方法时,对应请求资源的实体会作为响应返回;而使用 HEAD 方法时,对于请求资源的实体首部不随报文主体作为响应返回(即在响应中只返回首部,不会返回实体的主体部分)。

204 No Content

该状态码代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。另外,也不允许返回任何实体的主体。比如,当从浏览器发出请求处理后,返回 204 响应,那么浏览器显示的页面不发生更新。

206 Partial Content

该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的 GET 请求。响应报文中包含有 Content—Range 指定范围的实体部分。

3XX 重定向

3XX 响应结果表明浏览器需要执行特殊的处理以正确处理请求。

301 Moved Permanently

永久性重定向。被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一。如果可能,拥有链接编辑功能的客户端应当自动把请求的地址修改为从服务器反馈回来的地址。这是应该按 Location 首部字段提示的 URI 更新。

302 Found

临时性重定向。请求的资源现在临时从不同的 URI 响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在 Cache-Control 或 Expires 中进行了指定的情况下,这个响应才是可缓存的。


301 和 302 的区别

301 适合永久重定向,比较常用的场景是做域名跳转。

比如访问 http://localhost/301.php 会重定向到 http://localhost/a.php

HTTP 常用状态码分析

如上图,请求后的状态码为 301,并在返回头的 Location 中会指明重定向的目标地址。

302 用来做临时跳转,

比如未登陆的用户访问用户中心重定向到登陆页面、访问 404 页面会自动重定向到首页等等

nginx 301、302 配置

rewrite 后面接上 permanent 就代表 301 跳

// 把来自 301.php 的请求 301 跳到 www.301.php
if ($host != '301.php') {rewrite ^/(.*)$ http://a.php/$1 permanent;
}

接上 redirect 代表 302 跳

// 把来自 301.php 的请求 301 跳到 www.301.php
if ($host != '301.php') {rewrite ^/(.*)$ http://a.php/$1 redirect;
}

303 See Other

该状态码表示由于请求对应得资源存在着另一个 URI,应使用 GET 方法定向获取获取请求的资源。

303 和 302 有着相同的功能,但是 303 状态码明确表示客户端采用 GET 方法获取资源。

304 Not Modified

该状态表示客户端发送附带条件的请求时,服务端允许请求访问资源,但未满足条件的情况。304 状态码返回时,不包含任何响应的主体部分。304 虽然被划分到 3XX 类别中,但是没有和重定向相关。

307 Temporary Redirect

临时重定向。该状态码与 302 Found 有着相同的含义。

当 301、302、303 响应状态码返回时,几乎所有的浏览器都会把 POST 改成 GET,并删除请求报文内的主体,之后请求会自动再次发生。

但是 301、302 标准是禁止将 POST 方法改变成 GET 方法的,虽然大家都这么做了。

所以 307 会遵照标准,不会从 POST 变为 GET。但是响应时的行为,每种浏览器有可能出现不同的情况。

4XX 客户端错误

4XX 的响应结果表明客户端是发生错误的原因所在。

400 Bad Request

该状态码表示请求报文中存在错误。当错误发生时,需修改请求的内容后再次发生请求。另外,浏览器会像 200 OK 一样对待该状态码。

401 Unauthorized

该状态码表示发送的请求需要有通过 HTTP 认证的认证信息。另外若之前已进行过 1 次请求,则表示用户认证失败。

返回含有 401 的响应必须包含一个适用于被请求资源的 WWW-Authenticate 首部用以质询用户信息。当浏览器初次接收到 401 响应,会弹出认证用的对话窗口。

403 Forbidden

该状态码表明对请求资源的访问被服务器拒绝了。服务器端没有必要给出拒绝的详细理由,但如果想作说明的话,可以在实体的主体部分对原因进行描述,这样就能让用户看到了。

未获得文件系统的访问授权,访问权限出现某些问题等情况都可能出现 403。

404 Not Found

该状态码表明服务器上无法找到请求的资源。除此之外,也可以在服务器端拒绝请求且不想说明理由时使用。

5XX 服务器错误

5XX 的响应结果表明服务器本身发生错误。

500 Internal Server Error

该状态码表明服务器端在执行请求时发生了错误。也可能是 Web 应用存在的 bug 或某些临时的故障。

503 Service Unavailable

该状态码表明服务器暂时处于超负荷或正在进行停机维护,现在无法处理请求。如果事先得知解除以上状况需要的时间,最好写入 RetryAfter 首部字段再返回给客户端。

502 Bad Gateway

将请求提交给网关如 php-fpm 执行,但是由于某些原因没有执行完毕导致 php-fpm 进程终止执行。说到此,这个问题就很明了了,与网关服务如 php-fpm 的配置有关了。

php-fpm.conf 配置文件中有两个参数就需要你考虑到,分别是 max_children 和 request_terminate_timeout。
max_children 最大子进程数,在高并发请求下,达到 php-fpm 最大响应数,后续的请求就会出现 502 错误的。可以通过 netstat 命令来查看当前连接数。

request_terminate_timeout 设置单个请求的超时终止时间。还应该注意到 php.ini 中的 max_execution_time 参数。当请求终止时,也会出现 502 错误的。

当积累了大量的 php 请求,你重启 php-fpm 释放资源,但一两分钟不到,502 又再次呈现,这是什么原因导致的呢?这时还应该考虑到数据库,查看下数据库进程是否有大量的 locked 进程,数据库死锁导致超时,前端终止了继续请求,但是 SQL 语句还在等待释放锁,这时就要重启数据库服务了或 kill 掉死锁 SQL 进程了。

总而言之,502 错误主要从四个方向入手:

  1. max_children
  2. request_terminate_timeout、max_execution_time
  3. 数据库
  4. 网关服务是否启动如 php-fpm

504 Gateway Time-out

504 错误一般是与 nginx.conf 配置有关了。主要与以下几个参数有关:fastcgi_connect_timeout、fastcgi_send_timeout、fastcgi_read_timeout、fastcgi_buffer_size、fastcgi_buffers、fastcgi_busy_buffers_size、fastcgi_temp_file_write_size、fastcgi_intercept_errors。特别是前三个超时时间。如果 fastcgi 缓冲区太小会导致 fastcgi 进程被挂起从而演变为 504 错误。

504 错误主要查看 nginx.conf 关于网关如 fastcgi 的配置。

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-01/139338.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计3388字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中