0
点赞
收藏
分享

微信扫一扫

安卓冻屏bug案例作业分享-千里马学员wms+input实战作业

大自然在召唤 2024-10-15 阅读 5

目录

HTTP是什么

HTTP(超文本传输协议,Hypertext Transfer Protocol)是一种用于在网络上传输数据的协议。它是Web上信息传递的基础,允许客户端(通常是浏览器)和服务器之间交换文本、图像、视频和其他类型的数据。HTTP是一种无状态的请求-响应协议,意味着每次请求都是独立的,服务器不会记住之前的请求。
即请求一次,响应一次。

那么问题来了,HTTP是请求一次,响应一次,服务器不能给客户端发送信息。但是HTTP通过TCP建立长连接,为什么客户端服务器不能持续通信?

HTTP局限性(HTTP1.1)

  1. 因为HTTP是无状态,半双工的通信。意味着客户端给服务端发请求或是服务端给客户端发请求,都需要建立TCP连接,一来一回都要三次握手,会造成资源浪费和延迟。
  2. 安全性,HTTP传输明文不安全,需要HTTPS加强安全性。
  3. 适应性差,HTTP设计初衷是用于静态页面,对动态内容支持不灵活。

请求和响应

HTTP 请求由客户端(通常是浏览器)发起,向服务器请求资源。一个标准的 HTTP 请求包括以下几个部分:
请求行,请求头,请求体

GET /index.html HTTP/1.1
HTTP/1.1 200 OK

HTTP的主要特点:

  1. 请求-响应模型:客户端向服务器发送请求,服务器处理请求并返回响应。
  2. 无状态:每个请求都是独立的,服务器不保留请求之间的状态信息。
  3. 灵活性:支持多种数据格式,包括HTML、XML、JSON等。
  4. 可扩展性:可以通过不同的HTTP头部和状态码扩展功能。

HTTP版本:

  • HTTP/1.0:最早的版本,简单易用,但存在一些性能问题。
  • HTTP/1.1:增强了性能,支持持久连接和更多的控制功能。
  • HTTP/2:引入了多路复用、服务器推送等功能,提升了性能。
  • HTTP/3:基于QUIC协议,进一步优化了连接的建立和数据传输的效率。

HTTP与TCP关系

  • TCP:属于传输层协议,负责在网络上提供可靠的数据传输。它确保数据包在传输过程中的完整性和顺序,并能处理丢包、重传等问题。
  • HTTP:属于应用层协议,构建在TCP之上,负责具体的数据交换和应用逻辑(如网页请求和响应)。
  • HTTP 并不直接与 TCP 进行数据交互,而是将应用层数据交给传输层(TCP)。TCP 将 HTTP 的请求或响应报文作为数据负载,并通过 TCP 连接发送到目的地。
  • 在传输过程中,TCP 负责保证 HTTP 数据段的完整性和有序性。TCP 对 HTTP 数据报文进行分段、传输,然后接收端再通过 TCP 重组这些数据段,最后将完整的 HTTP 数据交给应用层的 HTTP 服务器或客户端处理。

数据封装传输过程

HTTP(超文本传输协议)是对应用层的数据进行封装,并将封装后的数据通过TCP协议传输。

1. 协议层次模型

  • HTTP(应用层协议):HTTP 位于 OSI 模型的应用层,负责定义客户端和服务器之间的请求与响应格式。HTTP 处理的是 Web 内容(如 HTML 页面、图片、视频等)的传输。
  • TCP(传输层协议):TCP 位于 OSI 模型的传输层,负责数据的可靠传输。TCP 对应用层传递下来的数据进行分段传输,并保证数据按顺序、无差错地到达目的地。

2. 封装过程

在网络通信中,数据通过逐层封装的方式进行传输。具体来说,HTTP 数据是通过如下步骤封装和传输的:

1. 应用层(HTTP)
  • HTTP 客户端(如浏览器)发送 HTTP 请求,生成应用层的数据报文。这包括 HTTP 请求行、头部、以及消息体等内容。
2. 传输层(TCP)
  • HTTP 的数据报文被传递到传输层,TCP 协议对其进行分段,并为每个段添加 TCP 头部信息(如序列号、端口号、校验和等)。这就是 TCP 数据段
  • TCP 确保分段的数据可靠传输,并在必要时进行重传和确认。
