| |
|
开发:
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之间的通信流程如图所示。
1.1 什么是HTTPhttp 是超文本传输协议。超文本:就是超过了普通的文本,包括:文字、图片、视频等的混合体,最关键的是超链接。 传输:两点之间传输数据(允许中间有中转) 1.2 http报文组成请求报文:
响应报文:
? ? ? ? ? ?? ?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状态码
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的优缺点:优点:
缺点:
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地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |