【一文读懂】HTTP与Websocket协议

HTTP协议

概述

HTTP (Hypertext Transfer Protocol),即超文本传输协议,是一种用于在客户端和服务器之间传输超文本(例如网页、图片、音频、视频等)的通信协议。它是万维网(WWW)的基础,负责在浏览器(客户端)和 web 服务器之间交换信息。HTTP 是一个 应用层 协议,位于 OSI 模型的第七层,通常通过 TCP(传输控制协议)进行通信。

HTTP 是无状态的、面向请求/响应的协议,意思是每一次请求都是独立的,服务器不会保存客户端的状态。每次客户端发起请求,服务器都必须处理并响应,即使是同一个客户端的连续请求,也被视为独立的。

HTTP 请求/响应模型

HTTP 协议基于请求/响应模型,通信流程包括两部分:客户端发送请求,服务器返回响应。

1. HTTP 请求报文(Request Message)

一个 HTTP 请求报文主要由以下几个部分组成:

  • 请求行(Request Line)

    • 请求方法(Request Method)

      :定义了客户端希望进行的操作,常见的 HTTP 请求方法包括:

      • GET:请求指定的资源,通常用于获取网页或文件。
      • POST:将数据提交到服务器,常用于表单提交。
      • PUT:上传数据,通常用于更新服务器上的资源。
      • DELETE:删除指定的资源。
      • HEAD:与 GET 方法类似,但只返回响应头,不返回实际内容。
      • PATCH:用于对已有资源进行部分修改。
    • 请求 URL(Request URL):指定资源的位置,例如 https://www.example.com/index.html

    • 协议版本(HTTP Version):指定使用的 HTTP 协议版本,通常是 HTTP/1.1HTTP/2

    示例

    GET /index.html HTTP/1.1
    
  • 请求头部(Request Headers) 请求头部包含了请求的元信息,描述客户端环境、请求内容类型、认证信息等。例如:

    • User-Agent:指定发起请求的客户端软件信息。
    • Accept:指定客户端能够处理的内容类型(如 text/htmlapplication/json 等)。
    • Host:指定请求目标的主机名(用于虚拟主机的支持)。
    • Cookie:包含发送给服务器的 Cookie 数据。
    • Authorization:包含授权信息,用于身份验证。

    示例

    User-Agent: Mozilla/5.0
    Accept: text/html,application/xhtml+xml
    
  • 请求体(Request Body) 请求体通常在 POSTPUT 等方法中使用,用于传送数据到服务器(例如表单提交的数据、JSON 数据等)。GET 请求一般没有请求体。

    示例(POST 请求提交表单数据):

    name=John&age=30
    
2. HTTP 响应报文(Response Message)

HTTP 响应报文由服务器发送回客户端,通常包含服务器处理请求后的结果。响应报文的组成部分如下:

  • 响应行(Response Line)

    • 协议版本(HTTP Version):指定响应所使用的 HTTP 协议版本。
    • 状态码(Status Code):用于表示请求的处理结果,如成功、失败或错误。
    • 状态短语(Status Phrase):对状态码的简短描述,例如 OKNot Found 等。

    示例

    HTTP/1.1 200 OK
    
  • 响应头部(Response Headers) 响应头部包含关于响应的元信息,描述服务器的状态、返回的数据类型等。例如:

    • Content-Type:响应体的内容类型(如 text/htmlapplication/json 等)。
    • Content-Length:响应体的长度(以字节为单位)。
    • Date:响应的时间戳。
    • Set-Cookie:服务器返回给客户端的 Cookie。

    示例

    Content-Type: text/html; charset=UTF-8
    Content-Length: 1234
    Set-Cookie: sessionid=abcd1234
    
  • 响应体(Response Body) 响应体包含了实际的数据内容,这是服务器返回给客户端的主体部分。对于 GET 请求,响应体通常是请求的网页内容、图片、视频等资源。对于 API 请求,响应体通常是 JSON 或 XML 格式的数据。

    示例(返回 HTML 内容):

    <html><head><title>Welcome</title></head><body><h1>Hello, World!</h1></body>
    </html>
    

3. HTTP 状态码

