前言

本书对互联网基盘——HTTP协议进行了全面系统的介绍。做者由HTTP协议的发展历史娓娓道来,严谨细致地剖析了HTTP协议的结构,列举诸多常见通讯场景及实战案例,最后延伸到Web安全、最新技术动向等方面。本书的特点为在讲解的同时,辅以大量生动形象的通讯图例,更好地帮助读者深入理解HTTP通讯过程当中客户端与服务器之间的交互状况。读者可经过本书快速了解并掌握HTTP协议的基础,前端工程师分析抓包数据,后端工程师实现REST API、实现本身的HTTP服务器等过程当中所需的HTTP相关知识点本书均有介绍。html

本书适合Web开发工程师,以及对HTTP协议感兴趣的各层次读者。前端

第一章、了解 WEB 及网络基础

HTTP 的诞生后端

1989年3月,HTTP 诞生了,最初设想的理念是:借助多文本之间互相关联造成的超文本,连成 WWW。浏览器

Web 成长时代缓存

1990年11月,CERN 研发了世界上第一台 WEB 服务器。安全

1990年,你们针对 HTML1.0 草案进行讨论,因存在多处模糊的地方,草案被直接废弃。服务器

1992年9月,日本第一个网站的主页上线了。网络

1993年1月,现代浏览器的祖先 Mosaic 问世,它之内联等形式显示 HTML 的图像,迅速在世界范围内流行开来。前端工程师

1994年12月,网景公司发布 Netscape Navigator 1.0。分布式

1995年,微软发布了 Internet Explorer 1.0 和 2.0。

驻足不前的 HTTP

HTTP 0.9 :由于那时的 HTTP 并无正式的标准被创建,全部含有 HTTP 1.0 以前版本的意思。

HTTP 1.0 :1996年5月正式做为标准被公布,并记载于 RFC1945

HTTP 1.1 :1997年1月公布,最新标准版本为 RFC2616

网络基础 TCP/IP

一般使用的网络(包括互联网)是在 TCP/IP 协议族的基础上运做的。而 HTTP 属于它内部的一个子集。

TCP/IP 协议族

TCP/IP 是互联网相关的各种协议族的总称。

TCP/IP 的分层管理

分为四层:

  • 应用层:决定了向用户提供应用服务时通讯的活动,例如:FTP、DNS、HTTP。
  • 传输层:提供处于网络链接中的两台计算机之间的数据传输,TCP、UDP。
  • 网络层:处理在网络上流动的数据包,规定传输路线。
  • 数据链路层:处理链接网络的硬件部分。包括控制操做系统、硬件的设备驱动、网卡及光纤等物理可见部分。

分层的好处:把各层之间的接口部分规划好后,修改某个地方时只需修改对应的层,每一个层次内部不影响其余层。

TCP/IP 通讯传输流

HTTP 举例:

与 HTTP 关系密切的协议 : IP、TCP 和DNS

  • 负责传输的 IP 协议

  • 确保可靠性的 TCP 协议

  • 负责域名解析的 DNS 服务

各类协议与 HTTP 协议的关系

第二章、简单的 HTTP 协议

HTTP 协议用于客户端和服务器之间的通讯,请求资源方成为客户端,提供资源响应方成为服务器端。

请求报文是由请求方法、请求 URI、协议版本、可选的请求首部字段和内容实体构成的。

请求报文的构成:

响应报文的构成:

HTTP 是不保存状态的协议

HTTP 是一个无状态协议,自身不具有保存以前发送过的请求或响应的功能。

以后随着发展,引入了 Cookie 技术。

请求 URI 定位资源

HTTP 协议使用 URI 定位互联网上的资源。正是由于 URI 的特定功能,在互联网上任意位置的资源都能访问到。

告知服务器意图的 HTTP 方法

持久链接节省通讯量

HTTP 协议的初始版本中,每进行一次 HTTP 通讯就要断开一次 TCP链接。

持久链接

为解决上述 TCP 链接的问题,HTTP/1.1 和一部分的 HTTP/1.0 想出了持久链接的方法。

持久链接的特色是,只要任意一端没有明确提出断开链接,则保持 TCP 链接状态。

好处在于减小了 TCP 链接的重复创建和断开所形成的额外开销,减轻了服务器端的负载。

管线化

管线化技术出现后,可以作到同时并行发送多个请求,而不须要一个接一个地等待响应了。

使用 Cookie 的状态管理

