【前端3分钟】HTTP/1.x 协议瓶颈及其扩展之WebSocket

简介: 【前端3分钟】HTTP/1.x 协议瓶颈及其扩展之WebSocket

Session与Cookie状态管理中的加盐(salt)

一种安全的保存方法是,先利用给密码加盐的方式增加额外信息,再使用散列(hash)函数计算出散列值后保存。但是我们也经常看到直接保存明文密码的做法,而这样的做法具有导致密码泄露的风险。

注释;salt是由服务器随机生成的一个字符串,但是要保证长度足够长,并且是真正随机生成的。然后把它和密码字符串相连接(前后都行)生成散列值。当两个用户使用了同一个密码时,由于随机生成的salt值不同,对应的散列值也将不同。这样一来,很大程度上减少了密码特征,攻击者也就很难利用自己手中的密码特征库进行破解。

SPDY

SPDY旨在解决HTTP性能瓶颈,缩短Web页面的加载时间。

你可能会想到,为了能实时获取服务器上的内容更新,需要不断地请求服务器。但是HTTP无法妥善处理好这项工作。使用HTTP探知服务器上是否有内容更新,就必须频繁地从客户端到服务端进行确认。如果服务器上没有内容更新,那么就会产生徒劳的通信。

这样的需求使得使用HTTP成为一种瓶颈,会存在如下问题:

  • 一条连接上只可发生一个请求;
  • 请求只能从客户端开始且客户端不可以接收除了响应以外的指令。
  • 请求/响应首部有时未经压缩就发送,如果首部信息越多,延迟就会越大。
  • 每次要发送相同的、冗长的首部,会造成浪费较多;
  • 非强制压缩的情况下,可任意选择数据压缩格式。

当然,也有相应的办法,如Ajax(核心技术是XMLHTTPRequest的API)。由于AJAX只更新一页面的一部分,所以响应中传输的数据量会因此减少。但是,这也会带来一些问题,即它可能会导致大量请求的产生。除此之外,Ajax仍未解决HTTP协议本身存在的问题,即Ajax每次请求时,都会与服务端互相发送相同的首部,有时服务端在响应时,对数据不压缩就直接发送了。

接着往下看解决方法的寻找。

Comet解决方法

Comet是一种通过延迟应答,模拟实现服务器端向客户端推送的功能。一旦服务端有更新,Comet不会让请求等待,而是直接给客户端返回响应。

Comet是如何实现推送功能的呢?通常,Comet会将服务端的响应置于挂起状态,当服务端有更新时,再返回响应。这样做虽然能做到实时更新,但是为了保留响应,一次连接的持续时间也会变长。而Comet并没有解决这个问题。

SPDY

要做根本性的改变,处理HTTP的瓶颈,必须改写HTTP协议。但是SPDY并没有完全改写HTTP,而是在TCP/IP的应用层与运输层之间加入会话层,并使用SSL进行通信,而连接上还是采用HTTP。

SPDY以会话层的形式加入,是为了控制数据的流动。通过使用SPDY,它能让单一的TCP处理无限制的多个HTTP请求,还可以给请求逐个分配优先级顺序,并且压缩HTTP请求和响应的首部。另外,就是支持服务端向客户端的推送功能。

但是,很多Web网站存在的问题并非仅仅是由HTTP瓶颈造成的,对Web本身的速度提升,还应该从其他细致的地方入手,例如改善Web内容的编写方式。

WebSocket

Ajax和SPED虽然能提升HTTP的通信速度,但是却无法完全地解决HTTP的瓶颈问题。

WebSocket的出现正式为了这些问题而生的。WebSocket协议是Web浏览器与服务器之间全双工通信标准,其主要为了解决Ajax和Comet里XMLHttpRequest附带的缺陷所引起的问题。

一旦Web 服务器与客户端之间建立起WebSocket协议的通信连接,之后所有的通信都依靠这个专用协议进行。通信过程中可相互发送JSON、XML、HTML或图片等任意格式的数据。

