实际上,1970年1月1日那天已经过去了。对许多人来说,这只是一个普通的日子,但对另一些人来说,这是时间的起源,也被称为 Unix 时间 ,即从 1970年1月1日 午夜起经过的秒数。 但这次我不想讨论 Unix 时间,而是想谈谈在编写一些 flowtests 给 Cloudflare 的一个服务时发现的一个小细节。这个服务本身并不重要,重要的是我在其中一个请求中收到的 HTTP 头部。它包含一个日期,扰乱了我平静专注的精神状态,以至于我不得不写下这篇文章: expires: Thu, 01 Jan 1970 00:00:01 GMT 这里奇怪的不是过期头部,虽然这不是最现代的方式,但可以理解,它的目的不是为了使缓存失效,而是为了避免资源从一开始就被缓存。为了实现这一点,他们将过期日期设置为过去,而最好的日期莫过于全世界几乎没有电子计算机的那个时刻: Thu, 01 Jan 1970 00:00:00 GMT 。 在任何其他服务中,这一秒的差异可能不会引起我的注意,但我们谈论的是 Cloudflare,是 Cloudflare!那些用熔岩灯墙保护互联网的公司,那些缓解了历史上一些最大 DDoS 攻击的公司,那些建造了 1.1.1.1 的公司,那些大规模使用 HTTP/3 的公司,那些甚至敢于保护用户开放互联网权利免受某些人滥用之害的公司。 这一秒的差异之所以存在,是有原因的,答案很可能与仍在运行并支撑着我们文明的软件中处理数据的编码方式有关。 这种日期格式只是一个接口,一种约定,通过它两个或多个部分交换信息,同时隐藏内部实现的细节。这种格式完全可以表示 1970 年之前的日期,甚至公元 0 年之前的日期。 很可能仍然存在许多或多或少古老的软件,它们在内部将 Unix 时间表示为整数,但还赋予了 0 特殊含义。这种实践非常普遍,不仅限于日期,对于任何类型的数据都是如此。...