HTTP 和 WebSocket

目录

    • HTTP是什么
      • HTTP局限性(HTTP1.1)
      • 请求和响应
      • HTTP的主要特点:
      • HTTP版本:
    • HTTP与TCP关系
    • 数据封装传输过程
      • 1. **协议层次模型**:
      • 2. **封装过程**:
        • 1. **应用层(HTTP)**:
        • 2. **传输层(TCP)**:
        • 3. **网络层(IP)**:
        • 4. **数据链路层**:
        • 5. **物理层**:
    • WebSocket是什么
      • WebSocket URL 格式
      • 通过http协议升级为websocket协议
      • ping-pong(心跳)机制
      • websocket关闭连接
      • websocket安全性
    • WebSocket 和 HTTP 之间区别

HTTP是什么

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

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

  1. HTTP的请求-响应模型是单向的无状态的
    请求-响应模型
  • 单向通信:在 HTTP 中,通信的基本模型是请求-响应模式。客户端发出请求后,服务器处理请求并返回响应。在这个过程中,客户端必须首先发起请求,服务器才能返回数据。
  • 无状态:HTTP 是无状态的协议,服务器不会记住客户端的请求历史。这意味着每次请求都是独立的,服务器无法主动向客户端发送信息。
  1. 即使 TCP 连接保持开放,服务器仍然不能主动向客户端发送数据
  • 持久连接:在 HTTP/1.1 中,引入了持久连接(Keep-Alive),允许多个 HTTP 请求/响应在同一个 TCP
    连接上进行,而无需为每个请求建立新的 TCP 连接。这降低了连接建立和关闭的开销。
  • 连接的生存时间:持久连接的存在并不意味着客户端和服务器可以在同一连接上进行持续的双向通信。即使 TCP连接保持开放,服务器仍然不能主动向客户端发送数据,客户端必须先发送请求。
  1. HTTP/2改进的服务器推送并不是持续的双向通信
  • 多路复用:在 HTTP/2中,虽然仍然遵循请求-响应模型,但允许在同一个连接上并行处理多个请求和响应。这种多路复用可以提高效率,减少延迟。
  • 服务器推送:HTTP/2引入了服务器推送的功能,服务器可以在客户端发出请求之前,主动发送某些资源到客户端。这种方式虽然实现了服务器主动发送数据的能力,但仍然是在特定条件下进行的,并不是持续的双向通信。
  1. 持续通信的实现,WebSocket
  • WebSocket:对于需要实时双向通信的应用,WebSocket 协议被引入。WebSocket允许在同一连接上进行持续的双向数据交换,客户端和服务器可以在任何时候发送和接收数据。这使得 WebSocket适用于实时聊天、在线游戏等需要频繁更新数据的场景。

HTTP局限性(HTTP1.1)

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

请求和响应

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

GET /index.html HTTP/1.1

请求行
请求行包含三个部分:

请求方法:指示要执行的操作,如 GET、POST、PUT、DELETE 等。
请求 URI:指定要访问的资源的地址。
HTTP版本:指明使用的 HTTP 版本,例如 HTTP/1.1。
请求头
请求头部包含多个键值对,用于传递客户端的信息和请求的附加参数。常见的请求头包括:
Host:请求的服务器名称和端口号。
User-Agent:客户端软件的名称和版本信息。
Accept:客户端可接受的内容类型。
Content-Type:发送数据的内容类型(对于 POST 和 PUT 请求)。
Authorization:身份验证信息。
请求体
请求体用于在 POST、PUT 等方法中发送数据。例如,在表单提交中,数据通常会包含在请求体中。

HTTP/1.1 200 OK

状态行
状态行包含三个部分:

HTTP 版本:指明使用的 HTTP 版本。
状态码:表示请求的处理结果(如成功、失败、错误等)。
状态描述:状态码的文本描述。
响应头
响应头部包含多个键值对,提供关于服务器和响应的附加信息。常见的响应头包括:
Content-Type:响应内容的类型(如 text/html、application/json)。 服务器回复的数据格式
Content-Length:响应体的长度(以字节为单位)。
Set-Cookie:服务器发送的 cookie。
Cache-Control:缓存策略。
响应体
响应体是实际传递给客户端的数据,可能是 HTML 页面、JSON 数据、图像等。对于成功的请求,响应体通常包含所请求的资源。

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 提供加密和安全性
头部开销请求和响应中都有额外的头部信息连接后只有数据帧,头部信息较少

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/55962.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【操作系统】引导(Boot)电脑的奇妙开机过程

🌹😊🌹博客主页:【Hello_shuoCSDN博客】 ✨操作系统详见 【操作系统专项】 ✨C语言知识详见:【C语言专项】 目录 什么是操作系统的引导? 操作系统的引导(开机过程) Windows操作系…

QD1-P2 HTML 编辑器:HBuilderX

本节学习: HTML课程内容介绍HBuilderX编辑器的使用 本节视频 www.bilibili.com/video/BV1n64y1U7oj?p2 HTML 内容 基础语法 标签整体架构DOCTYPE 常用标签 标题和水平线段落和换行列表div 和 span格式化标签图片超链接标签表格表单字符实体 编辑器 HBuilder…

设计测试用例的方法

目录 1、等价类 2、边界值 3、场景法 4、正交表法 5、设计正交表 6、判定表法 7、错误猜想法 1、等价类 在测试中选取一些数据作为等价类进行测试,如果测试通过,就代表测试通过,可以用少量代表性的测试数据取得较好的测试结果。 等价类…

Oracle EBS中 电子文档归档 模块的财务流程概览

Oracle E-Business Suite (EBS) 提供了电子文档归档(Electronic Document Archiving, EDA)功能,它是一个重要的组成部分,帮助组织有效地管理和存储大量的业务文档。虽然在提供的资料中没有直接提及电子文档归档模块的财务流程概览…

