状态码折射网站墓地(致敬三体四维宇宙墓地)持续更新

50 阅读6分钟

前言

http 状态码在面试与实际生产过程中都是常见的,恰巧之前面试中被面试官连环追问、最近项目搭建阶段总是被非预期的状态码打击,心血来潮就把平常收集的一些状态码截图放出来(感觉很新鲜就收藏了,小时候收藏香烟壳、弹珠等小玩意一样,也像牛顿说在海边捡贝壳)。大家如果有兴趣的话,也可以在评论发表一些,为大部分网站如三体里四维宇宙干涸一般的的命运留存一点回忆。

  • 标题为关键词(来源、网址等)
  • 有些网站已经被攻破了种植广告了,删了一些,现存的也慎点
  • 记录的是网站当时的切片,部分服务器错误已修复,所以能看到正常界面(也可能跳转到其他地方了)
  • 同时这篇文章记录一下平常遇到过的状态码的理解,越深究,越深不可测,共勉

1xx

1xx 代表一些信息。面试中遇到的情况是,会问你一些场景。

101

求补图。代表协议升级,如 http 版本升级,httphttps,httpwebsocket

103

求补图。这个和 http2 的服务器推送有关联,是作为其功能的替代。简单来讲就是服务器推送用的不多,参见这位大佬的文章

2xx

表示请求成功。

200

image.png 请求成功。注意看上面那张图片,请求资源状态码返回 200 显示来自磁盘缓存。这种情况和都是缓存,和下面讲到的 304 的重新向服务器问询却又不同。注意观察 expirescache-control 这两个强缓存字段,可以发现前者的时间数据是大于当前请求时间的,而后者却设置了过期的时间(浏览器机制是先检查强缓存,若命中则不请求数据;而若强缓存过期,有协商缓存则进行协商缓存),关于缓存机制,见

image.png

image.png

3xx

3xx 表示资源重定向相关,重定向到新资源、重定向到原有资源(如缓存)。 说实话,对于临时重定向(302307)和永久重定向(301308)的选择,我并没有明确的取舍。如果从实用性来说,一般出来比较早的兼容性比较好,(类似于僵尸设备的概念,大部分网站得升级的速度相较于头部肯定会慢,以此说明新技术普及需要时间),例如缓存的概念当中,我们需要混用 cache-control(http 1.1) 和 expires(http 1http 0.9 没有请求头,它需要在 cache-control 后,所以盲猜 http 1),当有 cache-control 时,忽略 expires。这里求大佬解答。

还有看到 Date (发送报文的时间)也可以用来当作缓存配置,具体怎么和以上说的强弱缓存机制配合起来用呢?是优先级最低的那一环吗?看完这两篇还是没能解决疑惑。

301

永久重定向。访问 7k7khttps 域名:https:7k7k.com 发现永久重定向到了 http 站点。 image.png

302

这个网址综合用了 301302,nowcoder.com/test/questi…

首先清空缓存,然后访问该网址。会发现首先会跳转到三级域名 www,然后跳转到登录页。 image.png image.png

如果你已经登录了,会发现重新请求,有个 301 永久重定向。

image.png

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,然后再以普通方式进入发现状态码为 304image.png

307

临时重定向,如下例。访问百度:http:www.baidu.com (发现此时会自动跳转 https) ,打开网络面板,强制刷新(Ctrl shift r),再次访问相同网址,发现发送了两个 www.baidu.com 的地址,第一个状态码为 307,Location 字段指向了 https 的域名。

image.png

308

永久重定向。

参考资源

标题链接
对比重定向状态码www.drlinkcheck.com/blog/http-r…
响应头 DateAge 的作用blog.csdn.net/xifeijian/a…

4xx

4xx 表明客户端发请求出问题了,其中有好多是权限相关的,401403405摘取文档如下: 当收到403 Forbidden错误信息时,客户端没有足够的权限来访问该资源。这是一个常见的错误,以一种非常普遍的方式告诉客户,该请求是不允许的。这与更具体的状态401 Unauthorized不同,因为该错误将持续存在,即使客户重新认证并重新提交HTTP请求。同样,更具体的405 Method Not Allowed状态是用来告诉客户,资源是可用的,但他们的特定HTTP请求是不允许的。 401403 关于字段的讨论,见

400

这个没有截图,望补充。

401

这个也很熟悉了。没有认证成功,往往你可以用正确的凭证再认证一遍。我的场景是 cookie 未带上,就是之前一篇文章说过的前端代码未将跨域凭证开启。没有带上 cookie 是根因,造成这个影响的却可能分布在数据流的各个环节(后端未设置正确 DomainExpires 设置有问题等。这个思路一展开就多了,和拦截器、链式调用、装饰器模式、中间件、Tapableimage.png都很相关。

403

未授权,禁止访问。比 401 的未认证层次更深。通俗来说即使认证成功确认了你的身份,但是你没有这个权限。

book.bugstack.cn/#s/6Epf5-uw

image.png

petalsearch.com/

403-petalsearch.jpg

chat.openai.com/auth/login?…

image.png

404

404 意味着资源未找到。这里允许我伤感一下,查找资料时,一些古老的网站被不经意间访问到,它们仍正常工作,此时你可能有些庆幸网站还能正常工作,仍旧能帮助我们的工作生活;但是不可否认的是,有些资源确确实实已经访问不到了,甚至删除了,这代表着一段历史逝去了,记忆慢慢消退了,仿佛不曾存在过(总是有种莫名的感觉)。知识更新迭代,接力棒传到我们手中,旧的不去,新的不来,只要这份开源、互帮互助的精神存在,它们就没有灭亡。所以我们需要传承,需要铭记历史,才能继往开来。

flow.aliyun.com/artifacts?s…

image.png

matgen.nscc-gz.cn/Tools.html

404-论文中提到的在线工具.jpg

schteppe.github.com/cannonjs

404-CANNON.jpg segmentfault.com/a/119000000…

404-思否-20220324.jpg

405

资源存在,但请求方法不允许。

www.java2s.com/example/jav… image.png

5xx

5xx 系列表明服务器侧出问题。

500

nowcoder.com/question/ne… 500-newcoder.jpg

nowcoder.com/test/questi… 500-牛课题目-20220308.jpg

知乎 500-知乎.jpg

502

nowcoder.com/question/ne…

502-牛课题目-20220310.jpg

www.cnblogs.com/ruonan1997/…

502-博客园文章-20220312.jpg

cherryblog.site/ image.png

创青春知识竞赛 502-创青春知识竞赛.jpg

504

中国知网网关错误

504-中国知网.jpg

1xxx

这个状态码非常少见,应该是该业务中自定义返回的而不是使用约定俗成的状态码。

1020

1020-论文网站.jpg

参考资源

推荐几个状态码网站

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 7 天,点击查看活动详情