Cookie 技术经过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。

Cookie 会根据从服务器端发送的响应报文内的一个叫作 Set-Cookie 的首部字段信息,通知客户端保存 Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去。

服务器端发现客户端发送过来的 Cookie 后,会去检查到底是从哪个客户端发来的链接请求,而后对比服务器上的记录,最后获得以前的状态信息。

第三章、HTTP 报文内的 HTTP信息

HTTP 报文

用于 HTTP 协议交互的信息被称为 HTTP 报文。

HTTP 报文自己是由多行(用 CR+LF 做换行符)数据构成的字符串文本。

HTTP 报文大体可分为报文首部和报文主体两块,一般,并不必定要有报文主体。

结构

实例

编码提高传输速率

HTTP 在传输时能够原样直接传输,也能够在传输时经过编码提高传输速率,经过编码,能有效地处理大量的访问请求,但也消耗更多的 CPU 等资源。

报文主体和实体主体的差别

  • 报文:HTTP 通讯中的基本单位,由8位组字节流组成,经过 HTTP 通讯传输。
  • 实体:做为请求或响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成。

压缩传输的内容编码

经常使用的内容编码有如下几种:

  • gzip(GNU zip)
  • compress(UNIX 系统的标准压缩)
  • deflate(zlib)
  • identity(不进行编码)

分割发送的分块传输编码

在传输大容量数据时,经过把数据分割成多块,可以让浏览器逐步显示页面,这种把实体主体分块的功能称为分块传输编码。

分块传输编码会将实体主体分红多个部分(块)。每一块都会用十六进制来标记块的大小,而实体主体的最后一块会使用“0(CR+LF)”来标记。

发送多种数据的多部分对象集合

发送的一份报文主体内可含有多类型实体。一般是在图片或文本文件等上传时使用。

多部分对象集合包含的对象以下:

  • multipart/form-data:在 Web 表单文件上传时使用。
  • multipart/byteranges:状态码 206,响应报文包含了多个范围的内容时使用。

获取部份内容的范围请求

为了解决加载超大图片致使网络中断的状况而实现的一种手段,叫作范围请求。

对一份 10 000 字节大小的资源,若是使用范围请求,能够只请求5001~10 000 字节内的资源。

内容协商返回最合适的内容

当浏览器的默认语言为英语或中文,访问相同 URI 的 Web 页面时,则会显示对应的英语版或中文版的 Web 页面。这样的机制称为内容协商。

第四章、返回结果的状态码

HTTP 状态码负责表示客户端 HTTP 请求的返回结果、标记服务器端的处理是否正常、通知出现的错误等工做。

状态码类别

更多:HTTP 响应代码

第五章、与 HTTP 协做的 Web 服务器

用单台虚拟主机实现多个域名

即使物理层面只有一台服务器,但只要使用虚拟主机的功能,则能够搭建多个站点。

通讯数据转发程序:代理、网关、隧道

HTTP 通讯时,除客户端和服务器之外,还有一些用于通讯数据转发的应用程序:

  • 代理:一种有转发功能的应用程序,扮演了服务器和客户端中间人的角色。
  • 网关:转发其余服务器通讯数据的服务器,它就像本身拥有资源的源服务器同样对请求进行处理。
  • 隧道:将相隔甚远的客户端和服务器二者之间进行中转,并保持双方通讯链接的应用程序。

    保存资源的缓存

缓存是指代理服务器或客户端本地磁盘内保存的资源副本。利用缓存可减小对源服务器的访问,所以也就节省了通讯流量和通讯时间。

客户端的缓存

缓存不只能够存在于缓存服务器内,还能够存在客户端浏览器中。以 Internet Explorer 程序为例,把客户端缓存称为临时网络文件。

第六章、HTTP 首部

注:这部分太多解释,建议看原文

HTTP 请求报文

在请求中,HTTP 报文由方法、URI、HTTP 版本、HTTP 首部字段等部分构成

HTTP 响应报文

在响应中,HTTP 报文由 HTTP 版本、状态码(数字和缘由短语)、HTTP 首部字段 3 部分构成。

HTTP/1.1 首部字段一览

通用首部字段:

请求首部字段:

响应首部字段:

实体首部字段:

第七章、HTTP 的缺点

主要的不足,例举以下:

  • 通讯使用明文(不加密),内容可能会被窃听(例如:抓包)
  • 不验证通讯方的身份,所以有可能遭遇假装(例如:DoS)
  • 没法证实报文的完整性,因此有可能已遭篡改(例如:中间人攻击)