智能扭矩系统在轨道交通行业的应用_SunTorque

【大家好,我是唐Sun,唐Sun的唐,唐Sun的Sun。一站式数智工厂解决方案服务商】 在现代轨道交通领域,安全、高效和可靠性是至关重要的考量因素。智能扭矩系统作为一项先进的技术,正逐渐在轨道交通行业中展现出其重要的应用…

【原创】java+springboot+mysql劳动教育网系统设计与实现

个人主页:程序猿小小杨 个人简介:从事开发多年,Java、Php、Python、前端开发均有涉猎 博客内容:Java项目实战、项目演示、技术分享 文末有作者名片,希望和大家一起共同进步,你只管努力,剩下的交…

Vscode+Pycharm+Vue.js+WEUI+django火锅(四)WEUI和Vue整合

Vue移动端的UI库,其实网上推荐的排行榜上看起来都好,尤其是Vuetify 特别有眼缘,因为看到了三个字“易上手”。 但是因为之前系统的Django开发,便于企业微信中访问选用了WEUI,所以还是继续使用WEUI的方案。1.安装 PS C:\website\my…

使用Milvus和Llama-agents构建更强大的Agent系统

代理(Agent)系统能够帮助开发人员创建智能的自主系统,因此变得越来越流行。大语言模型(LLM)能够遵循各种指令,是管理 Agent 的理想选择,在许多场景中帮助我们尽可能减少人工干预、处理更多复杂任…

golang获取当天最小的时间,以DateTime的string格式返回

推荐学习文档 golang应用级os框架,欢迎stargolang应用级os框架使用案例,欢迎star案例:基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识,这里有免费的golang学习笔…

@RequestParam @PathVirable @RequestBody @ApiParam的区别

RequestParam 最常用用value指定参数名字,required字段指定参数是否必须,默认为true,当requiredfalse时,一般配合着defaultValue"xx"使用对应的url是这样的: https://localhost/requestParam/test?key1va…

通俗易懂的人工智能(AI)入门教程

欢迎来到人工智能(AI)的世界!无论您是对AI感到好奇,还是希望在未来的职业中应用AI技术,这篇教程将为您提供一个清晰的入门指南。我们将以简单易懂的方式,带您了解AI的基本概念、发展历程、主要分支及其应用…

C++与Java Web开发的对比分析:优势与差异

目录 1. 引言 2. C的开发优势与特点 2.1 高性能与硬件控制 2.2 面向对象与多范式支持 2.3 跨平台能力 3. Java Web的开发优势与特点 3.1 跨平台与广泛的企业应用 3.2 丰富的生态系统与工具支持 3.3 安全性与稳定性 4. C与Java Web的差异对比 4.1 性能与效率 4.2 开发…

基于go开发的终端版即时通信系统(c-s架构)

项目架构图 类似一个聊天室一样 整体是一个客户端和服务端之间的并发多线程网络通信,效果可以翻到最后面看。 为了巩固基础的项目练手所以分为9个阶段进行迭代开发 版本⼀:构建基础Server 新建一个文件夹就叫golang-IM_system 第一阶段先将server的大…

3303. 第一个几乎相等子字符串的下标

Powered by:NEFU AB-IN Link 文章目录 3303. 第一个几乎相等子字符串的下标题意思路代码 3303. 第一个几乎相等子字符串的下标 题意 给你两个字符串 s 和 pattern 。 如果一个字符串 x 修改 至多 一个字符会变成 y ,那么我们称它与 y 几乎相等 。 Create the v…

学习之偏函数

“”" 1、什么是偏函数? 在Python的内置模块 functoo1s提供了很多有用的功能,其中一个就是偏函数(partial )。 2、偏函数有什么用? 当函数的参数个数太多,需要简化时,使用 functoo1s.rtia1可以创建一个新的函数,这个新函数…

LLM | Tokenization 从原理与代码了解GPT的分词器

声明:以上内容全是学习Andrej Karpathy油管教学视频的总结。 --------------------------------------------------------------------------------------------------------------------------------- 大家好。在今天我们学习llm中的Tokenization,即分…

使离医院最远的村庄到医院的路程最短

给定n个村庄之间的交通图,若村庄i和j之间有道路,则将顶点i和j用边连接,边上的Wij表示这条道路的长度,现在要从这n个村庄中选择一个村庄建一所医院,问这所医院应建在哪个村庄,才能使离医院最远的村庄到医院的…

OpenCVSharp实现文档扫描功能详解

文章目录 简介1. 图像读取和预处理2. 查找轮廓3. 轮廓逼近与验证4. 透视变换5. 保存与显示结果总结简介 实现文档扫描功能是一个涉及多个处理步骤的过程,通过OpenCVSharp可以高效完成。以下是实现文档扫描的五个主要步骤,每个步骤包含详细的解释及示例代码。 1. 图像读取和预…

HCIP--以太网交换安全(三)MAC地址漂移防止与检测

MAC地址漂移防止与检测 一、MAC地址漂移防止与检测知识点 1.1MAC地址漂移的概述 MAC地址漂移是指交换机上一个vlan内有两个端口学习到同一个MAC地址,后学习到的MAC地址表项覆盖原MAC地址表项的现象。 1.2.MAC地址漂移的防止方法 (1)配置…

Windows7 X64 成功安装 .NET Framework 4.8 的两种方法

Windows7 X64 成功安装 .NET Framework 4.8 的两种方法 windows7系统SP1安装完成后,在安装某软件时,提示需要先安装4.6以上的版本net-framework包,正好电脑里有个net-framework4.8软件包,于是打算用上,可是在安装时&a…