# HTTP 状态码

作为一个开发人员,我们每天都会花大量的时间来处理前后端间的数据请求与响应,这就需要我们有足够的 HTTP 知识,本节将针对 HTTP status code 展开探讨。

# 一、 什么是 HTTP 状态码

Fernando Doglio在他的书中 - 使用NodeJS的REST API开发将状态代码定义为:

一个数字,总结了与之相关的响应。

当客户端向服务器发出请求时,服务器提供HTTP(超文本传输协议)响应状态代码,这使我们能够了解网站后端发生的情况,确定需要修复的错误。

# 二、HTTP 状态码备忘单

# 响应信息

# 1xx:临时回应,表示客户端请继续 📝

1xx 的状态会被浏览器 HTTP 库直接处理掉,不会让上层应用知晓

# 成功

# 200 - OK:成功传输 💯

请求成功

# 201 - Created:创建 🆕

资源已创建,服务器已确认。它对POST或PUT请求的响应很有用。此外,新资源可以作为响应正文的一部分返回。

# 204 - No content:没有内容 👌🥚

该操作请求成功,但没有返回任何内容。对于不需要响应主体的操作很有用,例如 DELETE 操作。

# 205 - Reset Content:重置内容 🐾

表示请求成功,但响应报文不含实体的主体部分,但是与 204 响应不同在于要求请求方重置内容

# 重定向

3xx: 当服务器通知客户端请求的目标有变化,希望客户端进一步处理,将使用这些。

# 301 - moved permanently:永久移动 🏃

用于通知浏览器所请求的文件已被移动,并且它应该从服务器提供的位置请求文件,并记住该新位置以供将来参考。这只能用于HTTP GET和HEAD请求。

此资源已移至另一个位置,并返回该位置。当URL随着时间的推移而变化时(尤其是由于版本,迁移或其他一些破坏性更改),此标头特别有用,保留旧标头并将重定向返回到新位置允许旧客户端更新其引用自己的时间。

# 302 - found(找到):临时重定向 🕘

相似301; 但它是临时重定向。它将客户端从旧资源引导到新资源,但它不会告诉搜索引擎更新页面的索引。告诉客户端浏览另一个URL。

# 304 - Not Modified:客户端缓存没有更新 👯

产生的前提:客户端本地已经有缓存的版本,并且在 Request 中告诉了服务端,当服务端通过时间或 tag,发现没有更新的时候,就会返回一个不含 body 的 304 状态码

# 307 - temporary redirect:暂时移动🚶

临时重定向,和302含义类似,但是期望客户端保持请求方法不变向新的地址发出请求

# 客户端错误

4xx: 定义客户端错误,这是服务器认为Web浏览器出错的地方。

# 400 - bad request:不良请求 👎

发出的请求有问题(例如,可能缺少一些必需的参数)。对400响应的良好补充可能是开发人员可用于修复请求的错误消息

# 401 - unauthorized:未经授权 🚫🚫️

当拥有请求的用户无法访问所请求的资源时,对身份验证特别有用

# 403 - forbidden:禁止 ⛔️ - 资源不可访问,但与401不同,身份验证不会影响响应。

通常在请求的文件有效但文件无法提供时发出,这通常是由于服务器端权限问题导致Web服务器不允许将文件提供给客户端。

401 与 403 的区别:

  • 401 我去找个人,门卫说不认识我不让我进
  • 403 我去找个人,门卫说认识我,但是我不能进,因为我不配

# 404 - Not Found:请求的资源不存在 🔍🔎🔦

这可能是最常见且经常出现的错误。当Web浏览器请求服务器上不存在的文件时,会发生此问题。

# 405 - 方法不允许 ✖️🙅

不允许在资源上使用HTTP动词**(例如POST,GET,PUT等)** - 例如,在只读资源上执行PUT。

418:It's a teapot,来自 ietf 的一个愚人节玩笑 😈

# 服务端错误

5xx: 定义服务器端错误。尽管客户端提供了有效请求,但这些都是服务器部分发生的错误。

# 500 - internal sever error:内部服务器错误 🙈

这是一个不幸的模糊通用错误代码。只要认为服务器遇到与任何更具体的错误代码不匹配的错误,就会发出它。

# 501 - Not Implemented:未实现 🙀

服务器要么不识别请求方法,要么不支持请求。

# 502 - Bad Gateway:错误网关 🤦‍♀

当Web浏览器联系充当另一个服务器的代理的Web服务器并且从另一个服务器获得无效响应时,会发生这种情况。

# 503 - service unavailable:服务不可用 🤭👻

这通常在服务器暂时性错误(暂时处于超负载或正在停机维护)的情况下遇到,此时服务器无法处理请求,可以一会再试

#