HTTP+ 加密 + 认证 + 完整性保护=HTTPS

为了统一解决上述这些问题,须要在 HTTP 等机制。咱们把添加了加密及认证机制的称为 HTTPS。

使用 HTTPS 通讯

常常会在 Web 的登陆页面和购物结算界面等使用 HTTPS 通讯。

HTTPS 是身披 SSL 外壳的 HTTP

HTTPS 并不是是应用层的一种新协议。只是 HTTP 通讯接口部分用 SSL 和 TLS 协议代替而已。

简言之,所谓 HTTPS,其实就是身披SSL 协议这层外壳的 HTTP。

SSL 是独立于 HTTP 的协议,因此不光是 HTTP 协议,其余运行在应用层的 SMTP 和 Telnet 等协议都可配合 SSL 协议使用。能够说 SSL 是当今世界上应用最为普遍的网络安全技术。

相互交换密钥的公开密钥加密技术

SSL 采用一种叫作公开密钥加密(非对称加密)的加密处理方式。

HTTPS 的安全通讯机制

通讯步骤:

SSL 速度慢吗

HTTPS 也存在一些问题,那就是当使用 SSL 时,它的处理速度会变慢。

HTTPS 比 HTTP 要慢 2 到 100 倍,由于与纯文本通讯相比,加密通讯会消耗更多的CPU 及内存资源。若是每次通讯都加密,会消耗至关多的资源,平摊到一台计算机上时,可以处理的请求数量一定也会随之减小。

第八章、确认访问用户身份的认证

何为认证

服务器为了确认用户的身份,一般须要核对一些信息:

  • 密码
  • 动态令牌
  • 数字证书
  • 生物认证
  • IC 卡

HTTP 使用的认证方式

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

第九章、基于 HTTP 的功能追加协议

消除 HTTP 瓶颈的 SPDY

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

SPDY 的目标

陆续出现的 Ajax 和 Comet 等提升易用性的技术,必定程度上使 HTTP获得了改善,但 HTTP 协议自己的限制也使人有些一筹莫展。为了进行根本性的改善,须要有一些协议层面上的改动。

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

使用 SPDY 后,HTTP 协议额外得到如下功能。

  • 多路复用流:经过单一的 TCP 链接,能够无限制处理多个 HTTP 请求。
  • 赋予请求优先级:能够给请求逐个分配优先级顺序。这样主要是为了在发送多个请求时,解决因带宽低而致使响应变慢的问题。
  • 压缩 HTTP 首部
  • 推送功能:支持服务器主动向客户端推送数据的功能。
  • 服务器提示功能:服务器能够主动提示客户端请求所需的资源。

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

利用 Ajax 和 Comet 技术进行通讯能够提高 Web 的浏览速度。但问题在于通讯若使用 HTTP 协议,就没法完全解决瓶颈问题。WebSocket网络技术正是为解决这些问题而实现的一套新协议及 API。

WebSocket 协议

主要特色:

  • 推送功能:支持由服务器向客户端推送数据的推送功能。
  • 减小通讯量:只要创建起 WebSocket 链接,就但愿一直保持链接状态。

期盼已久的 HTTP/2.0

特色:

Web 服务器管理文件的 WebDAV

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

第十章、构建 Web 内容的技术

  • HTML
  • CSS
  • JavaScript
  • 动态 HTML
  • CGI
  • Servlet
  • XML
  • RSS/Atom
  • JSON

第十一章、Web 的攻击技术

对 Web 应用的攻击模式有如下两种:

  • 主动攻击:是指攻击者经过直接访问 Web 应用,把攻击代码传入的攻击模式
  • 被动攻击:指利用圈套策略执行攻击代码的攻击模式

因输出值转义不彻底引起的安全漏洞:

  • XSS 注入
  • SQL 注入
  • OS 命令注入
  • HTTP 首部注入攻击
  • 邮件首部注入攻击
  • 目录遍历攻击
  • 远程文件包含漏洞

    因设置或设计上的缺陷引起的安全漏洞:

  • 强制浏览

  • 不正确的错误信息处理
  • 开放重定向

因会话管理疏忽引起的安全漏洞:

  • 会话劫持
  • 会话固定攻击
  • 跨站点请求伪造

其余安全漏洞:

  • 密码破解
  • 点击劫持
  • DoS 攻击
  • 后门程序