由于是建立在HTTP基础上的协议,因此连接的发起方仍是客户端,而一旦确定WebSocket通信连接,不论服务器还是客户端,任意一方都可直接向对方发送报文。

  • 推送:服务端向客户端推送,不必等待客户端请求。
  • 减少通信量:因为一旦建立起WebSocket连接,就希望保持连接。所以,每次连接时总开销减少,并且WebSocket的首部信息很小,所以通信量随之减少。
  • 握手·请求:为了实现WebSocket通信,需要用到HTTP的Upgrade首部字段,告知服务器通信协议发生改变,以达到握手目的。(Upgrade:websocket
  • 握手·响应:对于改变通信协议的请求,服务端会返回状态码101 Switching Protocols 的响应。
    (HTTP/1.1 101 Switching Protoclos)

Websocket API

javascript可调用有W3C制定的The WebSocket Api内提供的WebSocket程序接口,实现WebSocket协议的全双工通信。例如:每30ms发生一次数据

let socket = new WebSocket('ws://www.abc.com/updates');
socket.open = function() {
   setInterval(function(){
      if(socket.bufferedAmount==0)
         socket.send(getUpdateData());
   },30);
};



相关文章
|
2月前
|
数据采集 数据可视化 API
QUIC协议优化:HTTP/3环境下的超高速异步抓取方案
本文介绍了一种基于QUIC和HTTP/3的异步爬虫方案,用于抓取知乎热榜数据并生成趋势图。通过HTTPX与aioquic结合实现高性能连接复用,配合代理IP绕过反爬限制,提取标题、热度等信息。利用Python代码示例展示了异步抓取流程,并借助Matplotlib绘制话题热度变化图表。分析显示突发热点生命周期短,而深度话题热度更稳定。此方案可优化内容运营策略,快速捕捉潜在爆款话题。
QUIC协议优化:HTTP/3环境下的超高速异步抓取方案
|
1月前
HTTP协议探究:常用方法一网打尽
总的来说,HTTP协议的命令犹如一把钥匙,解锁了互联网世界的大门。它是规则,也是工具,了解了它,就等于掌握了互联网的一把通行证。我们每天都在用,也常常无视它,但是只有深刻理解了它,才能更好地运用它。如此,我们的互联网世界旅程就会变得更加顺畅,更加有趣。
54 14
|
2月前
|
安全 网络协议 Linux
Linux网络应用层协议展示:HTTP与HTTPS
此外,必须注意,从HTTP迁移到HTTPS是一项重要且必要的任务,因为这不仅关乎用户信息的安全,也有利于你的网站评级和粉丝的信心。在网络世界中,信息的安全就是一切,选择HTTPS,让您的网站更加安全,使您的用户满意,也使您感到满意。
86 18
|
2月前
|
网络安全 开发者
如何解决HTTPS协议在WordPress升级后对网站不兼容的问题
以上就是解决WordPress升级后HTTPS协议对网站的不兼容问题的方法。希望能把这个棘手的问题看成是学校的管理问题一样来应对,将复杂的技术问题变得更加有趣和形象,并寻觅出解决问题的方式。希望你的网站能在新的学期得到更好的发展!
76 19
|
3月前
|
XML JSON 网络协议
利用HTTP POST协议实现简单的RPC协议:WireShark抓包分析
通过这种方式,我们可以使用HTTP POST实现简单的RPC协议,并使用WireShark进行抓包分析。这不仅可以帮助我们理解RPC协议的工作原理,也可以帮助我们调试和优化我们的代码。
142 30
|
2月前
|
JSON 安全 网络协议
HTTP/HTTPS协议(请求响应模型、状态码)
本文简要介绍了HTTP与HTTPS协议的基础知识。HTTP是一种无状态的超文本传输协议,基于TCP/IP,常用80端口,通过请求-响应模型实现客户端与服务器间的通信;HTTPS为HTTP的安全版本,基于SSL/TLS加密技术,使用443端口,确保数据传输的安全性。文中还详细描述了HTTP请求方法(如GET、POST)、请求与响应头字段、状态码分类及意义,并对比了两者在请求-响应模型中的安全性差异。
248 20
|
2月前
|
安全 网络协议 算法
HTTP/HTTPS与SOCKS5协议在隧道代理中的兼容性设计解析
本文系统探讨了构建企业级双协议隧道代理系统的挑战与实现。首先对比HTTP/HTTPS和SOCKS5协议特性,分析其在工作模型、连接管理和加密方式上的差异。接着提出兼容性架构设计,包括双协议接入层与统一隧道内核,通过协议识别模块和分层设计实现高效转换。关键技术部分深入解析协议转换引擎、连接管理策略及加密传输方案,并从性能优化、安全增强到典型应用场景全面展开。最后指出未来发展趋势将更高效、安全与智能。
92 1
|
2月前
|
存储 数据库 Python
使用HTTP POST协议将本地压缩数据发送到服务器
总的来说,使用HTTP POST协议将本地压缩数据发送到服务器是一个涉及多个步骤的过程,包括创建压缩文件,设置HTTP客户端,发送POST请求,以及服务器端的处理。虽然这个过程可能看起来复杂,但一旦你理解了每个步骤,就会变得相对简单。
114 19
|
3月前
|
安全 网络安全 数据安全/隐私保护
HTTP 与 HTTPS 协议及 SSL 证书解析-http和https到底有什么区别?-优雅草卓伊凡
HTTP 与 HTTPS 协议及 SSL 证书解析-http和https到底有什么区别?-优雅草卓伊凡
192 3
|
Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
异步通信 对于BS(Browser-Server 浏览器)架构,很多情景下server的处理时间较长。 如果浏览器发送请求后,保持跟server的连接,等待server响应,那么一方面会对用户的体验有负面影响; 另一方面,很有可能会由于超时,提示用户服务请求失败。
823 0