当前位置: 首页 > news >正文

通信协议(Http,websocket)

http协议详情

  • http是超文本传输协议,浏览器和web服务器之间交互的通信协议,它是基于Tcp之上的应用层协议(osi七层)。
  1. 特点:
  • 基于请求响应,服务端不能主动给客户端推送消息。
  • 无状态无连接,不能做会话保持。协议本身不保存客户端的会话信息,每次请求都是独立的 “一次性交互”。
  • 基于tcp之上的应用层协议--->osi七层。
  • 明文传输,数据在网络中以 “明文” 形式传输,请求和响应的内容(包括账号、密码等敏感信息)可被中间设备捕获并读取,存在严重安全风险。这一问题通过HTTPS 协议(HTTP+SSL/TLS 加密)解决。
  1. 协议版本:
  • 0.9:HTTP协议的最初版本,功能简陋,仅支持请求方式GET,并且仅能请求访问HTML格式的资源
  • 1.0:1.0版本的工作方式是每次TCP连接只能发送一个请求(默认短链接),当服务器响应后就会关闭这次连接,下一个请求需要再次建立TCP连接,就是不支持keep-alive,还有其他请求方式
  • 1.1:(正在用)引入了持久连接(persistent connection),即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive。客户端和服务器发现对方一段时间没有活动,就可以主动关闭连接。
  • 2.0:多路复用:对于 HTTP/1.x,即使开启了长连接,请求的发送也是串行发送的,在带宽足够的情况下,对带宽的利用率不够,HTTP/2.0 采用了多路复用的方式,可以并行发送多个请求,提高对带宽的利用率
  • 3.0:HTTP3.0又称为HTTP Over QUIC,其弃用TCP协议,改为使用基于UDP协议的QUIC协议来实现
  1. 详情:
  • 请求协议:
    请求首行:请求方式(get,post,delete),请求地址,请求http协议版本号/r/n
    请求头: key:value (cookie,useragent,referer,x-forword-for)
    请求体:提交数据携带的内容,编码方式
  • 响应协议:
    响应首行:http协议版本,响应状态码(1xx,2xx),响应单词描述
    响应头:key:value (cookie,响应编码...) 跨域问题的响应头(自己设置的响应头)
    响应体:html格式:浏览器中看到的 json格式给客户端使用

GET请求和POST请求的区别

  • post更安全(携带的数据[请求参数]不会作为url的一部分,放在请求体中)
  • post发送的数据更大(get有url长度限制)
  • post能发送更多的数据类型(get只能发送ASCII字符)
  • post用于修改和写入数据,get一般用于搜索排序和筛选之类的操作

websocket协议

websocket:一种通信协议,区别于http协议,可在单个TCP连接上进行全双工通信。允许服务端主动向客户端推送数据。浏览器和服务器只需要完成一次tcp连接,两者之间就可以建立持久性的连接,并进行双向数据传输。

没有跨域问题
  • websocket协议:基于tcp的应用层协议,跟语言无关,不同语言有具体实现,实现长链接,实现双工通信;客户端浏览器发起HTTP握手,告诉服务端进行WebSocket协议通讯,并告知WebSocket协议版本;服务端确认协议版本,升级为WebSocket协议。之后如果有数据需要推送,会主动推送给客户端
  • djanog中使用channles模块实现
  • flask中使用模块 websocket模块

为什么客户端和服务端通信不全用websocket?

  • 多次请求可能间隔时间比较长
  • 可能因某种原因断开,需要重新连接

WebSocket 的真正适用场景

  • 当场景明确需要 “实时双向数据交互” 时,WebSocket 才是最优选择,例如:
  1. 实时聊天(如微信网页版、企业 IM)
  2. 实时数据展示(如股票行情、监控大屏、直播弹幕)
  3. 双向协作工具(如在线文档共同编辑、白板协作)
  4. 游戏实时交互(如多人在线小游戏的位置同步、操作反馈)
http://www.jsqmd.com/news/20482/

相关文章:

  • 详细介绍:go语言学习记录9.23
  • npm install 时包库找不到报错解决 - 实践
  • MATLAB 仿真无线传感器网络(WSN)三大经典场景
  • P13382 解题报告
  • 免费搜索下载ICON图标的网站
  • 6ES7592-1BM00-0XA0 32路dq接线端子
  • 轻松掌握:用 Python 的 pdfminer 将 PDF 内容保存为 Word 文档 - 详解
  • 我最常用的快捷键
  • WPF多语言实现
  • 16 倍性能提升,成本降低 98%! 解读 SLS 向量索引架构升级改造
  • unity设置外置文件,运行读取文件获取地址
  • Microsoft Agent Framework/C#:了解Workflows的几种不同模式
  • CodeForces-374D Inna and Sequence
  • 字符串过长导致编译报错的问题及解决办法 - 详解
  • 厨房电秤方案:介绍一款电子秤芯片sic8632
  • CodeForces-1183F Topforces Strikes Back
  • Excel 实现下拉多选功能
  • CF981F Round Marriage
  • macOS直接使用pip安装报错
  • 2025 年最新螺旋地桩厂家推荐排行榜:聚焦光伏大棚等场景,甄选优质实力企业桩尖/大棚/组合/地螺丝螺旋地桩厂家推荐
  • CodeForces-1620D Exact Change
  • Python爬虫:获取某平台数据的下载链接 - 指南
  • 厨房电子秤芯片方案:SIC8632
  • 《借力JBoltAI框架,Java技术开发公司开启高效开发新范式》
  • Wireshark抓包教程:JSON和HTTPS抓取
  • 贡献法算法思维
  • 白鲸开源数据基建平台荣登“创客北京 2025”企业组TOP150,共同助 Agentic AI 行业变革
  • ORACLE检查并创建表空间和表分区
  • 让cherry studio访问使用Docket Desktop中的Docker Model Runner运行的模型
  • 禁用内核模块,是否需要执行脚本 $ sudo update-initramfs -u $ sudo update-grub ? - 详解