猜你喜欢
HTTP/2 in Action 中文版

HTTP/2 in Action 中文版

书籍作者:[美] Barry ISBN:9787121386718
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:2511
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

本书以易于理解、方便上手的方式,使用贴近用户的实例来解释 HTTP/2 协议。本书首先介绍为什么要升级到 HTTP/2 以及升级的方法 ;然后逐步深入,详细解释了 HTTP/2 协议本身及其对Web 开发的影响 ;之后介绍了部分高级内容,如流状态、HPACK 等 ;最后探讨了 HTTP 的未来。本书对于 Web 开发者和运维工程师来说是一本很有价值的参考书。

作者简介

Barry Pollard 是一位专业软件开发者,在开发、支持软件和基础架构方向拥有近20年的行业经验。他对Web技术,性能调优,安全以及技术实践非常感兴趣。他的博客是https://www.tunetheweb.com,您也可以在Twitter上找到他@tunetheweb。
郑维智,Akamai公司高级企业架构师,专注于公司的主要客户及战略合作伙伴。他也是Web性能优化和HTTP/2的布道者,为Akamai的产品开发团队提供技术建议和客户反馈。

编辑推荐
适读人群 :本书适合网站开发及运维人员,以及正考虑要实现HTTP/2或者希望了解HTTP/2如何工作的读者。

HTTP(Hypertext Transfer Protocol)是网站和浏览器之间交换消息的标准。在20年之后,它终于迎来了剧增的升级需求。通过添加对流、服务器推送、首部压缩和请求优先级策略的支持,HTTP/2在速度、安全性和效率上获得了巨大的提升。本书会教你高效使用HTTP/2需要的所有知识,例如,如何使用帧、多路复用及推送等新特性来优化Web性能。同时,你还会了解到有关流量控制和流依赖等高级话题的实际案例。我们可以使用这些易于上手的技术和最佳实践,来提升网站的性能。


前言

前言
我在很早的时候就开始关注 HTTP/2 了。据称,使用这种新技术,不需要做太多事情就能获得性能提升,同时 Web 开发者也不再需要使用一些凌乱的变通方法,这绝对是令人振奋的。然而,现实比理想要骨感得多,我为弄清楚如何在我的Apache 服务器上部署它,以及弄清楚它对性能的影响花费了一段时间之后,发现缺乏文档,这很是令我沮丧。我写了一些博客介绍如何设置HTTP/2,这些博客很受欢迎。
与此同时,我开始参与 GitHub 上的一些 HTTP/2 项目,并泡在 Stack Overflow 上,关注相关的主题并帮助解答类似的问题。当 Manning 来电话,寻找人写一本关于HTTP/2 的书时,我抓住了机会。我并没有参与 HTTP/2 标准的制定,但我觉得我和那些曾经听过这项技术,但却对它缺乏了解,正在苦苦挣扎的网络开发者有很多共同语言。
在编写本书的一年半时间里,HTTP/2 已经成为主流,并被越来越多的网站使用。随着软件的更新,部署相关的问题变得越来越简单,我希望本书中描述的一些问题很快成为历史,但我怀疑还需要几年的时间,启用 HTTP/2 才能变得容易。
你启用了 HTTP/2 后,应该可以立即看到性能提升,不需要进行太多的配置,也不需要非常理解它。然而,天下没有免费的午餐,协议及部署中的细枝末节,要求网站管理者对协议有更深的理解。Web 性能优化是一个蓬勃发展的行业,HTTP/2是另一个工具,它是一种有趣的技术,会带来很多机会。
网上有大量的信息,如果你有时间并愿意去寻找、过滤和理解这些信息,阅读不同的意见,甚至直接与协议设计者和实现者沟通,会让你收获很多。然而,面对HTTP/2 这样大的主题,如果我能在一本书的范围和深度内解释相关的技术,给你提供有用的参考,激起你的兴趣,那么这本书就算实现了目标。

