HTTP协议传输的数据都是未加密的,也就是明文的,因此 使用HTTP协议传输隐私信息非常不安全,为了保证这些隐 私数据能加密传输,于是网景公司设计了SSL(Secure SocketsLayer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。 2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。 3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。 4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。 最后一点在Android 9.0 如果用http进行传输,需要在application节点下设置android:usesCleartextTraffic="true
https协议需要到CA申请证书。 http是超文本传输协议,信息是明文传输;https 则是具有安全性的ssl加密传输协议。 http和https使用的是完全不同的连接方式,用的端口也不 一样,前者是80,后者是443。http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
http默认使用80端口,https默认使用443端口TCP:传送控制协议(Transmission Control Protocol)
UDP:用户数据报协议 (UDP:User Datagram Protocol)
socket:
这是为了实现以上的通信过程而建立成来的通信管道,其真实的代表是客户端和服务器端的一个通信进程,双方进程通过socket进行通信,而通信的规则采用指定的协议。
socket只是一种连接模式,不是协议,socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。tcp、udp,简单 的说 (虽然不准确)是两个最基本的协议, 很多其它协议都是基于这两个协议如,http就是基于tcp 的,. 用socket可以创建tcp连接,也可以创建udp连接, 这意味着,用socket可以创建任何协议的连接,因为其它 协议都是基于此的。
这个看OKHTTP的EventListerner就知道了。这里总结一张okhttp的回调表格。详细的需要自己阅读源码注释哦
请求步骤 | 含义 |
---|---|
dnsStart | DNS解析开始 |
dnsEnd | DNS解析结束 |
connectStart | TCP连接开始 |
secureConnectStart | 建立TLS安全信道开始 |
secureConnectEnd | 信道建立结束 |
requestHeadersStart | 发送首部字段开始 |
requestHeadersEnd | 发送首部字段结束 |
requestBodyStart | 发送请求体开始 |
requestBodyEnd | 发送请求体结束 |
responseHeadersStart | 接受首部开始 |
responseHeadersEnd | 接受首部结束 |
responseBodyStart | 接受响应体开始 |
responseBodyEnd | 接受响应ti结束 |
connectEnd | TCP连接断开 |
另外截一张postman上的图
常见的 TCP 中的头部数据表示
TCP 三次握手
TCP 三次握手
一开始,客户端和服务端都处于 CLOSED 状态。先是服务端主动监听某个端口,处于 LISTEN 状态
服务器收到客户端的应答报文后,也进入 ESTABLISHED 状态,此时 TCP 建立结束,双方可以收发数据
为什么是三次握手?不是两次、四次?
TCP 四次挥手过程
客户端主动关闭连接 —— TCP 四次挥手
客户端和服务端都需要一个 FIN 和一个 ACK,因此通常被称为四次挥手。
这里一点需要注意是:主动关闭连接的,才有 TIME_WAIT状态。
为什么挥手需要四次?
回顾上方四次挥手双方发 FIN 包的过程,就能理解为什么需要四次了。
从上面过程可知,服务端通常需要等待完成数据的发送和处理,所以服务端的 ACK 和 FIN 一般都会分开发送,从而比三次握手导致多了一次。
HTTP是属于应用层的协议,TCP(传输控制协议)和UDP(用户数据报协议)是属于传输层的协议。
我们都知道TCP协议是面向连接的,每次进行连接都要进行三次握手和四次挥手,所以它的连接是可靠的。而HTTP 是在TCP上层的协议,所以它也是可靠的。
那为什么TCP可靠? 首先来讲一下网络的分层,因特网协议可以分为五层,分别是: 应用层->传输层->网络互联层->网络访问层->物理层或许你觉得很抽象,但是通过栗子你就会发现并没有那么复杂。
如访问一个Http请求:http://45.124.252.66:9090/main/
怎么访问到这个网站呢?首先我们需要通过网络,可能是移动网或者宽带网等(这就是物理层,它是一个传输介 质),然后找到对应那一台被我们访问的服务器的mac地址(网络访问层)进行连接,再匹配它的IP(网络互联层)是否对应,确定了主机后,再通过端口号9090(传输层)访问对应的进程,由于一个进程里面有很多业务模块,而我们需要访问main模块(应用层),最终通过不同层来实现网站的访问。每个层都是相互独立,并且向下依赖,而传输层是能确定唯一主机的,因为我们可以通过mac地址、host和端口来 确定唯一的一台访问主机上面的进程。或许有的人会问, 那如果网络中断呢?那不就不可靠了吗,我们常说的网络中断是属于物理层,由于是向下依赖,传输层的建立是依赖于下面的三层(网络互联层、网络访问层、物理层)已经连接成功,如果下面的层都没有连接成功,也就没有传输层这一说了,所以传输层协议是一个“靠谱”的协议。
我们通过分层了解了传输层是“靠谱”的协议,那么怎么保证它是可靠的呢?
那就要讲到三次握手和四次挥手的作用了
三次握手就是在建立连接之前需要客户端需要先给服务端发出SYN(c)报文,当服务器收到后需要返回客户端ACK=SYN(c)+1,并且传输自己生成的SYN(s)给客户端,客户端收到后进入已连接状态,需要再回一个ACK=SYN(s)+1 给服务器,服务器收到ACK后也进入了连接状态,这就是一个三次握手的过程,通过双方进行三次通信保证此时双方都已经进入准备状态。
四次挥手就是在结束连接的时候,客户端会发送FIN(c)给服 务器,服务器收到后回复客户端ACK=FIN(c)+1告知客户端收到客户端的结束请求了,这时客户端就会进入CLOSING(半关闭状态),等待服务器的结束请求。 在一段小延迟时间后,服务器也会发送一个FIN(s)请求给客户端, 客户端收到后发送ACK=FIN(s)+1给服务器,服务器收到ACK后就进入技术状态。客户端在等待2个MSL(避免服务器收不到ACK)后也进入结束状态。
在每次进行连接和断开连接都需要经过复杂的三次握手和四次握手,从而保证了每个连接都是可靠的,所以TCP协议是可靠的,而HTTP就是TCP上层的协议,所有连接都是基于TCP协议的。
在我们能够确定每个请求对应的唯一主机和端口号,并且通过Http协议添加响应的请求数据信息(如模块名字等)确定请求的代码位置,并且在每次请求都通过三次握手和四次挥手保证连接的可靠性,所以一个Http请求是可靠的。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。