状态码是服务器返回给客户端的一组三位数字,表示请求的处理状态。常见的状态码包括:

  • 1xx (信息性状态码):请求已接收,继续处理。
    • 100 Continue:表示服务器已收到请求头部,客户端可以继续发送请求体。
    • 101 Switching Protocols:服务器正在切换协议。
  • 2xx (成功状态码):请求已成功处理。
    • 200 OK:请求成功,服务器返回响应数据。
    • 201 Created:请求成功,资源已创建。
    • 204 No Content:请求成功,但没有返回内容。
  • 3xx (重定向状态码):需要客户端进一步操作来完成请求。
    • 301 Moved Permanently:资源已被永久移动到新位置。
    • 302 Found:资源临时移动到新位置。
    • 304 Not Modified:请求的资源未修改,可以使用缓存。
  • 4xx (客户端错误状态码):请求有语法错误或无法完成。
    • 400 Bad Request:请求语法错误,服务器无法理解。
    • 401 Unauthorized:需要用户认证。
    • 403 Forbidden:服务器拒绝访问该资源。
    • 404 Not Found:请求的资源不存在。
  • 5xx (服务器错误状态码):服务器处理请求时发生错误。
    • 500 Internal Server Error:服务器内部错误,无法处理请求。
    • 502 Bad Gateway:网关或代理服务器收到无效响应。
    • 503 Service Unavailable:服务器暂时不可用。

4. HTTP 协议的版本

  • HTTP/1.0:最初的 HTTP 协议版本,支持基本的请求和响应机制,但性能较低,缺乏多路复用等特性。
  • HTTP/1.1:相比 HTTP/1.0,HTTP/1.1 增强了持久连接、管道化、分块传输等特性,减少了建立连接的次数。
  • HTTP/2:引入了二进制协议、流的多路复用、头部压缩等技术,大大提高了性能,尤其是减少了页面加载时间。
  • HTTP/3:基于 QUIC(Quick UDP Internet Connections)协议,旨在进一步提高性能,尤其在高延迟或丢包的网络环境中表现更佳。

5. HTTP 与 HTTPS

  • HTTP:在客户端和服务器之间传输数据时,数据是明文的,容易受到中间人攻击。
  • HTTPS:即 HTTP over SSL/TLS,数据在传输过程中会进行加密,确保通信的机密性和完整性。现代 web 应用普遍推荐使用 HTTPS 来保证安全性。

WebSocket

概述

WebSocket 是一种计算机通信协议,属于 应用层协议,它为客户端和服务器之间提供了一个 全双工、双向通信 的通道。WebSocket 通过建立在 TCP 之上的连接,允许客户端和服务器进行实时、低延迟的消息交换。WebSocket 由 IETF(Internet Engineering Task Force)发布,是一种适用于需要持续交换数据的应用的技术。

WebSocket 协议的引入,主要是为了解决传统的 HTTP 协议在实时通信中的不足,尤其是在高频率消息交互、双向通信等场景中。

特点

  1. 全双工通信(Full-Duplex)
    • WebSocket 是一种 全双工(Full-Duplex)协议,意味着客户端和服务器可以同时发送和接收数据。这与传统的 HTTP 协议(单向请求-响应模式)不同。
  2. 实时性(Low Latency)
    • 一旦 WebSocket 连接建立,客户端和服务器之间就可以在没有建立新的连接的情况下持续发送和接收数据。避免了频繁的连接与断开,极大减少了延迟。
  3. 持久连接
    • WebSocket 连接在创建后保持持久性,直到显式关闭。不同于 HTTP 请求-响应模型,WebSocket 不需要每次通信都重新建立连接,这使得通信更加高效。
  4. 低开销
    • WebSocket 数据帧结构非常简洁,不像 HTTP 那样包含冗余的头信息,因此每次传输的开销非常小,适合需要频繁数据交换的应用场景。
  5. 双向通信
    • WebSocket 支持 双向通信,这意味着服务器可以主动向客户端推送数据,而不必等到客户端发起请求。这对于需要实时推送数据的应用(如在线聊天、实时股票价格、游戏等)至关重要。