关于本书
本书以一种易于理解、方便上手的方式,使用实际的案例来解释协议。协议规范枯燥且难以理解,因此本书力求通俗易懂,使用贴近用户的案例来讲解。
本书目标读者
本书的目标读者为网络开发者、网站管理员以及想要了解互联网技术如何运作的人。本书旨在提供 HTTP/2 的完整描述,以及其中的技术细节。尽管有大量关于该主题的博客、文章,但大多数都是关于特定主题的粗略或详细的介绍。本书会详述整个协议及其中的许多复杂特性,以帮助读者阅读和理解规范,以及一些深层次的文章。HTTP/2 的创建主要是为了提高性能,因此任何对 Web 性能优化感兴趣的人都会从本书获得有用的知识。此外,本书还包含许多参考资料,以供大家延伸阅读。
本书组织结构
全书共有 10 章,分为 4 部分。
第 1 部分解释了为什么要升级到 HTTP/2,以及升级的方法。
第 1 章介绍了一些背景知识,即使那些只对互联网有基本了解的人也应该能够掌握这些知识。
第 2 章讨论了 HTTP/1.1 的问题,以及为什么需要 HTTP/2。
第 3 章描述了为网站启用 HTTP/2 的方法,以及在此过程中会出现的一些复杂问题。附录对本章中的内容做了补充,提供了流行的 Web 服务器 Apache、Nginx 和 IIS 的安装说明。
从第 2 部分开始,逐步深入,讲述协议本身,以及它对 Web 开发实践所带来的影响。
第 4 章介绍了 HTTP/2 协议的基础知识,如何建立 HTTP/2 连接以及 HTTP/2帧的基本格式。
第 5 章介绍了 HTTP/2 推送,它是协议全新的特性,其允许服务端主动发送浏览器尚未请求的资源。
第 6 章介绍了 HTTP/2 对 Web 开发实践所带来的影响。
第 3 部分介绍了协议较深层的技术,Web 开发者以及 Web 服务器管理员目前可能无法对它们做出控制 :
第 7 章介绍了 HTTP/2 规范中的状态、流量控制和优先级策略等概念,以及在具体实现中 HTTP/2 一致性差异。
第 8 章深入探讨了 HPACK 协议,该协议用于 HTTP/2 中的 HTTP 首部压缩。
第 4 部分着眼于 HTTP 的未来。
第 9 章介绍了 TCP、QUIC 和 HTTP/3。技术更迭的脚步永远不会停止,现在开发人员已经在寻找改进 HTTP/2 的方法。本章讨论了 HTTP/2 未解决的低效问题,以及如何在后续版本中改进它们 :HTTP/3。
第 10 章介绍了除 HTTP/3 之外的其他可以改进 HTTP 的方法,包括对在HTTP/2 标准化过程中所出现问题的反思,以及在实际应用中这些问题的影响。
读完本书,读者应该对 HTTP/2 和相关技术有很好的掌握,应该对 Web 性能优化有更深入的了解,同时也为将来 QUIC 和 HTTP/3 的发布做好了准备。

