《图解HTTP》读书笔记(五)——HTTP追加协议和Web攻击

前言

       本文是本系列的第五篇,也是最后一篇,主要记录了HTTP追加协议和Web攻击的相关知识,如果有错误烦请大家指出。

HTTP追加协议

1.基于HTTP的协议
       当前的Web应用网站所追求的功能可通过Web应用和脚本程序实现,即使这些功能已经满足需求,在性能上却未必最优。这是因为HTTP协议上的限制以及自身性能有限。HTTP功能上的不足可以通过创建一套全新的协议来弥补,可是目前基于HTTP的Web浏览器的使用环境已经遍布全球,因此无法完全抛弃HTTP。但有一些新协议的规则是基于HTTP的,并在此基础上添加了新功能。
2.消除HTTP瓶颈的SPDY
       在像FaceBook这种SNS(Social Network Service,社交网络服务)网站上,实时观察用户发的新内容,当用户量非常大时,在很短时间能就会发生大量的内容更新。为了尽可能实时地显示这些内容,服务器上一有更新就需要直接把那些内容反馈到客户端界面上。HTTP无法妥善的处理好这项任务,完成这项任务HTTP标准具有以下瓶颈:

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

《图解HTTP》读书笔记(五)——HTTP追加协议和Web攻击_第1张图片

       Ajax的出现给出了一种解决方法,Ajax(Asynchronous Javascript and XML,异步Javascript和XML技术)是一种利用Javascript和DOM的操作,以达到局部Web页面替换加载的异步通信手段。和以前的同步通信相比,由于它只更新一部分页面,优点显而易见。
《图解HTTP》读书笔记(五)——HTTP追加协议和Web攻击_第2张图片
       使用Ajax可以实时地从服务器获取内容,也就是我们熟悉的轮询的方式,这有可能会导致大量无效请求产生。另外,这也没有解决HTTP协议本身存在的问题。
       后来,针对Ajax轮询会产生大量的无效请求,又出现了Comet的解决方法,也就是所谓的长轮询。这是一种通过延迟应答,模拟实现服务器端向客户端推送的功能。
《图解HTTP》读书笔记(五)——HTTP追加协议和Web攻击_第3张图片
       我们知道,通常情况下服务端在收到请求,在处理完毕后会立即返回响应,但为了实现推送功能,Comet会先将响应挂起,当服务端有内容更新时,再返回该响应。因此服务端一旦有更新,就可以立即反馈给客户端。这样做内容上虽然可以做到实时更新,但为了保留相应,一次连接的持续时间也变长了,为了维持连接也会消耗很多资源。而且,这种方式同样未解决HTTP协议本身的问题。
       轮询和长轮询一定程度上使HTTP得到了改善,但对HTTP协议本身的限制仍束手无策。为了进行根本性的改善,需要进行一些协议层面上的改动。Google退出的SPDY协议正是为了从协议级别消除HTTP遭遇的瓶颈。
       SPDY没有完全改写HTTP协议,而是在TCP/IP的应用层和传输层之间通过新加会话层的形式运作,会话层可以控制数据的流动,但还是采用HTTP建立通信连接,因此在用户层面,使用上是没有区别的。
《图解HTTP》读书笔记(五)——HTTP追加协议和Web攻击_第4张图片
       使用SPDY后,HTTP协议获得了额外的功能:

  • 多路复用流
           通过一个TCP连接,可以无限制的处理多个HTTP请求,使得TCP的处理效率得到提高。
  • 赋予请求优先级
           SPDY不仅可以无限制的并发处理请求,还可以给请求分配优先级顺序,这样主要是为了在发送多个请求时,解决因带宽低而导致响应变慢的问题。
  • 压缩HTTP首部
           压缩HTTP请求和响应的首部,这样一来通信产生的数据报数量和发送的字节数就更少了。
  • 推送服务
           支持服务器主动向客户端推送数据的功能,这样,服务器可直接发送数据而不必等待客户端的请求。
  • 服务器提示功能
           服务器可以主动提示客户端请求所需的资源,由于在客户端发现资源之前就可以获知资源的存在,因此在资源已缓存的情况下,可以避免发送不必要的请求。

       在使用SPDY时,Web浏览器及Web服务器都要为对应SPDY做出一定程度上的改动。但SPDY基本上只是将单个域名(IP地址)的通信多路复用,多以当一个Web网站上使用多个域名下的资源时,改善效果就会受到限制。
       由此可见,SPDY确实是一种可有效消除HTTP瓶颈的技术,但很多Web网站存在的问题并非仅仅由HTTP瓶颈所导致的。对Web本身的速度提升,还应该从其他可细致钻研的地方入手。