工作原理

  1. 连接建立

    • WebSocket 连接是通过HTTP 握手(HTTP Handshake)来建立的,但一旦建立连接,HTTP 连接就会升级为 WebSocket 连接。这一过程包括:
      • 客户端发起一个 HTTP 请求,带有 Upgrade 头字段,向服务器请求从 HTTP 协议升级到 WebSocket 协议。
      • 服务器响应请求并发送一个 101 Switching Protocols 的状态码,表示协议升级成功。

    例如,客户端请求:

    GET /chat HTTP/1.1
    Host: example.com
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
    Sec-WebSocket-Version: 13
    

    服务器响应:

    HTTP/1.1 101 Switching Protocols
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Accept: x3JJHMbDL1EzLkh9WcR+Kk0M9L+Y=
    
  2. 数据传输

    • 一旦建立 WebSocket 连接,客户端和服务器可以通过 WebSocket 数据帧 交换数据。这些数据帧的传输是非常高效的,并且可以支持不同类型的消息:文本、二进制数据等。
  3. 连接关闭

    • 当通信结束时,任一方(客户端或服务器)可以发起连接关闭请求,关闭时发送一个 Close 数据帧,另一方确认后连接关闭。

数据帧格式

WebSocket 数据帧的结构相对简单,通常包括以下部分:

  1. FIN、RSV、OpCode:标识数据帧的类型和一些控制信息。
  2. 掩码标志(Mask):指示数据是否经过掩码处理(客户端发送的数据必须加掩码,服务器数据通常不需要掩码)。
  3. 负载长度(Payload Length):表示数据负载的长度。
  4. 掩码密钥(Mask Key):如果数据有掩码,则包括掩码密钥。
  5. 负载数据(Payload Data):实际的传输数据(如文本、二进制数据)。

使用场景

  1. 实时聊天应用:WebSocket 使得服务器能够即时向客户端推送消息,特别适合即时聊天应用。
  2. 在线游戏:实时互动和低延迟是 WebSocket 在在线游戏中的应用亮点。
  3. 股票、金融数据传输:WebSocket 适用于需要实时更新的数据流传输,如金融市场数据、股票价格更新等。
  4. 物联网(IoT)设备通信:WebSocket 可以用于物联网设备与云端服务器之间的实时通信,实时传输传感器数据或设备状态。
  5. 协作应用:在协作编辑应用中(例如 Google Docs),WebSocket 可以帮助多用户实时同步内容。

总结

HTTP 协议

  • 是一种 无状态单向 的协议,客户端通过请求与服务器进行交互,适用于请求-响应模型的通信,如浏览网页、下载文件等。
  • 每次请求都需要重新建立连接,并且包含一定的头部信息,造成了较高的延迟和开销。
  • 不适合需要 实时数据交换 的应用。

WebSocket 协议

  • 提供了 持久连接,支持 双向全双工 的通信,适用于实时性要求高、需要低延迟和高频繁数据交换的应用,如实时聊天、在线游戏、实时数据流(如股票行情、直播视频等)。
  • 一旦连接建立,客户端和服务器可以随时发送和接收数据,避免了频繁建立连接的开销,提高了通信效率。
特性HTTP 协议WebSocket 协议
协议类型无状态协议,基于请求-响应模型双向全双工协议,基于持久连接
连接模式每次通信都需要建立新的连接(无连接)一旦建立连接,通信会保持持续开放
通信方式客户端发起请求,服务器响应客户端和服务器都可以随时发送和接收数据
数据传输基于请求-响应,每次请求/响应时都需要传输头信息传输数据时不需要额外的头部信息,开销更小
传输效率相对较低,频繁建立和断开连接带来高开销高效,数据传输时无额外的连接建立和断开开销
连接生命周期每次请求响应后连接关闭,短暂连接保持打开状态,直到主动关闭
实时性请求和响应之间的延迟较高实时双向通信,适合实时应用(如在线聊天、游戏)
数据格式主要为文本/HTML,二进制数据需要转换支持文本(如 JSON)和二进制(如二进制流)
状态管理无状态,每次请求相互独立有状态,连接状态保持直到主动关闭
协议使用场景网页加载、文件传输、浏览器与服务器的通信实时通信应用,如即时消息、在线游戏、实时数据流
安全性可以通过 HTTPS 进行加密传输可以通过 WSS(WebSocket Secure)加密传输
头部信息每次请求都会有冗长的头部信息只有握手阶段需要头部信息,之后没有头部开销
协议设计基于请求-响应的客户端-服务器模型基于持久连接的双向通信模型
连接模式无连接:每个请求/响应都需要建立连接持久连接:连接建立后可以进行持续的双向通信

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

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

