「图解HTTP」读书笔记

「 图解HTTP 」 读书笔记 第 九 章

2018-01-04  本文已影响9人  13kmsteady

基于 HTTP 的功能追加协议

1. 基于 HTTP 的协议

HTTP 功能上的不足可通过创建一套全新的协议来弥补,有一些新协议的规则是基于 HTTP 的,并在此基础上添加了新的功能。

2. 消除 HTTP 瓶颈的 SPDY

Google 在 2010 年发布了 SPDY,其开发目标旨在解决 HTTP 的性能瓶颈,缩短 Web 页面的加载时间(50%)。

http://www.chromium.org/spdy/

2.1 HTTP 的瓶颈

使用 HTTP 协议探知服务器上是否有内容更新,就必须频繁的从客户端到服务器端进行确认。如果服务器上没有内容更新,就会产生徒劳的通信。

HTTP 瓶颈如下:

以前的 HTTP 通信.png

Ajax 的解决方法

Ajax(Asynchronous JavaScript and XML,异步 JavaScript 与 XML 技术) 是一种有效利用 JavaScript 和 DOM(Document Object Model,文档对象模型)的操作。以达到局部 Web 页面替换加载的异步通信手段。

Ajax 的核心技术是名为 XMLHttpRequest 的 API,通过 JavaScript 脚本语言的调用就能和服务器进行 HTTP 通信。借用这种手段,就能从已加载完毕的 Web 页面上发起请求,只更新局部页面。

利用 Ajax 实时的从服务器获取内容,有可能会导致大量请求产生。另外 Ajax 仍未解决 HTTP 协议本身存在的问题。

Ajax 通信.png

Comet 的解决方法

一旦服务器有内容更新,Comet 不会让请求等待,而是直接给客户端返回响应。这是一种通过延迟应答,模拟实现服务器端向客户端推送(Server Push)的功能。

通常,服务器端接收到请求,在处理完毕后就会立即返回响应,但为了实现推送功能,Comet 会先将响应置于挂起状态,当服务器端有内容更新时,再返回该响应。因此,服务器端一旦有更新,就可以立即反馈给客户端。

通过 Comet 内容上可以做到实时更新,但为了维持连接会消耗更多的资源。另外,Comet 也仍未解决 HTTP 协议本身存在的问题。

Comet 通信.png

SPDY 的目标

处于持续开发状态中的 SPDY 协议,正是为了在协议级别消除 HTTP 所遭遇的瓶颈。

2.2 SPDY 的设计与功能

SPDY 并没有完全改写 HTTP 协议,而是在 TCP/IP 的应用层与运输层之间通过新加会话层的形式运作。考虑到安全性问题,SPDY 规定通信中使用 SSL。

SPDY 以会话层的形式加入,控制对数据的流动。但还是采用 HTTP 建立连接通信。

SPDY 的设计.png

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

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

WebSocket 网络技术正是为解决 HTTP 瓶颈问题而实现的一套新协议及 API。

3.1 WebSocket 的设计与功能

WebSocket,即 Web 浏览器与 Web 服务器之间全双工通信标准。其中,WebSocket 协议由 IETF 定为标准,WebSocket 由 W3C 定位标准。

仍在开发中的 WebSocket 技术主要是为了解决 Ajax 和 Comet 里 XMLHttpRequest 附带的缺陷所引起的问题。

3.2 WebSocket 协议

一旦 Web服务器与客户端之间建立起 WebSocket 协议的通信连接,之后所有的通信都依靠这个专用协议进行。通信过程中可互相发送 JSON、XML、HTML 或图片等任意格式的数据。

由于是建立在 HTTP 基础上的协议,因此连接的发起方仍是客户端,而一旦建立 WebSocket 通信连接,不论服务器还是客户端,任意一方都可直接向对方发送报文。

WebSocket 协议的主要特点如下:

为了实现 WebSocket 通信,在 HTTP 连接建立之后,需要完成一次握手(Handshaking)的步骤。

4.期盼已久的 HTTP/2.0

HTTP/2.0 的目标是改善用户在使用 Web 时的速度体验。

HTTP/2.0 的 7 项技术及讨论如下表格所示:

压缩 SPDY、Friendly
多路复用 SPDY
TLS 义务化 Speed + Mobility
协商 Speed + Mobility,Friendly
客户端拉拽/服务器推送 Speed + Mobility
流量控制 SPDY
WebSocket Speed + Mobility

5. Web 服务器管理文件的 WebDAV

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

除了创建、删除文件等基本功能,它还具备文件创建者管理、文件编辑过程中禁止其他用户内容覆盖的加锁功能,以及对文件内容修改的版本控制功能。

WebDAV.png
5.1 扩展 HTTP/1.1 的 WebDAV

针对服务器上的资源,WebDAV 新增了一些概念,如下所示。

WebDAV 扩展的概念.png
5.2 WebDAV 内新增的方法及状态码

WebDAV 为实现远程文件管理,向 HTTP/1.1 中追加了以下这些方法。

为配合扩展的方法,状态码也随之扩展。

WebDAV 的请求实例

以下是使用 PROPFIND 方法对 http://www.example.com/file 发起获取属性的请求。

PROPFIND /file HTTP/1.1
Host: www.example.com
Content-Type: application/xml; charset="utf-8"
Content-Length: 219
<?xml version="1.0" encoding="utf-8" ?>
<D:propfind xmlns:D="DAV:">
<D:prop xmlns:R="http://ns.example.com/boxschema/">
<R:bigbox/>
<R:author/>
<R:DingALing/>
<R:Random/>
</D:prop>
</D:propfind>

WebDAV 的响应实例

以下是针对之前的 PROPFIND 方法,返回 http://www.example.com/file 的属性的响应

HTTP/1.1 207 Multi-Status
Content-Type: application/xml; charset="utf-8"
Content-Length: 831

<?xml version="1.0" encoding="utf-8" ?>
<D:multistatus xmlns:D="DAV:">
    <D:response xmlns:R="http://ns.example.com/boxschema/">
        <D:href>http://www.example.com/file</D:href>
        <D:propstat>
            <D:prop>
                <R:bigbox>
                <R:BoxType>Box type A</R:BoxType>
                </R:bigbox>
                <R:author>
                <R:Name>J.J. Johnson</R:Name>
                </R:author>
            </D:prop>
            <D:status>HTTP/1.1 200 OK</D:status>
        </D:propstat>
        <D:propstat>
            <D:prop><R:DingALing/><R:Random/></D:prop>
            <D:status>HTTP/1.1 403 Forbidden</D:status>
            <D:responsedescription> The user does not have access to the DingALing property.
            </D:responsedescription>
        </D:propstat>
    </D:response>
    <D:responsedescription> There has been an access violation error.
    </D:responsedescription>
</D:multistatus>
上一篇下一篇

猜你喜欢

热点阅读