1991年8月
我的名字是client,我的英文名字是Client。

她的名字是服务器,她的英文名是server。
今年,我们出生了。
是的,我们都是90后。
我爱她,但她离我很远。
为了和她分享我的感受,我还发明了HTTP协议。
一种只有我和她能懂的语言,一种只有我和她能懂的浪漫。
虽然我只能给她发一个GET操作,她只能返回一个HTML文档,但这已经足够了。
当我发出GET /index.html时,她会返回
你好世界
也许在她看来,我也是她的世界。
我知道自己还不完美,所以给自己取名0.9版,期待未来的自己更好。
一九九六年五月
这是我的第二篇日记。
原谅我很少写日记。毕竟有个知名人士曾经说过,“正常人谁会写日记?!"
之前我只和她分享HTML,对我来说远远不够。现在想和她分享图片,视频,二进制文件。
另外,我也想和她有更多的接触,就像恋人除了牵手还想拥抱亲吻一样。我还想要帖子,头除了得到。
还是那句话,在我的强烈要求下,能不能在每次沟通的时候给我一些提示,避免总是被吐槽和迷惑。所以除了数据部分,每一次沟通都是添加了头信息的,大家对这次做什么都有心理准备。
比如请求头信息的时候,Accept: */*会告诉她我可以接受什么数据类型。如果她返回数据Content-Type:image/jpeg,我知道她想分享她漂亮的照片,Content-Type:video/mp4,我知道我能看到她漂亮的视频。
最后,唉,女孩子有时候可能有点罗嗦,所以我在HTTP协议中添加了内容编码,建议她可以压缩数据。
比如我会用Accept-Encoding: gzip,deflate告诉她我可以接受的压缩类型,而Content-Encoding: gzip是告诉我她实际的压缩类型。
可见现在的HTTP协议复杂多了,但我想说,这是我们俩的特殊密码,我愿意记录下来,作为美好的回忆。
另一个尴尬的问题是,她觉得我不会很久。每个Tcp链接只能发送一个请求,发送数据会被关闭。这让我很苦恼,所以有些浏览器在发出请求时会使用非标准的连接字段。
连接:保持活动
这样她就会知道我的时间真的很长,不要轻易断链接。
遗憾的是,这并不包含在标准中。
反正我觉得这次HTTP的改动还算体面,就取名1.0吧。
有了这个里程碑,我和我的服务器之间的交流可以更加丰富多彩。

毕竟异地恋最重要的是有效丰富的沟通。
1997年1月
随着我们越来越了解,我觉得我更爱她了,所以我愿意做得更多。
作为一个男人最大的尊严,我第一次把Connection: keep-alive纳入标准,就是没有默认不会关闭的声明。
其次,我受不了“我问她,我答她”的模式。我想尽快发出更多我的爱,所以我引入了管道机制,允许我同时发出多个请求。当然,她还是可以按顺序回应的,至少我做到了。
我的付出也是有回报的,服务器很体贴的给我发回了Content-Length字段,让我很容易就知道她给了我多少数据。
但有时她有太多的话要说,我真的不想等她处理完再响应,所以除了Content-Length,我还在HTTP中添加了一个Transfer-Encoding字段,这意味着响应将由数量不定的数据块组成。
例如,在每个非空的数据块之前,将有一个十六进制值来指示该块的长度。最后一个大小为0的块表示该响应的数据已经发送。下面是一个例子。
HTTP/1.1 200 ok content-Type:text/plain transfer-Encoding:chunked 25这是第一个块1中的数据,这是第二个块3con8sequence0
这样我就能马上收到她的回复,太好了。
最后除了GET POST等操作,我还加了各种PUT PATCH的姿势和她交流,你懂的。
虽然优化了很多,但作为男人我还是要谦虚,所以把版本命名为1.1。
好了,就这样。我会继续为她努力。
2009
听说Google已经发布了SPDY协议,还是用来解决我的HTTP1.1效率低下的问题?我不开心。我还是喜欢我的HTTP协议。
Server还问我能不能也优化HTTP,我无言以对。我和她通过我的HTTP恋爱了18年。
就这样吧,我不想写了,想干嘛干嘛。
2015年5月
爱一个人真的会让你变得优秀。
为了和老婆更亲近,我还是对HTTP进行了严厉的优化。
虽然是基于SPDY的约定,但这并不重要!
关于要点:
1.HTTP/1.1版本的头信息肯定是文本,数据体可以是文本,也可以是二进制。文本解析肯定不如二进制,所以直接彻底,而且都是二进制。
这样才能快速了解对方的诉求。
2.我前面说过可以同时发送多个请求,服务器会按顺序处理,但是我不想一个一个的接收她的响应,所以她也可以并发的给我发送数据。
3.恋爱时间越长,越怕对方重复事情。所以,除了数据体,我这次还压缩了头信息。一方面,gzip/ compress可以用于压缩。另外,我和她同时维护一个表头信息表。所有字段都将存储在该表中,并将生成一个索引号。以后不发同样的字段,只发索引号,提高速度。

4.这才是最重要的。服务器可以主动向客户端发送资源,而不是我必须先发出请求。也就是我走了99步之后,剩下的一步就是她终于来找我了。
这次优化太多了,我决定直接命名为HTTP2.0。当然之后还会有3.0和4.0。我愿意为了她变得更好。
结束语
从前车马慢,书信远,一生只能爱一个人。
现在的HTTP可以毫秒级的把你的爱传达给对方,但也祝愿每个人都像我一样被爱,被人爱一辈子。


