IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> OKHTTP深入浅出(一)----基础理论 -> 正文阅读

[网络协议]OKHTTP深入浅出(一)----基础理论

?

OSI模型

? ? ? ? 个人理解,OSI七层模型,CS之间的通信流程如图所示。

  • 应用层:就好比浏览器,主要协议有Http、FTP(文本传输协议)、SMP(简单邮件传输协议)、POP3(邮件协议版本3)等。
  • 表示层:对信息进行加密、解密、压缩、解压缩。
  • 会话层:机器已机器之间通过端口建立会话。
  • 传输层:传输协议、TCP、UDP
  • 网络层:将传输过来的数据达成数据包、通过路由器选择最优的路径。
  • 数据链路层:控制网络和物理层之间的通信,保证在不可靠的物理线路上进行数据的可靠传输。交换机
  • 物理层:网线、光纤。

1.1 什么是HTTP

http 是超文本传输协议。超文本:就是超过了普通的文本,包括:文字、图片、视频等的混合体,最关键的是超链接。 传输:两点之间传输数据(允许中间有中转)

1.2 http报文组成

请求报文:

  • 请求行:请求方法、URL、协议/版本
  • 请求头(Request header)
  • 请求正文

响应报文:

  • 状态行
  • 响应头
  • 响应正文

? ? ? ? ? ??

?1.3 HTTP字段

?host字段:

? ? ? ?可以将请求发送到同一台服务器上不同的网站。例如,一个IP(111.111.111.11)地址可以对应多个域名A、B、C。然后通过域名供应商将ABC与服务器的IP地址关联起来,那么通过ABC任何一个域名最终都会访问到IP111.111.111.11。这时就需要host了,host可以看成服务器IP上的一个站点,每次通过ABC域名都会访问到同一个服务器,但是通过不同的HOST可以区分出访问的服务器的不同的站点。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?host:www.baidu.com

Content--Length字段:

? ? ? ? ? Content--Length:1000 表明此次回应的数据长度为1000字节,此长度后面的字节不属于此次回应的数据。

Connection字段:

? ? ? ? ? 表明客户端要求服务器试用TCP持有连接,以便其他请求复用,直到客户端或者服务器主动断开连接。

? ? ? ? ? Connection:keep--alive

? ? ? ? ? http/1.1 版本的默认连接都是持久连接,但是为了兼容老版本,还是需要指定,不是标准字段。

Content--type字段:

? ? ? ? ? ? 用于服务器回应时,告诉客户端,本次数据的格式。

? ? ? ? ? ? Content--Type:text/html;charset=utf-8 表明发送的是网页,编码是UTF-8。

? ? ? ? ? ? 客户端在请求的时候,可以使用Accept字段表明可以接受的数据格式。

