优秀的编程知识分享平台

网站首页 > 技术文章 正文

HTTP状态码和CURL 返回码简介(嫦娥六号携月背采样返回)

nanyue 2024-10-23 12:07:58 技术文章 2 ℃

什么是 HTTP 状态码?

HTTP 状态码由服务器响应浏览器对服务器的请求而发出的状态信息。

HTTP 状态码有官方、非官方、扩展以及自定义等几种,相同的状态码在不同的环境下有可能有不同的含义。作为运维人员,对于常见的 HTTP 状态码肯定并不陌生且张口就来,但也有一些状态码可能职业生涯结束也不会遇见。

背景

前段时间在使用 curl 测试一个网站请求的时候,发现返回码是 000,甚是觉得奇怪。那么今天我们来一起看看 curl 返回的 000 到底是什么鬼?

标准状态码

一个运维、开发人员我们需要熟知的状态码有哪些呢,下面会列举一些生产环境中常见的标准状态码:

2XX 成功

200 - OK,服务器成功返回网页

- Standard response for successful HTTP requests.

3XX 重定向

301 - Moved Permanently(永久跳转),请求的网页已永久跳转到新位置。

- This and all future requests should be directed to the given.

302 - Moved Temporarily(临时跳转),请求的网页已临时跳转到新位置。

4XX 客户端错误

401 - Unauthorized(未经授权),与 403 Forbidden 类似,但是专门用于需要身份验证且失败或尚未提供的情况。

403 - Forbidden(禁止访问),服务器拒绝请求

- forbidden request (matches a deny filter) => HTTP 403

- The request was a legal request, but the server is refusing to respond to it.

404 - Not Found, 服务器找不到请求的页面。

- The requested resource could not be found but may be available again in the future.

5XX 服务器错误

500 - Internal Server Error(内部服务器错误)

- internal error in haproxy => HTTP 500

- A generic error message, given when no more specific message is suitable.

502 - Bad Gateway(坏的网关), 一般是网关服务器请求后端服务时,后端服务没有按照 http 协议正确返回结果。

- the server returned an invalid or incomplete response => HTTP 502

- The server was acting as a gateway or proxy and received an invalid response from the upstream server.

503 - Service Unavailable(服务当前不可用), 可能因为超载或停机维护。

- no server was available to handle the request => HTTP 503

- The server is currently unavailable (because it is overloaded or down for maintenance).

504 - Gateway Timeout(网关超时), 一般是网关服务器请求后端服务时,后端服务没有在特定的时间内完成服务。

- the server failed to reply in time => HTTP 504

- The server was acting as a gateway or proxy and did not receive a timely response from the upstream server.

* 提示:在 Web 领域 nginx 的盛行程度非常高,加上目前多数网站都在大量使用 HTTPS,故大家还需要关注 nginx 扩展的 4XX 状态码(跟 SSL 相关)。

返回码 000 是什么呢?

简单点说:就是没有得到有效的 HTTP 请求响应。那么出现 000 的情况又有哪些呢?下面会罗列一些可能导致 000 返回码的情况,但不限于以下情况:

Failed DNS resolution (6)
$ curl -w "%{http_code}\n" http://example.invalid/ ; echo "Exit code: $?"000curl: (6) Could not resolve host: example.invalid
Exit code: 6
Connection refused (7)
$ curl -w "%{http_code}\n" http://localhost:81/ ; echo "Exit code: $?"000curl: (7) Failed to connect to localhost port 81: Connection refused
Exit code: 7
Connection timed out (28)
$ curl -w "%{http_code}\n" -m 5 http://10.255.255.1/ ; echo "Exit code: $?"000curl: (28) Connection timed out after 5001 milliseconds
Exit code: 28
Server actually returns 000 for some reason (0)

开启一个监听端口:

nc -l -p 65535 & <<EOF
HTTP/1.1 000 Fake Status Code
Content-Length: 0Connection: close
EOF

客户端请求:

$ curl -w "%{http_code}\n" http://localhost:65535/ ; echo "Exit code: $?"000Exit code: 0

* 提示:脚本测试时记录日志,curl 参数:-sS , 然后将 curl 的错误 2>> /tmp/err.log。

总结

对于生产环境中常用的状态码我们需要非常熟悉,但一旦遇到一些特殊的返回码,我们也应该搞清楚它背后的事情。

Tags:

最近发表
标签列表