小石阿.90后天秤座.喜欢分享
爬虫又称网络爬虫,所以在讲解爬虫之前,我们有必要了解一下什么是网络?网络是由若干节点和连接这些节点的链路构成,然后网络与网络之间所串连成的庞大网络叫做互联网,而我们今天要讲的HTTP(HyperText Transfer Protocol 超文本传输协议)是互联网上应用最为广泛的一种网络协议,它是由万维网协会(World Wide Web Consortium)制定发布。
文章主要以一次HTTP请求的整个过程来讲解(DNS解析不讲):HTTP起源、TCP/IP协议、建立TCP连接、客户端请求、服务端响应、断开TCP连接,文章最后还捎带讲了与HTTP相关知识。文章较长,建议收藏或转发后阅读!(共计五千字,阅读完大概需要20分钟)
1.起源
今天我们能够在网络中畅游,都得益于一位计算机科学家蒂姆·伯纳斯·李的构想。1991年8月6日,蒂姆·伯纳斯·李在位于欧洲粒子物理研究所(CERN)的NeXT计算机上,正式公开运行世界上第一个Web网站(http://info.cern.ch ),建立起基本的互联网基础概念和技术体系,由此开启了网络信息时代的序幕。
伯纳斯·李的提案包含了网络的基本概念并逐步建立了所有必要的工具:
HTTP 协议一共有五大特点:
我们经常听到一句话就是:HTTP是一个基于TCP/IP协议簇来传递数据。
如何理解上面那句话?我们来看看TCP/IP四层模型就明白了。
从上图我们可以清晰的看到HTTP使用的传输层协议为TCP协议,而网络层使用的是IP协议(当然还使用了很多其他协议),所以说HTTP是一个基于TCP/IP协议簇来传递数据。
同样我们可以看到ping走的ICMP协议,这也就是为什么有时候我们开vps可以上网,但是ping google却ping不通的原因,因为走的是不同的协议。
那TCP/IP协议簇大致是如何工作的,我们再来看看下图:
我们可以看到在数据发送端是一层一层封装数据,数据接收端一层一层拆封,最后应用层获得数据。
我们知道了TCP/IP协议簇大致的工作原理之后,我们来看看HTTP是如何建立连接的。
前面咱们讲过HTTP是一个基于TCP/IP协议簇来传递数据,所以这HTTP建立连接也就是建立TCP连接,TCP如何建立连接,一起来看看TCP包信息结构吧。
TCP报文包=TCP头信息+TCP数据体,而在TCP头信息中包含了6种控制位(上图红色框中),这六种标志位就代表着TCP连接的状态:
了解了TCP包头信息之后,我们就可以正式看看TCP建立连接的三次握手了。
三次握手讲解:
面试官:为什么http建立连接需要三次握手,不是两次或四次 答:三次是最少的安全次数,两次不安全,四次浪费资源
客户端与服务器连接上了之后,客户端就可以开始向服务器请求资源,就可以开始发送HTTP请求了。
我们之前说过TCP报文包=TCP头信息+TCP数据体,TCP头信息我们已经讲了,现在来讲TCP数据体,也就是我们的HTTP请求报文。
来看看实际的HTTP请求例子:
请求头参数非常多,猪哥就不一一说明,只说明两个低级的反扒参数:
服务器在收到客户端请求处理完需要响应并返回给客户端,而HTTP响应报文结构与请求结构体一致。
响应报文中我们重点关注下:服务器的响应状态码,面试也很容易问到,下面猪哥只列出分类,详细状态码自行上网查找了解。
在服务器响应完毕后,一次会话就结束了,请问这时候连接会断开吗?
是否断开我们需要区分HTTP版本:
注意:长连接是指一次TCP连接允许多次HTTP会话,HTTP永远都是一次请求/响应,会话结束,HTTP本身不存在长连接之说。
早在1999年HTTP1.1就推广普及,所以现在浏览器在请求时请求头中都会携带一个参数:Connection:keep-alive,这表示浏览器要求与服务器建立长连接,而服务器也可以设置是否愿意建立长连接。
对于服务器来说建立长连接有优点也有缺点:
所以是否开启长连接,长连接时间都需要根据网站自身来合理设置。
ps:大家不要小看这一个TCP连接,在一次客户端HTTP完整的请求中(DNS寻址、建立TCP连接、请求、等待、解析网页、断开TCP连接)建立TCP连接占用的时间比还是很大的。
在建立TCP连接时是三次握手,而断开TCP连接是四次挥手!
在前面讲TCP/IP协议时我们说过标志位:FIN表示通知对方本端要关闭连接了,那断开连接为何需要四次挥手呢?这里给大家的课后作业,可以在留言中给出你的理解,看看是否正确。
面试官:为何建立连接需要三次握手而关闭连接却需要四次挥手。给大家的课后作业,在留言中给出你的见解!
HTTP/1.1已经为我们服务了20年,而HTTP/2.0其实在2015就发布了,但是还没有推广开来,关于HTTP/2.0新特性大家也可以去网上查阅相关资料
因为http响应慢、请求头体积大等缺点,所以在微服务时代,大家都使用rpc来调用服务,rpc相关概念感兴趣同学自行网上学习。
http还有两个很大的缺点就是明文且不能保证完整性,所以目前会渐渐被HTTPS代替,HTTPS知识猪哥下期将会为大家讲解。
本文来自:来源于公众号裸睡的猪-强势来袭-部门图片来源于网络,不作任何商业用途,如有侵权请及时联系删除