《图解http》第八、九章
第八章 确认访问用户身份的认证
1.http使用的认证方式
basic认证:basic认证采用base64编码,但不是加密处理。安全性低。
digest认证:使用质询/相应的方式,但不会像basic认证那样直接发送明文密码。
所谓质询响应方式是指,一开始一方会先发送认证要求给另一方,接着使用从另一方那接收到的质询码计算生成响应码。最后将响应码返回给对方进行认证的方式。
因为发送给对方的只是响应摘要及由质询码产生的计算结果,所以比起BASIC认证,密码泄露的可能性就降低了。
客户端——1.发送临时的质询码(随机数,nonce)以及告知需要认证的状态码401——2.发送摘要以及由质询码计算出的响应码(response)——3.认证成功返回状态码200,失败则再次发送状态码401
ssl客户端认证:
多数情况下,ssl客户端认证不会仅依靠证书完成认证,一般会和基于表单认证(稍后讲解)组合形成一种双因素认证(Two-factorauthentication)来使用。
。所谓双因素认证就是指,认证过程中不仅需要密码这一个因素,还需要申请认证者提供其他持有信息,从而作为另一个因素,与其组合使用的认证方式。
基于表单认证:
基于表单认证本身是通过服务器端的Web应用,将客户端发送过来的用户ID和密码与之前登录过的信息做匹配来进行认证的。
YD)JHMZW8CRB`OLEZ9%ABIV.png
步骤1:
客户端把用户ID
和密码等登录信息放入报文的实体部分,通常是以POST方法把请求发送给服务器。而这时,会使用HTTPS通信来进行HTML表单画面的显示和用户输入数据的发送。
步骤2:
服务器会发放用以识别用户的Session ID。通过验证从客户端发送过来的登录信息进行身份认证,然后把用户的认证状态Session ID绑定后记录在服务器端。
向客户端返回响应时,会在首部字段Set-Cookie内写入SessionID。
步骤3:
客户端接收到从服务器端发来的Session ID后,会将其作为Cookie保存在本地。下次向服务器发送请求时,浏览器会自动发Cookie
,所以Session ID也随之发送到服务器。服务器端可通过验证接收到的Session ID识别用户和其认证状态。
第九章基于http功能追加协议
1.Google在2010年发布了SPDY(取自SPeeDY,发音同speedy),其开发目标只在解决http的性能瓶颈,缩短web页面的加载时间(50%)。
2.ajax是一种有效利用JavaScript和dom(document object model文档对象模型)的操作,以达到局部web页面替换加载的异步通信手段。
而利用Ajax实时地从服务器获取内容,有可能会导致大量请求产生。另外,Ajax仍未解决HTTP协议本身存在的问题。
comet的解决方法
一旦服务器端有内容更新了,Comet不会让请求等待,而是直接给客户端返回响应。这是一种通过延迟应答,模拟实现服务器端向客户端推送(Server Push)的功能。
通常,服务器端接收到请求,在处理完毕后就会立即返回响应,但为了实现推送功能,Comet会先将响应置于挂起状态,当服务器端有内容更新时,再返回该响应。因此,服务器端一旦有更新,就可以立即反馈给客户端。
内容上虽然可以做到实时更新,但为了保留响应,一次连接的持续时间也变长了。期间,为了维持连接会消耗更多的资源。另外,Comet也仍未解决HTTP协议本身存在的问题。
3.spdy的设计与功能
SPDY没有完全改写HTTP协议,而是在TCP/IP的应用层与运输层之SPDY间通过新加会话层的形式运作。同时,考虑到安全性问题,规定通信中使用SSL。
使用spdy后,http协议额外获得以下功能。
多路复用流:
通过单一tcp连接,可以无限制处理多个http
请求。
赋予请求优先级:
SPDY不仅可以无限制地并发处理请求,还可以给请求逐个分配优先级顺序。这样主要是为了在发送多个请求时,解决因带宽低而导致响应变慢的问题。
压缩http首部:
压缩HTTP请求和响应的首部。这样一来,通信产生的数据包数量和发送的字节数就更少了。
推送功能:
支持服务器主动向客户端推送数据的功能。这样,服务器可直接发送数据,而不必等待客户端的请求。
服务器提示功能:
服务器可以主动提示客户端请求所需的资源。由于在客户端发现资源之前就可以获知资源的存在,因此在资源已缓存等情况下,可以避免发送不必要的请求。
4.websocket协议
一旦Web服务器与客户端之间建立起WebSocket协议的通信连接,之后所有的通信都依靠这个专用协议进行。通信过程中可互相发送JSON、XML、HTML或图片等任意格式的数据。
websocket协议主要特点:
推送功能
支持由服务器向客户端推送数据的推送功能。这样,服务器可直接发送数据,而不必等待客户端的请求。
减少通信量:
只要建立起WebSocket连接,就希望一直保持连接状态。和HTTP相比,不但每次连接时的总开销减少,而且由于WebSocket的首部信息很小,通信量也相应减少了。
![ZAR}]APRKJZNN{JXZ00YS$4.png](https://img.haomeiwen.com/i9284422/4e5f3bcc1a484314.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)