相关文章

IDEA集成DeepSeek

引言 随着数据量的爆炸式增长&#xff0c;传统搜索技术已无法满足用户对精准、高效搜索的需求。 DeepSeek作为新一代智能搜索技术&#xff0c;凭借其强大的语义理解与深度学习能力&#xff0c;正在改变搜索领域的游戏规则。 对于 Java 开发者而言&#xff0c;将 DeepSeek 集成…

从零开始部署DeepSeek:基于Ollama+Flask的本地化AI对话系统

从零开始部署DeepSeek&#xff1a;基于OllamaFlask的本地化AI对话系统 一、部署背景与工具选型 在AI大模型遍地开花的2025年&#xff0c;DeepSeek R1凭借其出色的推理能力和开源特性成为开发者首选。本文将以零基础视角&#xff0c;通过以下工具链实现本地化部署&#xff1a; …

图论入门算法:拓扑排序(C++)

上文中我们了解了图的遍历(DFS/BFS), 本节我们来学习拓扑排序. 在图论中, 拓扑排序(Topological Sorting)是对一个有向无环图(Directed Acyclic Graph, DAG)的所有顶点进行排序的一种算法, 使得如果存在一条从顶点 u 到顶点 v 的有向边 (u, v) , 那么在排序后的序列中, u 一定…

第1章大型互联网公司的基础架构——1.2 客户端连接机房的技术1:DNS

客户端启动时要做的第一件事情就是通过互联网与机房建立连接&#xff0c;然后用户才可以在客户端与后台服务器进行网络通信。目前在计算机网络中应用较为广泛的网络通信协议是TCP/IP&#xff0c;它的通信基础是IP地址&#xff0c;因为IP地址有如下两个主要功能。 标识设备&…

全面解析鸿蒙(HarmonyOS)开发:从入门到实战,构建万物互联新时代

文章目录 引言 一、鸿蒙操作系统概述二、鸿蒙开发环境搭建三、鸿蒙核心开发技术1. **ArkUI框架**2. **分布式能力开发**3. **原子化服务与元服务** 四、实战案例&#xff1a;构建分布式音乐播放器五、鸿蒙开发工具与调试技巧六、鸿蒙生态与未来展望结语 引言 随着万物互联时代…

Android:播放Rtsp视频流的两种方式

一.SurfaceView Mediaplayer XML中添加SurfaceView: <SurfaceViewandroid:id"id/surface_view"android:layout_width"match_parent"android:layout_height"match_parent"/> Activity代码&#xff1a; package com.android.rtsp;impor…

Next.js【详解】CSS 样式方案

全局样式 Global CSS 默认已创建&#xff0c;即 src\app\globals.css&#xff0c;可根据需要修改 默认在全局布局中导入 src\app\layout.tsx import "./globals.css";组件样式 CSS Modules 新建文件 src\app\test\styles.module.css .red {color: red;}导入目标页面…

LVS相关原理

一、LVS集群的体系结构 1.1 LVS简介 LVS 是 Linux Virtual Server 的简称&#xff0c;也就是 Linux 虚拟服务器 , 是一个由章文嵩博士发起的自由软件项目&#xff0c;它的官方站点是 www.linuxvirtualserver.org 。现在 LVS 已经是 Linux标准内核的一部分&#xff0c;在Linux2…

【2025深度学习系列专栏大纲:深入探索与实践深度学习】

第一部分:深度学习基础篇 第1章:深度学习概览 1.1 深度学习的历史背景与发展轨迹 1.2 深度学习与机器学习、传统人工智能的区别与联系 1.3 深度学习的核心组件与概念解析 神经网络基础 激活函数的作用与类型 损失函数与优化算法的选择 1.4 深度学习框架简介与选择建议 第2…

