一本关于HTTP的恋爱日记

码农小说家 2021-04-08 10:49:43
http 日记 一本 恋爱


1991年 8月

我叫客户端,英文名字 client。

她叫服务端,英文名字 server。

这一年,我们出生了。

是的,我们都是90后。

我爱她,可是她却远在天边。

为了和她可以互诉衷肠,我同时发明了HTTP协议。

一门世界上只有我和她能懂的语言,一种世界上只有我和她能懂的浪漫。

虽然我只能给她发出GET操作,她也只能返回HTML文档,但是已足够了。

当我发出 GET /index.html
她会返回

<html>
<body>Hello World</body>
</html>

可能在她看来,我也是她的全世界吧。

我知道自己还不完美,所以给自己命名0.9版本,我期待未来自己也能变得更好。

1996年 5月

这是我的第二篇日记。

原谅我很少写日记,毕竟一位知名人物说过:"正常人谁写日记啊?!"

之前我只和她分享HTML,这已经远远不能满足我了,现在我还想和她分享图像、视频、二进制文件。

另外,我也想要和她有更多的接触,就像恋人除了牵手还想要拥抱接吻,我除了GET还想要POSTHEAD

再次,在我的强烈要求下,每次交流能不能给点提示,省得老是被吐槽不解风情。所以,除了数据部分,每次通信加上了头信息 ,大家都有个心理准备这次要干吗。