3.使用浏览器进行全双工通信的WebSocket
       使用上文已经提到轮询和长轮询的方式进行通信可以提升Web的浏览速度。但问题在于,通信若是使用HTTP协议,就无法彻底解决瓶颈问题,WebSocket正是为解决这些问题而实现的一套新协议及API。
       WebSocket,即Web浏览器与Web服务器之间全双工通信标准。一旦Web服务器与客户端之间建立起WebSocket协议的通信连接,之后所有的通信都依靠这个专用协议进行。由于WebSocket是建立在HTTP基础上的协议,因此连接的发起方仍是客户端,而一旦确认WebSocket通信连接,不论服务器还是客户端,任一方都可直接向对方发送报文。

  • 推送功能
           支持由服务器向客户端推送数据的推送功能,这样服务器可直接发送数据,不用等待客户端的请求。
  • 减少通信量
           只要建立起WebSocket连接,就希望一直保持连接状态,和HTTP相比,不但每次连接时的总开销减少,而且由于WebSocket的首部信息很小,通信量也减少了。

       为了使用WebSocket通信,在HTTP连接建立之后,需要完成一次“握手”的步骤。这需要用到HTTP的Upgrade首部字段,告知服务器通信协议发生改变,已达到握手的目的。服务器对于握手请求,返回状态码101 Switching Protocols的响应,成功建立起WebSocket连接之后,通信时不再使用HTTP的数据帧,而采用WebSocket独立的数据帧。
《图解HTTP》读书笔记(五)——HTTP追加协议和Web攻击_第5张图片
4.期盼已久的HTTP/2.0
       HTTP/2.0的目标是改善用户在使用Web时的速度体验,主要有以下记种基础协议。

  • SPDY
  • HTTP Speed + Mobility
           由微软起草,用于改善并提高移动端通信时的通信速度和性能的标准,它建立在SPDY和WebSocket基础上。
  • Network-Friendly HTTP Upgrade
           主要是在移动端通信时改善HTTP性能的标准。

       HTTP/2.0围绕着如下7项主要的技术进行讨论。

技术 协议
压缩 SPDY、Friendly
多路复用 SPDY
TSL义务化 Speed+Mobility
协商 Spedd+Mobility、Friend
客户端拉拽/服务端推送 Speed+Mobility
流量控制 SPDY
WebSocket Speed+Mobility

注:HTTP Speed + Mobility简写为Speed+Mobility,NetWork-Friendly HTTP Upgrade简写为Friendly。

       由于本书出版日期较早,截止到现在(2019/5/4)HTTP/2.0早已标准化,所以本小节仅供参考。

Web攻击

1.针对Web的攻击技术
       HTTP协议本身并不存在安全问题,因为协议本身几乎不会成为攻击的对象。应用HTTP协议的服务器和客户端,以及运行在服务器上的Web应用等资源才是攻击目标。
       目前,来自互联网的攻击大多是冲着Web站点来的。从整体上看,HTTP就是一个通用的单纯协议机制,因此安全性是其劣势。开发者需要自行设计并开发认证及session管理功能来满足Web应用的安全要求,而自行设计就意味着会出现各种形形色色的实现,结果就是安全并不完善,仍在运作的Web应用背后隐藏着各种容易被攻击者滥用的安全漏洞。
       针对Web应用的攻击模式主要有两种:

  • 主动攻击:以SQL注入和OS命令注入为代表的,攻击者直接通过访问Web应用,把攻击代码传入的攻击模式。
  • 被动攻击:以XSS和CSRF为代表的,利用圈套策略执行攻击代码的攻击模式。

2.因输出值转义不完全引发的安全漏洞
       无论是客户端还是服务端,将对方的发送的数据进行转义处理能避免一些安全漏洞的产生。多数情况下采用JavaScript在客户端验证数据,可是在客户端允许篡改数据或关闭JavaScript,不适合将JavaScript验证作为安全的防范的唯一对策。所以在服务端要把一切输入值当做可能产生攻击性意义的代码,任何输入值都需要经过检查,判断其是否是符合业务逻辑的数值以及检查字符编码等预防对策。

  • 跨站脚本攻击(Cross-Site Scripting, XSS)

       这是一个典型的例子,它是指通过存在安全漏洞的Web网站用户的浏览器内运行非法的HTML标签或JavaScript脚本进行的一种攻击,核心思想就是在可能的地方通过

你可能感兴趣的:(前端技术)