Java与C语言中取模运算符%的区别对比

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: Java 文章目录 &#x1f4af;前言&#x1f4af;C语言中的取模运算符 %基本行为示例 注意事项示例&#xff1a;负数取模 &#x1f4af;Java中的取模运算符 %基本行为示例 对浮点数的支持示例&#xff1a;浮点数取模 符…

OpenCV机器学习(4)k-近邻算法(k-Nearest Neighbors, KNN)cv::ml::KNearest类

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::ml::KNearest 是 OpenCV 机器学习模块中的一部分&#xff0c;它提供了实现 k-近邻算法&#xff08;k-Nearest Neighbors, KNN&#xff09;的…

过于依赖chatgpt编程会有哪些弊端?

过于依赖ChatGPT编程可能会带来以下问题&#xff1a; 1. 基础不扎实&#xff0c;容易“变菜” 以前遇到代码还会琢磨哪里不懂、怎么改&#xff0c;现在直接复制粘贴&#xff0c;时间长了可能连基本的语法和逻辑都搞不清楚。就像考试总抄答案&#xff0c;真让你自己写的时候脑子…

红队视角出发的k8s敏感信息收集——Kubernetes API 扩展与未授权访问

针对 Kubernetes 第三方组件与 Operator 的详细攻击视角分析&#xff0c;涵盖 Service Mesh、Helm Releases 和 Database Operators 的潜在风险及利用方法。 攻击链示例 1. 攻击者通过未授权的 Tiller 服务部署恶意 Helm Chart → 2. 创建后门 Pod 并横向移动至 Istio 控制平…

3D与2D机器视觉机械臂引导的区别

3D与2D机器视觉在机械臂引导中的主要区别如下&#xff1a; 数据维度 2D视觉&#xff1a;仅处理平面图像&#xff0c;提供X、Y坐标信息&#xff0c;无法获取深度&#xff08;Z轴&#xff09;数据。 3D视觉&#xff1a;处理三维空间数据&#xff0c;提供X、Y、Z坐标及物体的姿态…

日常开发中,使用JSON.stringify来实现深拷贝的坑

使用JSON.stringify的方式来实现深拷贝的弊端 弊端一&#xff1a;无法拷贝NaN、Infinity、undefined这类值 无法拷贝成功的原因&#xff1a; 对于JSON来说&#xff0c;它支持的数据类型只有null、string、number、boolean、Object、Array&#xff0c;所以对于它不支持的数据类…

AI大模型(如GPT、BERT等)可以通过自然语言处理(NLP)和机器学习技术,显著提升测试效率

在软件测试中,AI大模型(如GPT、BERT等)可以通过自然语言处理(NLP)和机器学习技术,显著提升测试效率。以下是几个具体的应用场景及对应的代码实现示例: 1. 自动生成测试用例 AI大模型可以根据需求文档或用户故事自动生成测试用例。 代码示例(使用 OpenAI GPT API): …

【Linux】Ubuntu Linux 系统——Node.js 开发环境

ℹ️大家好&#xff0c;我是练小杰&#xff0c;今天星期五了&#xff0c;同时也是2025年的情人节&#xff0c;今晚又是一个人的举个爪子&#xff01;&#xff01; &#x1f642; 本文是有关Linux 操作系统中 Node.js 开发环境基础知识&#xff0c;后续我将添加更多相关知识噢&a…

Dockerfile 编写推荐

一、导读 本文主要介绍在编写 docker 镜像的时候一些需要注意的事项和推荐的做法。 虽然 Dockerfile 简化了镜像构建的过程&#xff0c;并且把这个过程可以进行版本控制&#xff0c;但是不正当的 Dockerfile 使用也会导致很多问题。 docker 镜像太大。如果你经常使用镜像或者…

mysql 学习16 视图,存储过程,存储函数,触发器

视图&#xff0c; 存储过程&#xff0c; 存储函数 触发器

SpringBoot+Vue+数据可视化的动漫妆造服务平台(程序+论文+讲解+安装+调试+售后等)

感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望帮助更多的人。 系统介绍 在当今数字化高速发展的时代&#xff0c;动漫产业迎来了前所未有的繁荣&#xff0c;动漫…