? ? ? ? ? ? Accept:*/* 表明客户端可以接受任何格式的数据。

Content-Encoding字段:

? ? ? ? ? ? 表明数据的压缩方法,表示服务器返回的数据使用什么压缩格式。

? ? ? ? ? ?Content-Encoding:gzip 服务器返回的数据使用了gzip的压缩格式,客户端需要用此方式解压、

? ? ? ? ? ?客户端在请求的时候用Accept--Encoding字段说明接受哪些压缩方法:

? ? ? ? ? ?Accept--encoding:gzip , deflate

1.4 http状态码

  • 1XX:提示信息,协议处理中的一种中间状态,实际中用到的比较少。
  • 2XX:服务器成功处理了客户端的请求。
  • 3XX:重定向。客户端请求的资源发生了变动,需要客户端用新的URL请求资源。常见的有:301:永久重定向,请求的资源不存在了;302:临时重定向,资源还在,暂时需要用另一个URL访问;301、302都会在响应头中使用字段location,指明后续要跳转的URL,浏览器会自动重定向新的URL。304:不具有跳转的含义,资源未修改,重定向已存在的缓存文件,用于缓存控制。
  • 4XX:客户端发送的报文有错误,服务器无法处理。常见的有:400:笼统性的说明服务端报文有错误;403:服务器禁止访问资源;404:客户端请求的资源不存在。
  • 5XX:服务器内部发生了错误。常见的有:500:笼统性错误;501:还不支持客户端的请求;502:服务器作为网关或代理时返回的错误码,服务端自身正常,访问后端服务器发生了错误;503:服务器忙,稍后在试。

1.5 GET 与 POST 请求

get请求的含义是从服务获取资源,是安全幂等的,post请求是向URI指定的资源提交数据,不是安全幂等的,数据就放在报文的body。get类似看朋友圈,post则是评论朋友圈。

在http协议里,安全和幂等的概念,安全就是请求的方法不会破坏服务器的资源,幂等就是多次操作,服务器返回的资源相同。

GET是直接添加到URL后面的,直接就可以在URL中看到内容,而POST是放在报文内部的,用户无法直接看到。

GET提交的数据长度是有限制的,因为URL长度有限制,具体的长度限制视浏览器而定。而POST没有。

1.6 http特性

1.6.1 http/1.1的优缺点:

优点:

  • 简单:http的基本报文格式就是header+body,头部信息也是key-value简单文本格式。
  • 灵活和易于扩展:http协议中的各种请求方法、URL/URI 、状态码、头字段等都没有固定死,允许开发人员自定义和扩充。同时http位于应用层(7),下层可以随意变化。HTTPS就是在http与tcp层增加了SSL/TLS 安全传输层,http3则将把TCP换成了基于UDP的QUIC。
  • 跨平台和应用广泛:

缺点:

  • 不安全:http是用明文传输,相当于裸奔;不验证通信方的身份,可能会遭遇伪装;无法证明报文的完整性,可能会被篡改。
  • 无状态:无状态的好处可能是,不需要额外的资源记录状态信息,能够减少服务器的压力,缺点就是每次操作都需要验证,连续的操作体检极差。解决无状态的方法,最常用的采用Cookie技术。Cookie通过在请求和响应报文中写入cookie信息来控制客户端的状态。相当于客户端在第一次请求后,服务器会下发一个带有客户端信息的tag,后续客户端请求服务器的时候,会带上这个tag,服务器就认识了。

1.6.2?http/1.1的性能

? ? ? http协议是基于TCP/IP协议的,使用了 请求--应答 的通信模式。因此性能关键在于这两点

? ? ?长连接:早期的http1.0 性能上的最大问题就是每次发起一个请求,都要新建一次TCP连接(三次握手),并且是串行去请求,做了无谓TCP连接和断开,增加了通信的开销。

为了解决连接问题,http1.1提出了长连接(持久连接)的通信方式,有效的减少了无谓TCP连接和断开。持久连接的特点就是,只要任意一段没有明确提出断开连接,就是保持连接状态。

? ? ?管道传输(pipeline):http1.1采用了长连接的方式, 使得管道传输成为了可能。即在同一个TCP连接,客户端可以在同一个TCP连接中发起多个请求,能够减少整体的响应时间。

例如:客户端需要两个资源。以前的做法就是在同一个TCP连接中,先发送A请求,然后等待服务端做出回应,收到之后在发送B请求.管道机制允许同时发出A和B,但是服务器还是按照顺序,先回应A请求,在回应B请求。要是A回应比较慢,那么B就要排队等待。这被称为“队头堵塞”。

? ? ? 队头堵塞

? ? ?

2 TCP的三次握手和四次挥手

2.1 TCP的三次握手

? ? ?第一次握手:建立连接. 客户端(client) 发送连接请求.将SYN设置为1,SequenceNumber(seq)设置为x;接下来客户端进入SYN_SENT状态.等待服务器(service)的确认.

 第二次握手:服务器收到客户端的SYN报文段,对SYN报文进行确认,设置Acknowledgment Number(ACK)为x+1(seq+1),同时设置自己的SYN请求信息,设置SYN为1,将seq设置为y,服务端将上述所有的信息都放到SYN + ACK 报文之后,发送给客户端,此时服务端进入SYN_RCVD状态.

  第三次握手:客户端收到服务器的SYN+ACK报文后,将ACK设置为y+1,先服务器发送ACK报文,这个报文发送完毕后,客户端和服务器都进入ESTABLISHED(TCP链接成功)状态,完成TCP的三次握手.

?2.2 TCP 的四次挥手

? ? ? 四次挥手的过程:

?第一次挥手: 客户端设置seq和ACK,向服务器发送一个FIN报文段.此时客户端进入FIN_WAIT_1状态,表示客户端没有数据向服务器发送了.

第二次挥手:服务器收到了客户端发送的FIN报文段,向客户端回了一个ACK报文.

?第三次挥手:服务端向客户端发送方FIN报文段,请求关闭连接,同时服务器进入LAST_ACK状态.

第四次挥手:客户端收到服务器的发送的FIN报文段,向服务器发送ACK报文段,然后客户端进入TIME_WAIT状态.服务器收到客户端的ACK报文后,就关闭链接.此时客户端等待两秒(最大报文生成时间)后,依然没有收到回复,说明服务器已经正常关闭了,这样客户端也可以关闭连接了.

?

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-01-04 13:46:39  更:2022-01-04 13:48:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 12:48:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码