HTTP Websocket 服务器推送消息

这篇博客探讨了HTTP协议的特点,包括无状态、基于TCP的连接、长连接和短连接,以及单向请求。重点讲解了传统服务器推送技术如短轮询和长轮询的优缺点,并介绍了WebSocket作为新型推送技术的优势,如实时性强、减少控制开销和无同源限制。此外,还提到了SSE Server-Sent Events作为另一种服务器推送技术。
摘要由CSDN通过智能技术生成

短轮询 长轮询 Websocket Server-Sent Events
通信协议 http http 握手:http --> websocket http
触发方式 Js Ajax Js Ajax 事件 事件
优点 兼容性好容错性强,实现简单 比短轮询节约资源 全双工通讯协议,性能开销小、安全性高,有一定可扩展性 实现简便,开发成本低
缺点 页面会出现‘假死’, 不必要的网络传输 保持连接会消耗资源,服务器没有返回有效数据,程序超时 传输数据需要进行二次解析,增加开发成本及难度 只适用高级浏览器
适用范围 B/S服务 B/S服务 实时性高的应用 服务器向客户端推送

HTTP

  • HTTPHyperText Transfer Protocol)超文本传输协议,是一种用于分布式、协作式和超媒体信息系统的应用层协议.
  • HTTP 是一个简单的请求-响应协议,是客户端和服务端之间请求和应答的标准,它通常运行在 TCP(传输控制协议)之上,由统一资源标识符(Uniform Resource Identifiers,URI 包含 URL 和 URN )来标识。
    在这里插入图片描述
HTTP请求过程
  1. URL匹配和DNS解析
  2. 建立TCP连接:三次握手
  3. 发送请求
  • 请求报文分为请求行、请求头、空行和请求体,
  • 服务端通过请求行和请求头中的内容获取客户端的信息,
  • 通过请求体中的内容获取客户端传过来的数据
  1. 响应应答
  • 响应报文由状态行、响应头、空行和响应体组成,
  • 服务端通过状态行和响应头告诉客户端请求的状态和如何对数据处理等信息,
  • 真正的数据则在响应体中传输给客户端。
  1. 断开TCP连接:四次挥手
1. 无状态
  • HTTP请求是无状态的,即没有记忆功能,不能获取之前请求或响应的内容。
  • 起初这种简单的模式,能够加快处理速度,保证协议的稳定,
  • 但是随着应用的发展,这种无状态的模式会使我们的业务实现变得麻烦,
  • 比如说需要保存用户的登录状态,就得专门使用数据库来实现。
  • 于是乎,为了实现状态的保持,引入了Cookie技术来管理状态。
  1. Cookie
  • Server生成,Client/brower存储
  • Client再次请求Server,携带Cookie,Server检查cookie辨识用户
  • Cookie就是服务器给用户颁布的一个状态值,并且保存在客户端或浏览器。只要在cookie的有效期内,用户再次访问该服务器时,浏览器会检查本地的cookies,并且会自动将cookie加在请求头部中一起发送给服务器,服务器通过识别该cookie来辨别用户身份,并且将用户在服务器中的资源提供给用户
  1. Session
  • Server生成,Server存储
  • 保存用户的状态信息,标示并跟踪用户

  1. Session、Cookie关系
  • cookie 是一个实际存在的、具体的东西,http 协议中定义在 header 中的字段。
  • session 是一个抽象概念、开发者为了实现中断和继续等操作,将client和server之间一对一的交互,抽象为“会话”,进而衍生出“会话状态”,也就是 session 的概念。
  • 即session描述的是一种通讯会话机制,而cookie只是目前实现这种机制的主流方案里面的一个参与者,它一般是用于保存session ID
  • 只能客户端向服务器端发起请求
1. 请求头

Accept:告诉服务器当前浏览器能接受和处理的介质类型,*/*表示可接受所有类型。
Accept-Encoding:告诉服务器当前浏览器支持的内容编码。
Accept-Language:告诉服务器当前浏览器能接受和处理的语言。上述请求中的zh-CN,zh;q=0.8表示用户对zh-CN的喜好程度为80%。
Connection:keep-alive,告诉服务器在完成本次请求的响应后,保持该TCP连接不释放,等待本次连接的后续请求。这样可以减少打开关闭TCP连接的次数提升处理性能。另外的可选项是Close,表明直接响应接受完成后直接将其关闭。
Content-Length:用于描述HTTP消息实体的传输长度。
Content-Type:内容类型,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件。


Cookie:表示服务器端为本次访问分配了一个Session ID,每次发送请求时都会主动将该Session ID通过Cookie字段又发送回服务器,用于验证身份和保持状态。
Host:描述请求将被发送的目的地,在任何类型的请求中都会包含此信息。
Origin:用来说明请求从哪里发起的。
Referer:指定发起该请求的源地址。根据该值服务器可以追踪到来访者的基本信息。比如我们在百度首页搜索博客园关键字,并从搜索结果中访问,那么博客园网站服务器就可以根据Referer值追踪到来访者地址为:https://www.baidu.com/link?url…7c64da001b54df0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值