HTTP技术总结
HTTP是一种超文本传输协议(Hypertext Transfer Protocol)。
超文本传输协议可以分为:超文本、传输、协议,三个部分。
其中协议>传输>超文本。
什么是超文本
一开始文本是一种能够被计算机解析的有意义的二进制数据包,能够传输文字,后面想要传输图片、音频、视频等东西就将文本的语义扩大了,语义扩大后的文本就称为超文本(Hypertext)
什么是传输
由载体(如同轴电缆、电话线、光缆)将二进制数据包从一个计算机传输给另一个计算机的过程就叫做传输(transfer)
一般把传输数据包的叫做请求方,接受到数据包的叫做应答方。
什么是协议
网络协议就是网络传递、管理信息的一种规范,计算机之间需要准守一定的规则才能相互通信。
HTTP就是计算机世界中专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。
与HTTP有关的组件
网络模型
这个是为了给网络协议设计提供一个结构,网络设计者以分层的方式组织协议,每个协议属于层次模型之一。
每一层都是为它的上一层提供服务,也就是所谓的服务模型。每个分层中所有的协议称为协议栈。
因特网的协议栈由五个部分组成:物理层、链路层、网络层、运输层、应用层。
应用层
应用层是网络应用程序和网络协议存放的分层,HTTP就包含在其中,还有电子邮件传输协议SMTP、端系统文件上传协议FTP、还有解析域名的DNS协议。
我们把进行信息交换的信息分组称为报文(Message)。
运输层
因特网的运输层在应用程序断点之间传送应用程序报文,这一层主要有两种传输协议TCP和UDP。
TCP向它的应用程序提供了面向连接的服务,它能够控制并确认报文是否到达,并提供了拥塞机制来控制网络传输,所以当网络拥塞时,会抑制传输速率。
UDP协议向它的应用程序提供了无连接服务,它不具备可靠性,没有流量控制,没有拥塞控制。
我们把运输层的分组称为报文段。
网络层
网络层负责把数据报的网络分层从一台主机移动到另一台主机。
网络层一个非常重要的协议就是IP协议,所有基于网络层的因特网组件都必须运行IP协议,IP协议一种网际协议,除了IP协议还有一些其他国际协议和路由选择协议。
网络层一般就称为IP层,由此可见IP协议的重要性。
链路层
为了将分组从一个节点运输到另一个节点,网络层必须依靠链路层提供服务。
链路层包括以太网、wifi、电缆接入的DOCSIS协议,因为数据从源目的地传送通常需要经过几条链路,一个数据包可能被路途不同的链路层协议处理,我们把链路层的分组称为帧(Frame)。
物理层
就是讲帧中的一个个比特从一个节点运输到另一个节点,物理层的协议依旧使用链路层协议。
还有OSI模型
ISO国际标准化组织提出来计算机网络应该按照7层来组织,OSI比上面的网络模型多了表示层和会话层。
表示层主要包括数据压缩和数据加密以及数据描述,数据描述使得应用程序不必担心计算机内部存储格式的问题。
而会话层提供了数据交换的定界和同步功能,包括建立检查点和恢复方案。
输入网址访问页面中发生了什么
输入网址后,发起请求后,浏览器首先会解析这个域名,首先会查看本地硬盘中的hosts文件,看看有没有对应这个域名的规则,有就直接打开hosts文件中的ip。
如果本地hosts中没有对应的ip地址,浏览器会发出一个DNS请求到本地DNS服务器(域名分布系统)。本地DNS服务器一般是网络接入服务器商提供的。
然后本地DNS服务器会查询是否有缓存记录,有就可以直接返回,没有的话本地DNS服务器还要向DNS根服务器进行查询。
根DNS服务器没有对应的域名和IP地址对应关系,而是告诉本地DNS服务器,可以去域服务器去查询,给出域服务器的地址。
然后本地DNS服务器就向域服务器发起请求,域服务器找到后会返回域名的解析服务器的地址,本地DNS服务器又会向域名的解析服务器发起请求,这个时候才会收到一个域名和IP地址对应关系,最后本地DNS服务器会把这个数据保存起来。
得到IP地址后,浏览器就会构建一个HTTP请求,应用层的HTTP请求准备好后,浏览器在传输层发起一条到达服务器的tcp连接,也就开始了三次握手的过程。
握手包括一个同步报文、一个同步-应答报文、一个应答报文,由客服端尝试建立通信,然后服务器应答并且接受客户端的请求,最后由客户端发出该请求已经被接受的报文。
三次握手主要是防止server端一直在等待,浪费资源。
浏览器通过TCP/IP连接向web服务器发送一个HTTP请求,完整的HTTP请求包含请求起始行、请求头部、请求主体三部分。
服务器处理HTTP请求,然后服务器返回一个HTTP响应。
然后就是浏览器页面渲染了,这一部分在前端技术学习记录中有记载。
最后就是断开TCP连接,客户端和服务器的四次挥手。
第一次挥手:客户端想分手,发送信息给服务器。
第二次挥手:服务器通知客户端已经接受到分手请求,但还没有做好分手准备。
第三次挥手:服务器已经做好分手准备,通知给客户端。
第四次挥手:客户端发送给服务器,确认分手,服务器关闭连接。