图解HTTP-9-10

9 基于HTTP的功能追加协议

SPDY的涉及与功能
SPDY设计

SPDY是Google在2010年发布的取自SPeeDY,发音同speedy,开发目标旨在解决HTTP的新能瓶颈,缩短Web页面的家在时间(50%)

HTTP 应用层
SPDY 会话层
SSL 表示层
TCP 传输层

使用SPDY后,HTTP协议额外获得以下功能:

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

SPDY基本上只是将单个域名(IP地址)的通信多路复用,所以当一个Web网站上使用多个域名下的资源,改善效就会受到限制。SPDY的确是一种可以有效消除HTTP瓶颈的技术,但很多Web网站存在的问题并非仅仅由HTTP瓶颈导致的,对Web本身的所读提升,还应该从其它可细致钻研的地方入手,比如改善Web内容的编写方式等。

使用浏览器进行全双工通信的WebSocket

WebSocket为了解决Ajax和Comet里XMLHttpRequest附带的缺陷问题。一旦Web服务器与客户端之间建立起WebSocket协议的通信连接,之后所有的通信都依靠这个专用协议进行,通信过程中可互相发送JSON、XML、HTML或者图片等任意格式数据。由于是建立在HTTP基础上的协议,因此连接的发送方仍是客户端,而一旦确立WebSocket通信连接,不论服务器还是客户端,任意一方都可以直接向对方发送报文。

  • 推送功能
  • 减少通信量:只要建立起WebSocket连接,就希望一直保持连接状态,和HTTP相比不但每次连接的总开销减少,而且由于WebSocket的首部信息很少,通信量也响应减少了。为了实现WebScoket通信,在建立HTTP连接后,需要完成一次”握手(Handshaking)”步骤。
  • 握手•请求:为了实现WebScoket通信,需要用到HTTP的Upgrade首部字段,告知服务器通信协议发生改变,以达到握手目的。
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebScoket-Key: dGEJKFLJDdfjl==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
  • 握手•响应:对于之前的请求返回101(Switching Proctocols)
Http/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: dGEJKFLJDdfjl==
Sec-WebSocket-Protocol: chat
WebSocket API

JS可以调用TheWebSocketAPI 内部提供的程序API,实现WebSocket协议下全双工通信。 举例:每50ms发送一次数据实例!

var socket = new WebScoket('ws:/game.example.com:12010/updates');
scoket.onopen = function () {
    setInterval(function () {
        if(socket.bufferedAmount == 0)
        socket.send(getUpdateDate());
    }, 50);
}
HTTP2.0

设计的的7项技术,2.0的基础协议包括以下3项:

  • SPDY
  • HTTP Speed + Mobility 由微软公司起草用于改善提高移动端痛通信时通信速度和性能的标准,建立在Google的SPDY和WebSocket之上
  • Network-Friendly HTTP Upgrade主要是移动端通信时改善HTTP性能标准
压缩 SPDY,Friendly
多路复用 SPDY
TLS义务化 Speed+Mobility
协商 Speed+Mobility,Friendly
客户端拉拽(Client Pull)/服务器推送(Server Push) Speed+Mobility
流量控制 SPDY
WebSocket Speed+Mobility

HTTP Speed + Mobility 简写Speed + Mobility, Network-Friendly HTTP Upgrade简写Friendly

Web服务器管理文件的WebDAV

WebDAV(web-based Distributed Authoring and Versioning, 基于万维网的分布式创作和版本控制)是一个可以对Web服务器上的内容直接进行文件复制、编辑等操作的分布式文件系统。

针对服务器的资源WebDAV增加了一些概念:

  • 集合(Collection):是一种统一管理过个资源的概念,以集合为单位可进行各种操作,也可实现类似集合的集合这样的叠加。
  • 资源(Resource):把文件货集合称为资源
  • 属性(Propertry):定义资源的属性。定义以”名称=值”的格式执行。
  • 锁(Lock):把文件设置成无状态编辑状态。多人同时编辑时,可防止在同一时间进行内容写入。
WebDAV内新增的方法及状态

为实现远程文件管理,向HTTP/1.1中追加了以下方法及状态码

  • PROPFIND:获取属性
  • PROPPATCH:修改属性
  • MKCOL:创建集合
  • COPY:复制资源及属性
  • MOVE:移动资源
  • LOCK:资源加锁
  • UNLOCK:资源解锁
  • 102 Processing:可正常处理请求,目前处理中状态
  • 207 Multi-Status:存在多种状态
  • 422 Unprocessible Entity:格式正确,内容错误
  • 423 Locked:资源已经加锁
  • 424 Failed Dependency:处理与某请求关联的请求失败,因此不再维持依赖关系
  • 507 Insufficient Storage:保存空间不足

10 构建Web内容技术

  • HTML(HyperText Markup Language,超文本标记语言)
  • CSS(Cascading Style Shets,层叠样式表)
  • 动态HTML(Dynamic HTML)即使用客户端脚本语言将静态HTML内容编程动态技术的总称。使用js实现对HTML的Web页面动态改造,利用DOM(Document Object Model,文档对象模型)可以指定欲发送动态变化的HTML元素。
Web应用
  • CGI(Common Gateway Interface,通用网关接口),每次请求都启动新的CGI程序,当访问比较大时服务器负载大
  • Servelt 取自Server + Applet
数据发布的格式及语言
  • XML(eXtensible Markup Language,可扩展标记语言)
  • RSS/Atom
  • JSON(JavaScript Object Notatin)能够处理数据类型有7种:

fasle/null/true/对象/数组/数字/字符串