美文网首页
面试-《图解HTTP》三

面试-《图解HTTP》三

作者: 329fd8af610c | 来源:发表于2019-05-12 16:05 被阅读0次

继上一篇总结HTTP知识点之后(https://www.jianshu.com/p/33edd42ebef9),这篇继续总结知识点。

1.HTTP缺点

上面两篇总结了HTTP的优点,但是HTTP还有一些不足,主要是
a.通信使用明文(不加密),内容有可能会被窃听
b.不验证通信方的身份,有可能遭遇伪装
c.无法证明报文的完整性,有可能报文内容被篡改

这些问题不仅在HTTP协议上出现,未加密的应用层协议中都会存在这类问题,还有很多缺点。

为了防止通信明文被窃听,采取两种方式加密:通信加密/内容加密
通信加密:HTTP协议中没有加密机制,但可以通过和SSL(Secure Socket Layer,安全套阶层)或TLS(Transport Layer Security,安全传输协议)组合使用,对HTTP通道进行加密。
内容加密:将参与通信的内容进行加密,这就需要客户端和服务端有相同的加解密方式。
为了防止不验证通信方身份而遭遇伪装,添加证书查明身份,SSL不仅提供加密处理,还能通过证书验证通信方身份。
为了验证报文是否被篡改,通常采取两种方式:一种是使用MD5和SHA-1等散列值校验的方法,第二种是使用确认文件的数字签名方法。

2.证书

  • 证书概念

证书由值得信任的第三方机构颁发,用以验证服务器和客户端身份真实性,一般通过通信方持有的证书即可确认通信方身份

3.HTTPS

  • HTTPS 是什么?

HTTP加上加密处理和认证以及完整性保护后即是HTTPS,HTTP+加密+认证+完整性保护=HTTPS。也可以理解为HTTPS是身披SSL外壳的HTTP,HTTPS并不是应用层的一种新协议,只是HTTP通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议代替而已,未加SSL时,HTTP协议直接跟TCP协议通信,加上SSL后。HTTP协议先跟SSL协议通信,SSL协议在跟TCP协议通信,SSL协议时独立于HTTP协议的一种安全网络协议,所有未加密的应用层协议都可以跟SSL协议组合使用,起到安全,加密,验证的作用。

4.HTTP使用的认证方式

HTTP使用的认证方式如下:

  • BASIC认证(基本认证)
  • DIGEST认证(摘要认证)
  • SSL客户端认证
  • FormBase认证(基于表单认证)
a.BASIC认证
  • BASIC认证概念

是从HTTP1.0开始就定义的认证方式,是Web服务器与通信客户端之间进行的验证的基本方式

  • BASIC认证过程

步骤一:当请求的资源需要BASIC认证时,服务器返回带有状态码401,带有WWW-Authenticate首部字段的响应报文,该首部字段内包含认证的方式(BASIC认证)以及Reuquest-URI安全域字符串(realm)
步骤二:接收到上述响应报文的客户端为了顺利通过BASIC认证,需要将
用户ID和密码以:形式连接后通过Base64编码,传回给服务器端
步骤三:接收到包含首部字段Authenticate请求的服务器,会对认证信息的正确性进行验证,如有验证通过,则返回一条包含Request-URI资源的响应


BASIC认证过程.png
  • BASIC认证缺点

BSAIC认证虽然采用了Base64编码方式,但是不是加密处理,外界不添加任何附加信息即可对其解码,所以传输信息被盗风险很高。除此一次BSAIC认证之后再想进行一次BASIC认证很困难,一般浏览器是无法实现注销操作的。最后是灵活性和安全等级都不够高

  • BASIC认证使用版本

从HTTP/1.0开始使用

b.DIGEST认证
  • DIGEST认证概念

一开始一方先发送认证要求给另一方,接着使用从另一方接收到的质询码计算生成响应码,最后将响应码返回给对方进行认证的方式

  • DIGEST认证过程

步骤一:当请求的资源需要BASIC认证时,服务器返回带有状态码401,带有WWW-Authenticate首部字段的响应报文,该首部字段内包含临时质询码(随机数)以及Reuquest-URI安全域字符串(realm)
步骤二:客户端接收到上述的响应报文之后,再次发送的首部字段中必须包含username,realm,nonce,uri和response的字段信息
步骤三:接收到上述请求报文的服务器,会确认认证信息的正确性,认证通过后则返回包含Request-URI资源的响应


DIGEST认证.png
  • DIGEST认证缺点

DIGEST认证虽然比BASIC认证的安全等级高,但是存在不能识别用户的缺点,同样跟BASIC认证一样,不灵活

  • DIGEST认证使用版本

从HTTP/1.1开始使用

c.SSL客户端认证
  • SSL客户端认证概念

借助由HTTPS的客户端证书完成认证的方式,凭借客户端证书,服务器则可确认对方身份

  • SSL客户端认证过程

为了使用客户端证书,事先将客户端证书分发给客户端,且客户端必须安装此证书
步骤一:接收到需要认证资源的请求,服务器会发送Certifiate Request 报文,要求客户端提供客户端证书
步骤二:用户可以选择发送客户端证书,客户端会把客户端证书以Client Certificate报文方式发送给服务器
步骤三:服务器验证客户端证书通过之后方可领取证书内客户端的公开密钥,然后开始HTTPS加密通信

  • SSL客户端认证采用双因素认证

SSL客户端认证不仅依靠证书完成认证,而且一般也会和基于表单认证组合形成一种双因素认证来使用,所谓的双因素认证,指的是认证过程中不仅需要密码这一因素,也需要提供申请者持有的其他信息,总的来说双因素认证中的第一个认证因素是用来认证客户端计算机,另一个认证因素是用来认证用户本人

  • SSL客户端认证缺点

虽然安全性很高,但是费用很高,分为两部分费用,一部分是从认证机构购买客户端证书需要一定的费用,另一部分是服务器运营者自己搭建认证机构能正常运营需要一定的费用

d.基于表单认证
  • 基于表单认证概念

客户端会向服务器上的Web应用程序发送登录信息(Credential),按登录信息的验证结果认证

  • 基于表单认证过程
    因为HTTP是无协议状态,所以使用Cookie管理Session,弥补HTTP协议中的无协议状态的缺点

步骤一:客户端把用户ID和密码等登录信息放入报文的实体部分,通常会以POST方法把请求发送给服务器,而这时,会使用HTTPS通信来进行HTML表单画面的显示和用户输入数据的发送
步骤二:服务器会发放以识别用户的SessionID,通过验证从客户端发送过来的登录信息进行身份认证,然后把用户的认证状态与SessionID绑定后记录在服务器端
步骤三:客户端接收到从服务器发送来的SessionID后,会将其作为Cookie保存到本地,下次再发送请求时,浏览器自动将Cookie发送,同时也将SessionID发送给服务器,服务器端可通过验证接收到的SessionID识别用户和其认证状态

5.HTTP追加功能

为了解决HTTP中有可能成为瓶颈问题,比如:1.一条链接上只可发送一个请求 2.请求只能从客户端开始,客户端不可以接受除响应以外的指令 3.请求/响应首部未经压缩就发送,首部信息越多延迟越大 4.发送冗长的首部,每次互相发送相同的首部造成的浪费较多 5.可任意选择数据压缩格式,非强制压缩发送等可采用一下解决方式

  • Ajax

Ajax(Asychronous JavaScript and XML 异步JavaScript与XML技术)是一种有效利用JavaScript和DOM的操作,以达到局部Web页面替换加载的异步通信手段,优点是由于只更新一部分页面,响应中传输的数据量会因此而减少,但是有时候也会导致大量请求产生


Ajax通信.png
  • Comet

一旦服务器有内容更新了,Comet不会让请求等待,而是直接给客户端返回响应,这是一种通过延迟应答,模拟实现服务器端向客户端推送的功能,优点是可以做到内容实时更新,但是缺点是一次连接的持续时间变成了,为了维持连接耗费了好多资源


Comet通信.png
  • SPDY

SPDY以会话层的形式加入,控制对数据的流动,但还是采用HTTP建立通信连接,因此,可照常使用HTTP的GET和POST方法Cookie 以及HTTP报文

  • WebSocket 协议概念

使用HTTP协议虽然有优点,但是还是有瓶颈,利用上述的Ajax和Comet技术虽然能解决瓶颈提高Web的浏览速度,但是从根本上来说HTTP还是存在瓶颈问题,而WebSocket网络技术正是针对HTTP瓶颈问题实现的一套新的协议以及API

  • WebSocket 协议主要特点

推送功能
WebSocket协议支持服务器端直接向客户端推送数据,而不必等客户端的请求。而HTTP协议的瓶颈问题之一就是:请求只能从客户端开始,客户端不可以接受除响应以外的指令,服务器端在没有请求的前提下不能向客户端发送任何数据
减少通信量
WebSocket协议是只要建立起WebSocket协议之后,就希望一直保持通信状态,WebSocket的首部信息很小,通信量自然减少了。而HTTP协议的瓶颈问题就是:1.一条链接上只可发送一个请求 2.请求/响应首部未经压缩就发送,首部信息越多延迟越大 3.发送冗长的首部,每次互相发送相同的首部造成的浪费较多

  • WebSocket 协议实现通信

为了实现WebSocket通信,在HTTP建立连接以后,需要完成一次握手的操作
握手请求:为了实现WebSocket通信,需要用到HTTP的Upgrade的首部字段,告知服务器通信协议发生改变,以达到握手的目的


握手请求

握手响应:对于之前的请求,返回状态码101的响应


握手响应
成功握手确立WebSocket连接之后,通信时不再使用HTTP的数据帧,而是使用WebSocket独立的数据帧

以上的知识点先整理到这里吧,实际使用时会有更大的体会与理解再更新,如有错误,不吝赐教

相关文章

网友评论

      本文标题:面试-《图解HTTP》三

      本文链接:https://www.haomeiwen.com/subject/bxiunqtx.html