前言
http
状态码在面试与实际生产过程中都是常见的,恰巧之前面试中被面试官连环追问、最近项目搭建阶段总是被非预期的状态码打击,心血来潮就把平常收集的一些状态码截图放出来(感觉很新鲜就收藏了,小时候收藏香烟壳、弹珠等小玩意一样,也像牛顿说在海边捡贝壳)。大家如果有兴趣的话,也可以在评论发表一些,为大部分网站如三体里四维宇宙干涸一般的的命运留存一点回忆。
- 标题为关键词(来源、网址等)
- 有些网站已经被攻破了种植广告了,删了一些,现存的也慎点
- 记录的是网站当时的切片,部分服务器错误已修复,所以能看到正常界面(也可能跳转到其他地方了)
- 同时这篇文章记录一下平常遇到过的状态码的理解,越深究,越深不可测,共勉
1xx
1xx
代表一些信息。面试中遇到的情况是,会问你一些场景。
101
求补图。代表协议升级,如 http
版本升级,http
转 https
,http
转 websocket
。
103
求补图。这个和 http2
的服务器推送有关联,是作为其功能的替代。简单来讲就是服务器推送用的不多,参见这位大佬的文章。
2xx
表示请求成功。
200
请求成功。注意看上面那张图片,请求资源状态码返回 200
显示来自磁盘缓存。这种情况和都是缓存,和下面讲到的 304
的重新向服务器问询却又不同。注意观察 expires
和 cache-control
这两个强缓存字段,可以发现前者的时间数据是大于当前请求时间的,而后者却设置了过期的时间(浏览器机制是先检查强缓存,若命中则不请求数据;而若强缓存过期,有协商缓存则进行协商缓存),关于缓存机制,见。
3xx
3xx
表示资源重定向相关,重定向到新资源、重定向到原有资源(如缓存)。
说实话,对于临时重定向(302
、307
)和永久重定向(301
、308
)的选择,我并没有明确的取舍。如果从实用性来说,一般出来比较早的兼容性比较好,(类似于僵尸设备的概念,大部分网站得升级的速度相较于头部肯定会慢,以此说明新技术普及需要时间),例如缓存的概念当中,我们需要混用 cache-control
(http 1.1
) 和 expires
(http 1
、http 0.9
没有请求头,它需要在 cache-control
后,所以盲猜 http 1
),当有 cache-control
时,忽略 expires
。这里求大佬解答。
还有看到 Date
(发送报文的时间)也可以用来当作缓存配置,具体怎么和以上说的强弱缓存机制配合起来用呢?是优先级最低的那一环吗?看完这两篇还是没能解决疑惑。
301
永久重定向。访问 7k7k
的 https
域名:https:7k7k.com 发现永久重定向到了 http
站点。
302
这个网址综合用了 301
和 302
,nowcoder.com/test/questi…。
首先清空缓存,然后访问该网址。会发现首先会跳转到三级域名 www
,然后跳转到登录页。
如果你已经登录了,会发现重新请求,有个 301
永久重定向。
304
资源未修改。这个是协商缓存相关的状态码。第一次请求资源,后端返回(response
) last-modified: Sat, 18 Feb 2023 16:17:22 GMT
,后续前端请求(request
)带上if-modified-since: Sat, 18 Feb 2023 16:17:22 GMT
,后端对比资源无更新则返回 304
告知浏览器可以继续使用当前资源(etag
机制类似,后端返回 etag
,前端请求带上 if-none-match
)。
- 如何复现?以 BootCDN 首页为例
可以通过强制刷新(
windows Ctrl shift r
)跳过缓存模拟第一次进入,状态码200
,然后再以普通方式进入发现状态码为304
。
307
临时重定向,如下例。访问百度:http:www.baidu.com (发现此时会自动跳转 https
) ,打开网络面板,强制刷新(Ctrl shift r
),再次访问相同网址,发现发送了两个 www.baidu.com 的地址,第一个状态码为 307
,Location
字段指向了 https
的域名。
308
永久重定向。
参考资源
标题 | 链接 |
---|---|
对比重定向状态码 | www.drlinkcheck.com/blog/http-r… |
响应头 Date 和 Age 的作用 | blog.csdn.net/xifeijian/a… |
4xx
4xx
表明客户端发请求出问题了,其中有好多是权限相关的,401
、403
、405
,摘取文档如下:
当收到403 Forbidden错误信息时,客户端没有足够的权限来访问该资源。这是一个常见的错误,以一种非常普遍的方式告诉客户,该请求是不允许的。这与更具体的状态401 Unauthorized不同,因为该错误将持续存在,即使客户重新认证并重新提交HTTP请求。同样,更具体的405 Method Not Allowed状态是用来告诉客户,资源是可用的,但他们的特定HTTP请求是不允许的。
401
和 403
关于字段的讨论,见
400
这个没有截图,望补充。
401
这个也很熟悉了。没有认证成功,往往你可以用正确的凭证再认证一遍。我的场景是 cookie
未带上,就是之前一篇文章说过的前端代码未将跨域凭证开启。没有带上 cookie
是根因,造成这个影响的却可能分布在数据流的各个环节(后端未设置正确 Domain
、Expires
设置有问题等。这个思路一展开就多了,和拦截器、链式调用、装饰器模式、中间件、Tapable。
都很相关。
403
未授权,禁止访问。比 401
的未认证层次更深。通俗来说即使认证成功确认了你的身份,但是你没有这个权限。
book.bugstack.cn/#s/6Epf5-uw
petalsearch.com/
chat.openai.com/auth/login?…
404
404
意味着资源未找到。这里允许我伤感一下,查找资料时,一些古老的网站被不经意间访问到,它们仍正常工作,此时你可能有些庆幸网站还能正常工作,仍旧能帮助我们的工作生活;但是不可否认的是,有些资源确确实实已经访问不到了,甚至删除了,这代表着一段历史逝去了,记忆慢慢消退了,仿佛不曾存在过(总是有种莫名的感觉)。知识更新迭代,接力棒传到我们手中,旧的不去,新的不来,只要这份开源、互帮互助的精神存在,它们就没有灭亡。所以我们需要传承,需要铭记历史,才能继往开来。
matgen.nscc-gz.cn/Tools.html
schteppe.github.com/cannonjs
405
资源存在,但请求方法不允许。
5xx
5xx
系列表明服务器侧出问题。
500
知乎
502
创青春知识竞赛
504
中国知网网关错误
1xxx
这个状态码非常少见,应该是该业务中自定义返回的而不是使用约定俗成的状态码。
1020
参考资源
推荐几个状态码网站
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 7 天,点击查看活动详情