比如在请求数据头信息, Accept: */*会告诉她我能接受的数据类型,她若返回数据 Content-Type:image/jpeg我就知道她要分享自己的美照,
Content-Type:video/mp4我就知道可以看到她美美的视频。

最后,唉,女孩子有时候真的是有点啰嗦的,所以我又在HTTP协议里加了 Content-Encoding,暗示她可以压缩一下数据。

比如
我会用 Accept-Encoding: gzip, deflate 来告诉她我能接受的压缩类型,而Content-Encoding: gzip就是告诉我她的实际压缩类型。

可以看出来现在HTTP协议复杂了很多,但是我想说这是我们俩的特殊密码,我愿意记录下来,成为一份美好的回忆。

另外一个很尴尬的问题就是,她觉得我不太久,每个Tcp链接只能发送一个请求,发送数据就关闭,这让我很苦恼,所以有些浏览器在请求时,用了一个非标准的Connection字段。

Connection: keep-alive

这样她就知道,我这次时间真的长了,不要再轻易断开链接。

不过遗憾的是,这个并没有纳入标准。

不管咋样,我觉得HTTP这次改的也算像模像样了,所以就命名1.0吧。

有了这个里程碑,我和我的服务端之后交流可以更加丰富多彩了。

毕竟异地恋,最重要的还是有效、丰富的沟通。

1997年1月

随着我们深入了解,我觉得我更爱她了,所以愿意做更多的事情。

作为男人最大的尊严,我首先把Connection: keep-alive纳入标准,即没有声明默认不关闭。

其次,我已经受不了我一问她一答这个模式,我想尽可能一次把我更多的爱意发出去,所以我引入管道机制,允许我同时发出多个请求,当然她还是按照顺序,先后回应即可,最起码我已经做到位了。

我的付出也是有回报的,server也很体贴的给我传回来 Content-Length字段,好让我方便知道她给了我多少数据。

但是有时候她要说的话太多了,我真的不想等待太久她处理完了才有回应,所以除了Content-Length,我同时在HTTP增加了
Transfer-Encoding字段 ,就表明回应将由数量未定的数据块组成。

比如
每个非空的数据块之前,会有一个16进制的数值,表示这个块的长度。最后是一个大小为0的块,就表示本次回应的数据发送完了。下面是一个例子。

HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked
25
This is the data in the first chunk
1C
and this is the second one
3
con
8
sequence
0

这样,我就可以立马收到她的回复,真好。

最后,除了GET POST 等操作,我还增加了PUT PATCH各种姿势来和她沟通,你们懂的。

虽然优化了不少,但是作为男人要谦虚点,所以我把版本命名为1.1。

好的,就到这里吧,我会继续努力的,为了她。

2009年

听说谷歌公开了SPDY协议,还是用来解决我的 HTTP1.1 效率不高的问题?我不太开心,我还是喜欢我的HTTP协议。

server还问我能不能也把HTTP也优化优化,无语,我通过我的HTTP已经和她谈了18年的恋爱了。

就这样吧,不想写了,爱咋咋地。

2015年 5月

爱一个人,真的会让自己变得优秀啊。

为了能和我的她走的更近,我还是狠狠地把HTTP优化了下。

虽然是在SPDY的协议基础上,但是,不重要!

大概主要几点吧:

1、HTTP/1.1版的头信息肯定是文本(ASCII编码),数据体可以是文本,也可以是二进制,文本解析肯定不如二进制啊,所以直接彻底点,都变成二进制了。

这样我们可以快速理解对方的诉求。

2、之前说我这可以同时发出多个请求,server按照顺序处理,但是我不想一个个接收她的回应,所以她也可以并发返回给我数据啦。

3、恋爱越久,越怕对方说重复的话,所以除了数据体,我这次把头信息也进行了压缩。一方面可以使用gzip/ compress 进行压缩,另外我和她同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了。

4、这个是最重要的,服务端可以主动给客户端发送资源了,而不是我必须先发个请求。也就是当我走了99步之后,剩下的一步终于是她向我走来。

这次优化太多了,我决定直接命名HTTP2.0,当然之后还会有3.0,4.0。为了她,我愿意变得更加优秀。

结束语

从前车马很慢,书信很远,一生只够爱一个人。

如今,HTTP可以让你的爱意毫秒级传达给对方,但是也更祝福大家像我一样,得之所爱,一生被爱。

BAT码农,转行程序员,Bug小王子,著名背锅侠。

西二旗风中之狼,211院校挂科之神,真·搬砖者,伪·小说家。

版权声明
本文为[码农小说家]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/light0011/p/14631072.html

  1. Scheme and implementation of front end page watermarking
  2. Why is 0.1 + 0.2 not equal to 0.3?
  3. JS arrow function this points to related practice
  4. CSS text decoration & text emphasis
  5. 2021必修 首门CSS架构系统精讲 理论+实战玩转蘑菇街
  6. 大前端
  7. The first compulsory CSS architecture system in 2021
  8. Big front end
  9. 你喜欢才是最好的,前端工程师常用的8个工具
  10. What you like is the best. There are 8 common tools used by front-end engineers
  11. Spring Boot + Vue3 前后端分离 实战wiki知识库系统
  12. Spring boot + vue3 front end and back end separation practical wiki knowledge base system
  13. CSS高级技巧总结
  14. CSS advanced skills summary
  15. HTML5教程 - HTML5 事件
  16. HTML5 tutorial - HTML5 events
  17. Vue和微信小程序的区别
  18. The difference between Vue and wechat applet
  19. HTML5和CSS3提高
  20. Improvement of HTML5 and CSS3
  21. HTML5和CSS3提高
  22. Improvement of HTML5 and CSS3
  23. NMN concept stock up and down limit, Harvard & 34; ageless drug & 34; only market speculation?
  24. 「HTML+CSS」--自定义加载动画【011】
  25. 「HTML+CSS」--自定义加载动画【010】
  26. 「HTML+CSS」--自定义加载动画【009】
  27. 「HTML+CSS」--自定义加载动画【008】
  28. "HTML + CSS" -- custom loading animation [011]
  29. "Custom" animation [CSS + 010]
  30. "HTML + CSS" -- custom loading animation [009]
  31. "HTML + CSS" -- custom loading animation [008]
  32. HttpServletRequest、通过request获得请求头、请求体等、解决中文乱码等问题
  33. HttpServletRequest, obtaining request header and request body through request, solving Chinese garbled code and other problems
  34. html2canvas 识别 svg 解决方案
  35. Solution of identifying SVG with html2canvas
  36. Web前端架构师
  37. Web front end architect
  38. 3000 yuan of financial software is less than 28 yuan of system, and the automatic accounting system is comparable to artifact
  39. Blessing of the sea
  40. IT兄弟连 HTML5教程 CSS3揭秘 小结及习题
  41. Summary and exercises of CSS3 in HTML5 course of it Brothers Company
  42. It's disassembled before it's on the market. The workmanship of Xiaomi 10 is unexpected, reducing maintenance costs?
  43. Vue自学之路5-vue模版语法(v-text,v-html,v-pre)
  44. Vue self learning 5-vue template syntax (v-text, v-html, v-pre)
  45. 【HTML】处理&lt;br&gt;换行符追加到前端换行无效的问题 --- html中渲染的字符串中包含HTML标签无效的处理方法,字符串中包含HTML标签被转义的问题 解决
  46. [HTML] processing & lt; BR & gt; the problem of invalid line feed when the line feed character is added to the front end --- the processing method of invalid HTML tag contained in the rendered string in HTML, and the problem of escape of HTML tag containe
  47. Vue自学之路5-vue模版语法(v-text,v-html,v-pre)
  48. Vue self learning 5-vue template syntax (v-text, v-html, v-pre)
  49. 7个Web前端程序员必须会用CSS技巧
  50. 10个优秀开源JavaScript模板引擎
  51. JavaScript基础知识及写法
  52. FB大规模重构React Native,Airbnb宣布回归原生,前端巨变来临?
  53. Seven web front-end programmers must be able to use CSS skills
  54. 10 excellent open source JavaScript template engines
  55. Basic knowledge and writing method of JavaScript
  56. FB large scale reconstruction react native, airbnb announced return to the original, the front-end changes coming?
  57. 网页HTML5视频播放器(兼容各主流浏览器)
  58. Web HTML5 video player (compatible with mainstream browsers)
  59. 前端开发需要掌握哪些技术?前端开发都学什么?
  60. 一本关于HTTP的恋爱日记