2021.02.23:Http协议

一:Http协议

HTTP协议:是种超文本传输协议(请求/响应协议)。它是建立在TCP上无状态单向链接协议(属于TCP/IP协议族中一员)。它规定客户端发送什么样的数据给服务器端(HTTP请求),并且服务器端需要返回什么样的数据(HTTP响应);注意一个完整的HTTP请求/响应,并不只是通过HTTP协议来实现的。而是由多个协议相互协作实现的;
1. HTTP请求和响应
HTTP请求是由客户端发起的动作,告诉服务器需要什么数据。这一过程称之为HTTP请求。服务器接收到HTTP请求后,作出相应的处理,返回HTTP请求所需要的数据。这一过程称之为响应;如图所示:

不管是HTTP请求/响应,它们的结构一般分为3层。请求行/响应行、请求头/响应头、请求主体/响应主体。这3层结构组成统称为请求/响应报文;

HTTP请求结构:
1. 请求行:主要由请求方式GET/POST/PUT等、对应的URL地址,HTTP协议和协议版本组成;
2. 请求头:主要由若干属性组成,包含用户代理、cookie等用户信息;
3. 请求主体:主要是给服务器端发送的数据。

HTTP响应结构:
1. 响应行:HTTP协议、协议版本、状态码和状态描述组成;
2. 响应头:主要由若干属性组成,包含数据类型(content-type)、数据长度(content-length)等信息;
3. 响应主体:主要反馈给客户端的数据信息(JSON数据、图片、音频等数据);

2. HTTP的握手和挥手

每个完整的HTTP请求,客户端都会发起3次握手和4次挥手动作。3次握手是发生在HTTP连接建立阶段;4次挥手发生在HTTP连接断开阶段;如图所示:

 

 1. 3次握手:

第一次握手:客户端在TCP中准备SYN标志位1,并初始化序号为X发送给服务器端;

第二次握手:服务器端接收到客户端的报文,就准备确认包(ACK)应答。ACK和SYN标志位都为1,同时初始化序号Y,将客户端的发送序号置于X+1。响应给客户端;
第三次握手:客户端接收到服务器响应,将服务器序号Y+1,准备确认包(ACK)应答(ACK标志位1,SYN标志位0),同时发送序号Z给服务器端做最后的确认,并建立链接;

2. 4次挥手:
第一次挥手:客户端发送一个FIN,用来关闭服务端到Server的数据传送,客户端进入FIN_WAIT_1状态。

第二次挥手:服务端 收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务端进入CLOSE_WAIT状态

第三次挥手:服务端发送一个FIN,用来关闭Server到Client的数据传送,服务端进入LAST_ACK状态。

第四次挥手:客服端收到FIN后,服务端进入TIME_WAIT状态,接着发送一个ACK给服务端,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

总结过程:客户端发送HTTP请求时,会经过3次握手阶段确认连接的建立,连接建立成功后,就开始传递数据并获取服务器的响应。接收响应结束后,又会经过4次挥手阶段,确认连接的断开;

好比我们需要去朋友那拿点东西,先打电话过去确认朋友在不在家,如果朋友在家,我们再过去拿东西(这样就可以避免朋友不在家,白跑一趟)。拿到东西后,就告诉朋友不需要再拿东西。朋友知道后就会做其他事情了。不用等着我们了;

通过该过程可知HTTP请求对于服务器端属于被动的,它不能主动发送任何数据给客户端,它必须等待客户端请求才能做出相应的反馈。同时HTTP又是无状态的,服务器端不知道客户端是不是第N次访问。

3. 网络TCP/IP分层模型
网络模型中有OSI七层模型和TCP/IP四层模型。由于OSI模型过于复杂,在网络中只做理论参考,实际应用场景中,TCP/IP模型应用广泛,已经成为互联网的实施标准。所以这里直接上TCP/IP模型;如下图所示:

 

 

(来自:https://blog.csdn.net/xuedan1992/article/details/80958522)

应用层:该层更加协议不同决定提供用户不同的应用服务。例如FTP文件传输协议提供文件上传/下载功能;HTTP超文本协议,提供对多种不同类型网络数据的访问;
传输层:为应用层提供端到端的通信,保证了数据包的顺序性和完整性的传输;
网络层:将用户传输的数据进行整理成数据包,以数据包的形式在网络中传输;
数据链路层:将物理层的数据比特流封装成帧,控制帧在物理信道上的传输,包括纠错,调节发送速率等。另外还提供了两个主机之间数据链路的建立,维持和释放的管理工作;

二:Http请求的完整过程

当用户在浏览器输入网址回车之后,网络协议都做了哪些工作了?

1.首先干活的是浏览器应用程序,他要解析出url中的域名(底下解析域名)

      由于IP地址具有不方便记忆并且不能显示地址组织的名称和性质等缺点,人们设计出了域名,并通过网域名称系统(DNS,Domain Name System)来将域名和IP地址相互映射,使人更方便地访问互联网,而不用去记住能够被机器直接读取的IP地址数串。

2.根据域名获取对应的ip地址,首先从浏览器缓存中查看,如下还可以查看浏览器中域名对应ip解析(从url中解析出域名,并以此检查缓存中有没有对应域名的ip,1.浏览器的缓存2.本机域名解析文件hosts)如果上述步骤没有获取到ip,则发起DNS请求获取ip

3.拿到ip地址后,浏览器就可以发起与服务器的三次握手

4.握手建立之后,就开始组装http请求报文,发送报文

5.服务器收到请求报文之后开始,请求报文解析,生成相应数据,发送相应数据

6.浏览器收到相应之后,开始渲染页面

三:TCP协议

Tcp面向连接的,可靠的,基于字节流的传输层通信协议

        字节流: 字节流是由字节组成的,字符流是由字符组成的. Java里字符由两个字节组成.字节流是最基本的,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的encode来处理,也就是要进行字符集的转化。在从字节流转化为字符流时,实际上就是byte[]转化为String时

特点:

·基于连接的,数据传输之前需要建立连接

·全双工的:双向传输

·字节流:不限制数据大小,打包成报文段,保证有序接收,重复报文自动丢弃

·流量缓冲:解决双方处理能力的不匹配

·可靠的传输服务:保证可达,丢包时通过重发机制实现可靠性

·拥塞控制:防止网络出现恶心拥塞

Tcp连接管理

①.TCP连接:四元组(源地址,源端口,目的地址,目的端口)

②.确立连接;TCP三次握手

a.同步通信双方初始序列号(ISN,initial sequence number)

b.协商TCP通信参数(mSS,窗口信息,指定校验和算法)

客户端与服务器进行握手

客户端向服务端发送syn seq=x的报文,当服务端收到以后返回给客户端ack=x+1的报文同时间自己的报文传给客户端syn  seq=y,当客户端接收到服务器的响应后通过x+1确定是自己上次发送的,同时收到服务器的报文,这是客户端返回给服务器端ack=y+1,响应给服务器端。

四:HTTPS协议

由于http天生明文的特点,整个传输过程完全透明,任何人都能够在链路中截货,修改或者伪造请求/响应报文,数据不具有可行性,因此就诞生了为安全而生的https协议.

使用HTTPS时,所有的HTTP请求和响应在发送到网络之前,都要进行加密

以前我们的http直接跟tcp交互,然后就是ip,网络接口

现在我们的http先和安全层交互ssl/tsl交互进行加密,然后跟tcp交互,然后就是ip,网络接口

①.ssl/tsl

ssl即安全套接层,tls传输层安全

posted @ 2021-02-23 17:07  iLisa  阅读(109)  评论(0编辑  收藏  举报