3. 网络层(IP)
  • TCP 数据段传递到网络层,IP 协议负责对这些段进行进一步封装,加入源 IP 和目标 IP 地址,生成 IP 数据包
4. 数据链路层
  • 最后,网络层的 IP 包被传递到数据链路层,在这里被封装成帧,准备在物理层上传输(如以太网帧)。
5. 物理层
  • 数据链路层的帧通过物理层(如电缆、无线等)在网络上传输。

WebSocket是什么

WebSocket 是一种(应用层的)网络通信协议,旨在实现客户端和服务器之间的全双工(双向)通信。它为实时 Web 应用程序提供了一种有效的解决方案,能够在一个持久连接上进行低延迟的数据交换。

HTTP是半双工通信。

WebSocket URL 格式

ws://[host]:[port]/[path]

ws:表示 WebSocket 协议(未加密)。
wss:表示安全的 WebSocket 协议(加密,类似于 HTTPS)。
[host]:服务器的主机名或 IP 地址。例如,example.com。
[port]:可选,指定端口号。如果省略,默认端口为 80(对于 ws)或 443(对于 wss)。
[path]:服务器上 WebSocket 服务的路径。例如,/chat。

ws和HTTP默认端口相同,都是80;wss和HTTPS默认端口相同,都是443。

通过http协议升级为websocket协议

  1. 客户端发起 HTTP 请求
    客户端使用标准的 HTTP GET 方法,向服务器发送请求,同时在请求头中包含一些特别的字段,以指明希望升级到 WebSocket。
  2. 服务器响应
    如果服务器支持 WebSocket 协议,它将会返回一个 101 状态码的 HTTP 响应,表明协议已成功升级。
  3. 建立 WebSocket 连接
    一旦客户端收到带有 101 状态的响应,HTTP 连接就升级为 WebSocket 连接,双方可以开始以 WebSocket 格式进行双向通信。

ping-pong(心跳)机制

WebSocket 的 Ping-Pong 机制是维持连接稳定性的重要手段,确保双方在长时间不活动的情况下仍然能够保持连接有效性。

机制流程

  • 连接建立后:当 WebSocket 连接建立时,双方开始通信并交换数据。
  • 定时发送 Ping 帧: 一般情况下,服务器会设置一个定时器,定期向客户端发送 Ping 帧。例如,每隔 30 秒发送一次。
  • 客户端回应 Pong 帧: 客户端在收到 Ping 帧后,立即发送 Pong 帧作为响应。这表明连接仍然有效且双方都能正常通信。
  • 监测连接状态: 如果服务器在一定时间内没有收到客户端的 Pong 响应,它可能会认为连接已断开,可以选择关闭连接或尝试重新连接。

websocket关闭连接

使用 WebSocket API 中的 close() 方法。

close() 方法可以接受两个可选参数:
code: 一个整数,表示关闭连接的状态码。常用的状态码包括:
1000 - 正常关闭。
1001 - 由于端点迁移而关闭。
1002 - 收到无效的数据。
1003 - 收到无效的数据类型。
reason: 一个字符串,表示关闭连接的原因(可选)。

websocket安全性

使用 wss:// 协议而不是 ws://。WSS 是 WebSocket 协议的安全版本,它通过 TLS(传输层安全协议)对数据进行加密,确保在网络上传输的数据不被窃听或篡改。

使用wss时,必须提供有效的SSL/TLS证书。

WebSocket 和 HTTP 之间区别

特性HTTPWebSocket
协议类型无状态的请求-响应协议全双工通信协议
连接方式每次请求都要建立新的连接一旦建立连接,可以持续使用同一连接
数据传输模式单向(客户端发送请求,服务器响应)双向(客户端和服务器可以相互发送消息)
性能效率较高的延迟(每次请求都需建立连接)低延迟(长连接,减少握手次数)
数据格式通常为文本/HTML、JSON等可以是文本、二进制数据
协议升级不支持支持通过 HTTP 升级到 WebSocket
心跳机制可以实现心跳机制以保持连接活跃
适用场景适用于静态内容、REST API请求适用于实时应用,如聊天、游戏等
安全性使用 HTTPS 提供安全性使用 WSS 提供加密和安全性
头部开销请求和响应中都有额外的头部信息连接后只有数据帧,头部信息较少
举报

相关推荐

0 条评论