目录
第1部分 向HTTP/2靠拢
第1章 万维网与HTTP....................................................................................................3
1.1 万维网的原理 .......................................................................................................3
1.1.1 因特网与万维网 .......................................................................................4
1.1.2 打开网页时会发生什么 ...........................................................................5
1.2 什么是HTTP .........................................................................................................9
1.3 HTTP的语法和历史 ...........................................................................................16
1.3.1 HTTP/0.9 .................................................................................................16
1.3.2 HTTP/1.0 .................................................................................................17
1.3.3 HTTP/1.1 .................................................................................................23
1.4 HTTPS简介 .........................................................................................................29
1.5 查看、发送和接收HTTP消息的工具 ...............................................................32
1.5.1 浏览器开发者工具 .................................................................................32
1.5.2 发送 HTTP 请求 .....................................................................................34
1.5.3 其他工具 .................................................................................................35
总结 ..............................................................................................................................36
第2章 通向HTTP/2之路...............................................................................................37
2.1 HTTP/1.1和当前的万维网 .................................................................................38
2.1.1 HTTP/1.1 根本的性能问题 ....................................................................40
2.1.2 HTTP/1.1 管道化 ....................................................................................42
2.1.3 网络性能瀑布流图 .................................................................................43
2.2 解决HTTP/1.1性能问题的方案 .........................................................................45
2.2.1 使用多个 HTTP 连接 .............................................................................46
2.2.2 发送更少的请求 .....................................................................................49
2.2.3 HTTP/1 性能优化总结 ...........................................................................50
2.3 HTTP/1.1的其他问题 .........................................................................................50
2.4 实际案例 .............................................................................................................51
2.4.1 示例网站 1: amazon.com .......................................................................52
2.4.2 示例网站 2 : imgur.com .........................................................................56
2.4.3 这个问题究竟有多严重 .........................................................................57
2.5 从HTTP/1.1到HTTP/2 ........................................................................................58
2.5.1 SPDY .......................................................................................................58
2.5.2 HTTP/2 ....................................................................................................61
2.6 HTTP/2对Web性能的影响 .................................................................................62
2.6.1 展示 HTTP/2 能力的绝佳示例 ..............................................................62
2.6.2 对 HTTP/2 提升性能的期望 ..................................................................65
2.6.3 HTTP/1.1 的一些性能变通方法可能是反模式 ....................................70
总结 ..............................................................................................................................70
第3章 升级到HTTP/2. ..................................................................................................72
3.1 HTTP/2的支持 ....................................................................................................72
3.1.1 浏览器对 HTTP/2 的支持 ......................................................................73
3.1.2 服务器对 HTTP/2 的支持 ......................................................................78
3.1.3 兼容不支持 HTTP/2 的情况 ..................................................................80
3.2 网站开启HTTP/2的方法 ....................................................................................81
3.2.1 在 Web 服务器上开启 HTTP/2..............................................................81
3.2.2 反向代理实现 HTTP/2 ...........................................................................84
3.2.3 通过 CDN 实现 HTTP/2 ........................................................................87
3.2.4 小结 .........................................................................................................89
3.3 常见问题 .............................................................................................................89
总结 ..............................................................................................................................93
第2部分 使用HTTP/2
第4章 HTTP/2协议基础...............................................................................................97
4.1 为什么是HTTP/2而不是HTTP/1.2 ....................................................................97
4.1.1 使用二进制格式替换文本格式 .............................................................99
4.1.2 多路复用代替同步请求 .......................................................................100
4.1.3 流的优先级和流量控制 .......................................................................103
4.1.4 首部压缩 ...............................................................................................104
4.1.5 服务端推送 ...........................................................................................105
4.2 如何创建一个HTTP/2连接 ..............................................................................105
4.2.1 使用 HTTPS 协商 .................................................................................106
4.2.2 使用 HTTP upgrade 首部 .....................................................................113
4.2.3 使用先验知识 .......................................................................................116
4.2.4 HTTP Alternative Services ....................................................................117
4.2.5 HTTP/2 前奏消息 .................................................................................117
4.3 HTTP/2帧 ..........................................................................................................119
4.3.1 查看 HTTP/2 帧 ....................................................................................119
4.3.2 HTTP/2 帧数据格式 .............................................................................126
4.3.3 HTTP/2 消息流示例 .............................................................................128
4.3.4 其他帧 ...................................................................................................143
总结 ............................................................................................................................148
第5章 实现HTTP/2推送.............................................................................................149
5.1 什么是HTTP/2服务端推送 ..............................................................................149
5.2 如何推送 ...........................................................................................................153
5.2.1 使用 HTTP link 首部推送 ....................................................................153
5.2.2 查看 HTTP/2 推送 ................................................................................156
5.2.3 使用 link 首部从下游系统推送 ...........................................................159
5.2.4 更早推送 ...............................................................................................162
5.2.5 使用其他方式推送 ...............................................................................168
5.3 HTTP/2推送在浏览器中如何运作 ..................................................................171
5.3.1 查看推送缓存如何工作 .......................................................................172
5.3.2 使用 RST_STREAM 拒绝推送 ...........................................................175
5.4 如何实现条件推送 ...........................................................................................176
5.4.1 在服务端跟踪推送的资源 ...................................................................176
5.4.2 使用 HTTP 条件请求 ...........................................................................176
5.4.3 使用基于 cookie 的推送 ......................................................................177
5.4.4 使用缓存摘要 .......................................................................................178
5.5 推送什么 ...........................................................................................................179
5.5.1 你能推送什么 .......................................................................................179
5.5.2 应该推送什么 .......................................................................................180
5.5.3 自动化推送 ...........................................................................................181
5.6 HTTP/2推送常见问题 ......................................................................................182
5.7 HTTP/2推送对性能的影响 ..............................................................................184
5.8 对比推送和预加载 ...........................................................................................185
5.9 HTTP/2推送的其他应用场景 ..........................................................................188
总结 ............................................................................................................................190
第6章 HTTP/2优化....................................................................................................192
6.1 HTTP/2对Web开发者的影响 ...........................................................................192
6.2 一些HTTP/1.1优化方法是否成了反模式 .......................................................194
6.2.1 HTTP/2 请求依然有开销 .....................................................................194
6.2.2 HTTP/2 不是没有限制 .........................................................................197
6.2.3 越大的资源压缩越有效 .......................................................................199
6.2.4 带宽限制和资源竞争 ...........................................................................201
6.2.5 域名分片 ...............................................................................................202
6.2.6 内联资源 ...............................................................................................203
6.2.7 总结 .......................................................................................................203
6.3 在HTTP/2下依然有效的性能优化技术 ..........................................................204
6.3.1 减少要传输的数据量 ...........................................................................204
6.3.2 使用缓存防止重复发送数据 ...............................................................211
6.3.3 Service Worker 可以大幅减少网络加载 .............................................215
6.3.4 不发送不需要的内容 ...........................................................................216
6.3.5 HTTP 资源暗示 ....................................................................................217
6.3.6 减少最后 1 公里的延迟 .......................................................................219
6.3.7 优化 HTTPS ..........................................................................................219
6.3.8 和 HTTP 无关的性能优化技术 ...........................................................222
6.4 同时对HTTP/1.1和HTTP/2做优化 ..................................................................222
6.4.1 计算 HTTP/2 流量 ................................................................................223
6.4.2 在服务端检测 HTTP/2 支持 ................................................................224
6.4.3 在客户端检测 HTTP/2 支持 ................................................................228
6.4.4 连接合并 ...............................................................................................228
6.4.5 还要为 HTTP/1.1 的用户优化多久 .....................................................230
总结 ............................................................................................................................231
第3部分 HTTP/2进阶
第7章 高级HTTP/2概念.............................................................................................235
7.1 流状态 ...............................................................................................................236
7.2 流量控制 ...........................................................................................................239
7.2.1 流量控制示例 .......................................................................................240
7.2.2 在服务器上设置流量控制 ...................................................................244
7.3 流优先级 ...........................................................................................................244
7.3.1 流依赖关系 ...........................................................................................245
7.3.2 流权重 ...................................................................................................248
7.3.3 为什么优先级策略如此复杂 ...............................................................251
7.3.4 Web 服务器和浏览器中的优先级策略 ...............................................252
7.4 HTTP/2一致性测试 ..........................................................................................255
7.4.1 服务端一致性测试 ...............................................................................255
7.4.2 客户端一致性测试 ...............................................................................258
总结 ............................................................................................................................258
第8章 HPACK首部压缩.............................................................................................259
8.1 为什么需要首部压缩 .......................................................................................259
8.2 压缩的运作方式 ...............................................................................................261
8.2.1 查表法 ...................................................................................................262
8.2.2 更高效的编码技术 ...............................................................................263
8.2.3 Lookback( 反查 ) 压缩 .........................................................................264
8.3 HTTP正文压缩 .................................................................................................265
8.4 HTTP/2的HPACK首部压缩 .............................................................................267
8.4.1 HPACK 静态表 .....................................................................................268
8.4.2 HPACK 动态表 .....................................................................................269
8.4.3 HPACK 首部类型 .................................................................................269
8.4.4 Huffman 编码表 ...................................................................................275
8.4.5 Huffman 编码脚本 ...............................................................................276
8.4.6 为什么 Huffman 编码不总是最佳的 ..................................................278
8.5 HPACK压缩实例 ..............................................................................................279
8.6 客户端和服务端对HPACK的实现 ..................................................................285
8.7 HPACK的价值 ..................................................................................................287
总结 ............................................................................................................................287
第4部分 HTTP的未来
第9章 TCP、QUIC和HTTP/3....................................................................................291
9.1 TCP的低效率因素,以及HTTP ......................................................................292
9.1.1 创建 HTTP 连接的延迟 .......................................................................293
9.1.2 TCP 拥塞控制对性能的影响...............................................................295
9.1.3 TCP 低效率因素对 HTTP/2 的影响 ...................................................303
9.1.4 优化 TCP ...............................................................................................307
9.1.5 TCP 和 HTTP 的未来...........................................................................313
9.2 QUIC .................................................................................................................313
9.2.1 QUIC 的性能优势 ................................................................................315
9.2.2 QUIC 和网络技术栈 ...........................................................................316
9.2.3 什么是 UDP,为什么 QUIC 基于它 ..................................................317
9.2.4 标准化 QUIC ........................................................................................320
9.2.5 HTTP/2 和 QUIC 的不同 .....................................................................322
9.2.6 QUIC 的工具 ........................................................................................325
9.2.7 QUIC 实现 ............................................................................................327
9.2.8 你应该使用 QUIC 吗 ...........................................................................327
总结 ............................................................................................................................328
第10章 HTTP将何去何从..........................................................................................329
10.1 关于HTTP/2的争议,以及它没有解决的问题 ............................................330
10.1.1 反对 SPDY 的观点 .............................................................................330
10.1.2 隐私问题和 HTTP 中的状态 .............................................................332
10.1.3 HTTP 和加密 ......................................................................................337
10.1.4 传输协议的问题 .................................................................................340
10.1.5 HTTP/2 太过于复杂 ...........................................................................344
10.1.6 HTTP/2 是一种权宜之计 ...................................................................345
10.2 HTTP/2的实际应用 ........................................................................................345
10.3 HTTP/2的未来版本,HTTP/3或者HTTP/4会带来什么 ..............................347
10.3.1 QUIC 是 HTTP/3 吗 ...........................................................................347
10.3.2 更进一步改进 HTTP 二进制协议 ....................................................348
10.3.3 在传输层之上进一步优化 HTTP ......................................................348
10.3.4 什么时候会需要新的 HTTP 版本 .....................................................351
10.3.5 如何引入未来版本的 HTTP ..............................................................352
10.4 将HTTP当作一个更通用的传输协议 ...........................................................352
10.4.1 使用 HTTP 语义和消息来传递非 Web 流量 ....................................353
10.4.2 使用 HTTP/2 二进制成帧层 ..............................................................354
10.4.3 使用 HTTP 启动另一个协议 .............................................................355
总结 ............................................................................................................................359
附录A 将常见Web服务器升级到HTTP/2...................................................................360
HTTP/2 in Action 中文版的书评

HTTP已经无处不在,在Web应用(互联网环境,包括基于浏览器的B/S应用和原生的移动应用)中,几乎百分之百使用了HTTP。在分布式的企业应用(企业内网环境)中,基于HTTP部署的应用比例占了大多数。而在云平台(云计算环境)上部署的分布式应用中,同样大多数应用也是基于HTTP部...

2020-07-23 13:20:44

标签
http2