自从做程序开始,就有人说··看源码,学底层,才是真正的王道。然而近一年来,学了很多新东西,linux,docker,hadoop,luncene,python,kotlin 等,每个都是浅尝辄止,只能归结为-学过,能上手吗?快了
浏览器每天都好多个标签页,不得不多开几个窗口。有感于此,最近总是有意无意的想学习点底层的东西,原来看到很高端的陌生的词汇都想看看,现在再也不想看了。
最近想到看tomcat源码,想看看tomcat是如何接收http请求的,学习了一上午,赫然发现http请求本质上就是个socket!瞠目结舌不足以形容此刻的表情。Obviously,又复习了一遍tcp/ip 原理,三次握手等。
http 是应用层协议,socket是对tcp/ip协议(网络层与传输层)的封装,通常是操作系统封装好,语言调用就行了,所以··在socket源码里是看不到三次握手的逻辑的,只有一些流啊啥的··
所以想tomcat 这种servlet服务器不过是 说白了 创建socket,等待接收信息,收到后封装成 http 就行了,
看看 how tomcat works 第一章~豁然开朗··真的是柳暗花明又一村。感觉对网络原理也有了更深的认识,这才入了网络的门··从此步入厅堂··走向人生巅峰
学习路线总是很曲折··因为啥都不懂··所以··啥都得学
从 看tomcat源码 –> 分析tomcat启动过程 –> start.sh 了解了Linux shell 编程 –> 看how tomcat works –> 了解http协议 –> 看servlet源码 –> 了解abstract class –> 了解java socket底层
下面来对应下主题,
看servlet源码时发现这么一句话
英文能看懂··但是组不成句子··为啥 do not set the Content-Length header 第二天看了http协议,http1.1 比1.0 变化很大。
1、 持久连接
2、 管道机制
3、 Content-Length 字段
4、 分块传输编码
这样这段话就能理解了·· 嗯··最近学到不少··继续!努力!