【前端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);
};



相关文章
|
20天前
|
前端开发 JavaScript 安全
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第27天】本文介绍了HTTP/2和HTTPS在前端性能调优中的应用。通过多路复用、服务器推送和头部压缩等特性,HTTP/2显著提升了Web性能。同时,HTTPS确保了数据传输的安全性。文章提供了示例代码,展示了如何使用Node.js创建一个HTTP/2服务器。
35 3
|
8天前
|
算法 网络协议 安全
HTTP/2 协议的缺点是什么?
HTTP/2 协议的缺点是什么?
|
8天前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
38 3
|
19天前
|
网络协议 安全 Go
Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
【10月更文挑战第28天】Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
46 13
|
12天前
|
传感器 缓存 网络协议
CoAP 协议与 HTTP 协议的区别
CoAP(Constrained Application Protocol)协议是为资源受限的设备设计的轻量级协议,适用于物联网场景。相比HTTP,CoAP具有低功耗、低带宽占用和简单易实现的特点,支持多播通信和无连接的交互模式。
|
17天前
|
监控 前端开发 JavaScript
探索微前端架构:构建可扩展的现代Web应用
【10月更文挑战第29天】本文探讨了微前端架构的核心概念、优势及实施策略,通过将大型前端应用拆分为多个独立的微应用,提高开发效率、增强可维护性,并支持灵活的技术选型。实际案例包括Spotify和Zalando的成功应用。
|
17天前
|
开发者
HTTP 协议请求方法的发展历程
【10月更文挑战第21天】
|
17天前
|
安全
HTTP 协议的请求方法
【10月更文挑战第21天】
|
17天前
|
缓存 安全 前端开发
HTTP 协议的请求方法在实际应用中有哪些注意事项?
【10月更文挑战第29天】HTTP协议的请求方法在实际应用中需要根据具体的业务场景和需求,合理选择和使用,并注意各种方法的特点和限制,以确保网络通信的安全、高效和数据的一致性。
|
19天前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
下一篇
无影云桌面