第1部分向HTTP/2靠攏
第1章萬維網與HTTP 3
1.1萬維網的原理 .3
1.1.1因特網與萬維網 4
1.1.2打開網頁時會發生什麼 5
1.2什麼是HTTP .9
1.3HTTP的語法和歷史 16
1.3.1HTTP/0.9 16
1.3.2HTTP/1.0 17
1.3.3HTTP/1.1 23
1.4HTTPS簡介 .29
1.5查看、發送和接收HTTP消息的工具.32
1.5.1瀏覽器開發者工具 32
1.5.2發送 HTTP 請求 34
1.5.3其他工具 35
總結 36
第2章通向HTTP/2之路 37
2.1HTTP/1.1和當前的萬維網 38
2.1.1HTTP/1.1 根本的性能問題 40
2.1.2HTTP/1.1 管道化 .42
2.1.3網絡性能瀑布流圖 43
2.2解決HTTP/1.1性能問題的方案 .45
2.2.1使用多個 HTTP 連接 46
2.2.2發送更少的請求 49
2.2.3HTTP/1 性能優化總結 50
2.3HTTP/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.1SPDY .58
2.5.2HTTP/2 61
2.6HTTP/2對Web性能的影響 62
2.6.1展示 HTTP/2 能力的絕佳示例 62
2.6.2對 HTTP/2 提升性能的期望 65
2.6.3HTTP/1.1 的一些性能變通方法可能是反模式 70
總結 70
第3章升級到HTTP/2. .72
3.1HTTP/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.4HTTP Alternative Services 117
4.2.5HTTP/2 前奏消息 117
4.3HTTP/2幀 119
4.3.1查看 HTTP/2 幀 .119
4.3.2HTTP/2 幀數據格式 126
4.3.3HTTP/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.3HTTP/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.6HTTP/2推送常見問題.182
5.7HTTP/2推送對性能的影響.184
5.8對比推送和預加載 185
5.9HTTP/2推送的其他應用場景188
總結190
第6章HTTP/2優化 192
6.1HTTP/2對Web開發者的影響 192
6.2一些HTTP/1.1優化方法是否成了反模式194
6.2.1HTTP/2 請求依然有開銷.194
6.2.2HTTP/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.3Service Worker 可以大幅減少網絡加載.215
6.3.4不發送不需要的內容 216
6.3.5HTTP 資源暗示 .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.4Web 服務器和瀏覽器中的優先級策略.252
7.4HTTP/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.3Lookback( 反查 ) 壓縮.264
8.3HTTP正文壓縮 265
8.4HTTP/2的HPACK首部壓縮 267
8.4.1HPACK 靜態表 268
8.4.2HPACK 動態表 269
8.4.3HPACK 首部類型 269
8.4.4Huffman 編碼表 275
8.4.5Huffman 編碼腳本 276
8.4.6為什麼 Huffman 編碼不總是最佳的 278
8.5HPACK壓縮實例 .279
8.6客戶端和服務端對HPACK的實現285
8.7HPACK的價值 .287
總結 287
第4部分HTTP的未來
第9章TCP、QUIC和HTTP/3 .291
9.1TCP的低效率因素,以及HTTP 292
9.1.1創建 HTTP 連接的延遲.293
9.1.2TCP 擁塞控制對性能的影響.295
9.1.3TCP 低效率因素對 HTTP/2 的影響.303
9.1.4優化 TCP 307
9.1.5TCP 和 HTTP 的未來 313
9.2QUIC .313
9.2.1QUIC 的性能優勢 .315
9.2.2QUIC 和網絡技術棧 316
9.2.3什麼是 UDP,為什麼 QUIC 基於它317
9.2.4標準化 QUIC .320
9.2.5HTTP/2 和 QUIC 的不同.322
9.2.6QUIC 的工具 .325
9.2.7QUIC 實現 .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.3HTTP 和加密 .337
10.1.4傳輸協議的問題 340
10.1.5HTTP/2 太過於復雜 344
10.1.6HTTP/2 是一種權宜之計.345
10.2HTTP/2的實際應用 .345
10.3HTTP/2的未來版本,HTTP/3或者HTTP/4會帶來什麼347
10.3.1QUIC 是 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