你见过 HTTP 哪些状态码?

网络 网络管理
当请求多媒体数据数据较大时,会进行分片传输。当你在B站观看视频,打开开发者工具,会发现许多 206 状态码以及响应头 Content-Range
  • 101 Switch Protocol
  • 200 Ok
  • 201 Created
  • 204 No Content
  • 206 Partial Content
  • 301 Moved Permanently
  • 302 Found
  • 304 Not Modified
  • 307 Temporary Redirect
  • 400 Bad Request
  • 401 Unauthorized
  • 403 Forbidden
  • 404 Not Found
  • 405 Method Not Allowed
  • 413 Payload Too Large
  • 418 I'm A Teapot
  • 422 Unprocessable Entity
  • 500 Internal Server Error
  • 502 Bad Gateway
  • 503 Service Unavailable
  • 504 Gateway Timeout

101 Switch Protocol

升级协议,如从 http 到 ws

示例:

101

200 Ok

表示资源请求成功

示例:

  1. $ curl https://shanyue.tech --head 
  2. HTTP/2 200 

201 Created

资源创建成功,多用于 POST 请求

204 No Content

响应不会返回 Body,一般由以下两种情况

  1. 与 Options/Delete 请求搭配
  2. 打点类

示例一: 掘金为 Options 请求的状态码设置为 204

掘金为 Options 请求的状态码设置为 204

示例二: 知乎为 Delete 请求的状态码设置为 204,以下请求为取消关注

掘金为 Delete 请求的状态码设置为 204

示例三: 当你在知乎看段子时,不妨打开控制台,会发现一个是 204 的状态码

  1. curl 'https://www.zhihu.com/sc-profiler' \ 
  2.   -H 'content-type: application/json' \ 
  3.   --data-binary '[["i","production.heifetz.main.desktop.v1.Collector.screen.1536_960.count",1,1]]' \ 
  4.   --compressed -vvv 
  5. < HTTP/2 204 
  6. < server: CLOUD ELB 1.0.0 
  7. date: Thu, 22 Oct 2020 07:46:30 GMT 
  8. < content-type: text/html 
  9. < vary: Accept-Encoding 
  10. < x-backend-response: 0.002 
  11. < cache-control: no-cache, no-store, must-revalidate, private, max-age=0 

206 Partial Content

当请求多媒体数据数据较大时,会进行分片传输。当你在B站观看视频,打开开发者工具,会发现许多 206 状态码以及响应头 Content-Range

示例:

B站上的视频资源请求状态码为206

301 Moved Permanently

永久重定向。http 转向 https时,有时会使用 301,如 B 站。

  1. $ curl www.bilibili.com -vvv 
  2. < HTTP/1.1 301 Moved Permanently 
  3. < Server: Tengine 
  4. Date: Thu, 22 Oct 2020 08:04:59 GMT 
  5. < Content-Type: text/html 
  6. < Content-Length: 239 
  7. Connection: keep-alive 
  8. < Location: https://www.bilibili.com/ 

302 Found

暂时重定向。http 转向 https时,有时也会使用 302,如知乎

  1. $ curl www.zhihu.com -vvv 
  2. < HTTP/1.1 302 Found 
  3. < Location: https://www.zhihu.com/ 
  4. < Content-Length: 0 
  5. < X-NWS-LOG-UUID: 16068764905156850032 
  6. Connection: keep-alive 
  7. < Server: Lego Server 
  8. Date: Thu, 22 Oct 2020 08:20:29 GMT 
  9. < X-Cache-Lookup: Return Directly 

304 Not Modified

资源已被缓存,与之相关的响应头部有:

  • ETag
  • last-modified/if-modified-since

一般用作 index.html 等不带 hash 的资源,由于示例太多,这里就不举例了

307 Temporary Redirect

暂时重定向。也可作为 http 到 https 的重定向。还有一种用途用作 HSTS,当谷歌浏览器发现某 http 资源已被加入到 HSTS 列表,浏览器内部会通过 307 作重定向

示例:

山月个人博客网站的 HSTS

Stackoverflow 中的307

http 状态码中 301,302和307有什么区别

  • 301,Moved Permanently。永久重定向,该操作比较危险,需要谨慎操作:如果设置了301,但是一段时间后又想取消,但是浏览器中已经有了缓存,还是会重定向。
  • 302,Found。临时重定向,但是会在重定向的时候改变 method: 把 POST 改成 GET,于是有了 307
  • 307,Temporary Redirect。临时重定向,在重定向时不会改变 method

400 Bad Request

可以用于做 API 的参数校验

401 Unauthorized

当没有权限的用户请求需要带有权限的资源时,会返回 401,此时携带正确的权限凭证再试一次可以解决问题

知乎登录失败时

403 Forbidden

我就是不想让你访问,不管你的权限凭证是否正确!

In summary, a 401 Unauthorized response should be used for missing or bad authentication, and a 403 Forbidden response should be used afterwards, when the user is authenticated but isn’t authorized to perform the requested operation on the given resource.

  • 403与401状态码有什么区别

404 Not Found

未找到资源

405 Method Not Allowed

我需要 POST 这条资源,你去 GET 个锤子

413 Payload Too Large

不要给我扔这么大的 Body,我处理不过来

418 I'm A Teapot

我是一个茶壶

我要抛咖啡,你却扔给我一个茶壶?

也可以用来处理不合法的参数校验,我想要个字符串,你给了我一个整数?

422 Unprocessable Entity

常用来处理不合法的参数校验。

Github 上给某个项目点赞时,故意设置一个不正确的参数命名,会返回状态码 422

422

500 Internal Server Error

服务器内部错误,很有可能是应用层未捕获错误而导致整个服务挂掉

502 Bad Gateway

网关超时,Nginx 上常见,从上游应用层返回了响应

503 Service Unavailable

由于大量流量造成服务忙,稍等一下说不定就能用了

504 Gateway Timeout

网关超时,上游应用层迟迟未响应

本文转载自微信公众号「全栈成长之路」,可以通过以下二维码关注。转载本文请联系全栈成长之路公众号。

 

责任编辑:武晓燕 来源: 全栈成长之路
相关推荐

2022-06-01 12:00:54

HTTP状态码服务端

2022-10-11 08:48:08

HTTP状态码浏览器

2023-12-27 08:36:27

2014-06-18 09:25:07

HTTP

2022-06-01 11:14:42

Java代码技巧

2019-02-26 14:43:50

http状态码前端

2015-07-15 10:22:34

Window包装盒

2020-06-28 07:43:45

HTTP401HTTP403服务器

2012-06-13 10:30:02

HTTP451状态码

2022-07-29 07:48:15

HTTP常用状态码

2018-06-06 16:25:44

码农出身奇特

2019-09-17 08:18:19

HTTP网络协议状态码

2022-06-27 09:15:11

HTTPHTTP 103状态码

2010-02-24 08:59:50

HTTP报头状态码

2012-07-03 11:13:07

2023-01-04 11:35:21

预测模型预售

2018-02-01 21:34:38

戴尔

2019-01-22 15:04:04

vSAN硬件配置

2021-03-12 11:50:08

项目组件 API

2024-11-08 09:42:49

HTTPWeb服务器
点赞
收藏

51CTO技术栈公众号