1. 程式人生 > >HTTP/2 基礎教程

HTTP/2 基礎教程

內容簡介

讓網站和應用更快速、更簡潔、更穩健,從而有效提升使用者體驗,這無疑是眾多開發者夢寐以求的。然而網際網路發展日新月異,HTTP/1.1 協議已經難以滿足現今的需求。在眾多 Web 效能提升方案中,HTTP/2 值得嘗試。

本書是 HTTP/2 實用指南,介紹了 HTTP/2 的設計初衷和新特性,以及如何才能充分利用這些特性來打造高效能網站及應用。作者用定量分析方法,對比了不同網路環境下及不同瀏覽器上 HTTP/1.1 與 HTTP/2 的效能差異,並指出了網站遷移到 HTTP/2 需要注意的問題及對策。

本書主要內容:

  • HTTP 發展回顧——面臨效能挑戰,促使協議升級;
  • HTTP/2 概覽——優點及遷移方法;
  • 既有的建議方案,以及提升 Web 效能的技巧;
  • HTTP/2 支援的瀏覽器、伺服器、代理,以及內容分發網路;
  • 相比於 HTTP/1.1,採用 HTTP/2 的網站在效能上有何提升;
  • HTTP/2 對網路通訊中一些具體問題的改進,如延遲、丟包、首位元組時間等。

作者簡介

Stephen Ludin,Akamai 公司 Web 效能部門 CAO,帶領 Akamai 公司的 Foundry 團隊,負責研發下一代 Web 技術。

Javier Garza,Akamai 公司高階企業架構師,專注於公司的主要客戶及戰略合作伙伴。他也是 Web 效能優化和 HTTP/2 的佈道者,為 Akamai 的產品開發團隊提供技術建議和客戶反饋。

本書內容

中文版推薦序一

等待與希望

HTTP/2 已經滲入普通人的生活。如果你平時多個心眼,會發現很多網站已經悄然採用了 HTTP/2,享受了 HTTP/2 帶來的諸般好處,甚至在一些技術大會上已經有相關的主題分享。

另一方面,大家對它的瞭解還相當粗淺。從我主持面試的經歷來看,在我認為“應當瞭解 HTTP/2”的候選人——不管後端還是前端——當中,大部分人還處在“聽說過有這麼回事”的階段,只有不到 20% 的候選人能夠說出一點實質性的內容。如果繼續問“HTTP/2 和 HTTPS 是什麼關係”“從 HTTP/1.1 升級到 HTTP/2 有什麼要注意的”“HTTP/2 為什麼不叫 HTTP/2.0”,能答上來的人就寥寥無幾了。

為什麼會出現這種情況?我覺得和 HTTP/2 的中文資料匱乏有關。

縱觀近年來的中文技術圖書市場,無論是涉及的領域,還是作品的質量,都有明顯的進步,眾星捧月追求英文原版的情況已經是過去時。這對廣大技術從業者來說,無疑是好事。但是另一方面,這種情況也間接造成了中英文技術資料的割裂:沒有中文圖書,大家最多看看網上的文章,沒有那麼多人願意去研讀英文圖書了。關於 HTTP/2,到目前為止,還沒有看到過任何中文圖書。

難道是因為 HTTP/2 不重要嗎?答案顯然是否定的。

我最早進入網際網路行業時,僅僅滿足於“寫好程式在網上能跑就行”。隨著工作經歷的豐富,我越來越深刻地意識到,只要你在這個行業從事技術,無論是前端還是後端,網路相關的基礎知識這一課終究是躲不過去的。無論是伺服器端要面對的大負載和高併發,還是客戶端要面對的有限計算資源和弱網通訊環境,最後都離不開對網路的深入理解。

對 TCP/IP 的瞭解越深,我們往往越會感嘆其層次設計的巧妙。各種新出現的優化並不會破壞原有的體系結構。但是,對 HTTP 的瞭解越深,我們往往越會感嘆它的過時——Web 的發展太迅猛了,相比之下,定稿於 1999 年的 HTTP/1.1 時常讓人以為是“上古卷軸”。所以,大家才會想出各種“優化黑魔法”來避開 HTTP/1.1 的各種限制和缺陷。域名拆分、資源域名分離、精靈圖(用 CSS 選擇大拼圖中的小區域)等,都是如此。

不幸的是,這些“高招”往往並非標準統一的解決方案,所以並不能直接放心享用。和 CDN 廠商打過交道就會知道,網路裝置成千上萬,規範的實現程度也參差不齊,由此產生形形色色的問題,簡直讓人不勝其煩。再加上各種“優化黑魔法”,只會讓本來雜亂的網路世界變得更加混沌。除非自己技術實力足夠強,否則只能望洋興嘆。

有沒有造福大家的統一的解決辦法? Google 先揭竿而起,發明制訂了 SPDY 規範。繼而大家才發現,原來所有人都在翹首期盼新的 HTTP 協議。於是,順理成章地,HTTP/2 誕生了。雖然制訂過程是漫長而痛苦的,但首部壓縮、分幀傳輸、服務端推送等新特性,直擊 HTTP/1.1 這種“古董協議”的痛點,讓廣大開發者大呼過癮,迫不及待想要投入 HTTP/2 的懷抱。

然而,天下沒有免費的午餐。要想享受 HTTP/2 帶來的諸般好處,“簡單升級”協議是行不通的。沒錯,HTTP/1.1 顯得簡單直白,相當一部分的開發人員甚至把它理解為一問一答的簡單通訊模型(和程式語言中的方法呼叫一樣),也不妨礙自己的開發。可惜,HTTP/2 不能這麼玩。首部壓縮等應用層特性或許還很好懂,但是,新出現的幀傳輸層絕對要花一番功夫才能理解。不理解這些新特性背後的原理,許多時候就沒法除錯;不能除錯,很多問題就束手無策;束手無策,就無法享受新技術帶來的諸般好處。

所幸,《HTTP/2 基礎教程》中文版面世了。在我看來,這本書相當適合作為廣大開發人員瞭解 HTTP/2 的資料,大家也確實需要這樣一本書,理由如下。

第一,它的範圍足夠廣,HTTP/2 中有價值的新特性基本都有覆蓋,不是就概念而概念,而是會講解各種新特性適合哪些場景以及不適合哪些場景。比如,如果你的網站大量引用第三方資源,那麼域名拆分能帶來的獲益就相當小。

第二,它的編排很用心,不是單純羅列 HTTP/2 的好處,而是通過與 HTTP/1.1 的對比加以講解,更有一章專門講解從 HTTP/1.1 升級到 HTTP/2 的一般過程,以前做的優化哪些必須變更、哪些可以保留,翔實可靠。比如,精靈圖這種優化手段依然有助於提升響應速度,但會喪失快取的便利性。

第三,它不是簡單通過定性分析來論證 HTTP/2 的好處,而是大量使用了定量分析的方法。 HTTP/2 比 HTTP/1.1 要好,到底好多少,提升的幅度會受哪些因素的影響?書中對這類問題都給出了嚴謹詳細的分析。我讀了這本書才知道,光在光纖中的傳輸速度只有真空中的 2/3。

第四,作為一本優秀的技術圖書,其中的分析和思考會讓讀者在今後的工作中獲益更多。本書不僅告訴讀者 HTTP/2 的首部壓縮採用的是 HPACK 演算法,還講解了為什麼採用 HPACK 而不是沿用 SPDY 的 gzip 演算法。我相信,如果瞭解了 CRIME 漏洞的原理,我們在今後的工作中會有更多樣的思考角度,以及更完善的安全意識。

《HTTP/2 基礎教程》的兩位譯者羅正龍、鄭維智都是滬江優秀的前端開發工程師,本身就對 HTTP 協議有豐富的開發經驗,對工作也有高度的責任感,在繁忙的工作之餘迅速完成了這本書的翻譯。我在審校過程中,經常發現他們就書中的具體問題展開細緻的討論——因為不滿足於“翻譯文字”,更注重理解和思考背後的原理,所以發現了原書的若干錯漏,也確定了很多符合中文開發者習慣的更容易理解的表達方式。我敢說,在今天的中文技術圖書譯者裡,有這樣認真精神的人,不超過十分之一。有這樣的精神為支撐,圖書的翻譯質量是有保證的。

寫完這篇文章的時候,我再次確認了一番,目前中文技術圖書裡確實還沒有任何一本 HTTP/2 的專著。如果沒有估計錯誤,《HTTP/2 基礎教程》中文版的出版只會落後英文原版半年左右,不出意外的話,它應當算中文世界裡第一本 HTTP/2 的專著了。我相信,它的質量不會辜負“第一”的名次。

大仲馬說過,人類的一切智慧都包含在兩個詞裡——等待與希望。你是不是深深被 HTTP/1.1 所困擾,面對 HTTP/2 又有困惑?那好,現在《HTTP/2 基礎教程》終於和讀者見面了,讓我們共同期待 HTTP/2 的美好未來吧。

——餘晟,技術圖書翻譯寫作愛好者,現任滬江教育集團技術中心研發總監

中文版推薦序二

如果有一種遠端通訊協議堪稱“萬能協議”的話,那一定非 HTTP 莫屬。除了那些對於效能和實時性要求極高的通訊場合之外,幾乎所有的遠端通訊都可以基於 HTTP 來實現。 Web(全稱 World Wide Web)的四大技術基石是 URI、HTML、HTTP 和 MIME,正是這四大基石支撐了巨集偉的 Web 神殿。在這四大基石之中,HTTP 的重要性最為突出。今天有很多移動 Web 應用並沒有使用 URI、HTML、MIME,只用了 HTTP,仍然可以稱為“Web 應用”。從這個角度看,HTTP 幾乎是 Web 的代名詞。

HTTP 的上一個正式版本是 1.1 版,主設計師是 Roy T. Fielding 博士。HTTP/1.1 與 HTTP/1.0 相比,無論是設計思想還是技術細節方面都取得了巨大的進步。在設計思想方面,Fielding 系統化地提出了 REST 架構風格的理論,以 REST 理論指導 HTTP/1.1 的設計。在 HTTP/1.1 中引入了“資源”這個極為重要的抽象概念,將 HTTP 從一種面向文件的協議徹底轉變為一種面向資源的協議。資源是一種非常強大的抽象工具,在 HTTP/1.1 釋出之後,Web 之上不再只有大量具體、靜態的“文件”,而是包括了無數抽象、動態的“資源”。從對 Web 的概念理解上看,這是一次革命性的轉變,推動了 Web 應用的數量以幾何級數速度爆發,Web 的範圍擴充套件到了地球上有人類生存的所有地方。可以說,不理解“資源”和相關的“資源表述”,就不理解 HTTP/1.1,對 Web 的理解其實還沒有入門。在技術細節方面,HTTP/1.1 也增加了很多新的內容,例如:HTTP 連線支援 keepalive、增加 CONNECT 方法來支援 HTTP tunnel,等等。

這裡再強調一下 REST。REST 是 Web 自身的架構風格,也是 Web 取得巨大成功的技術層面的深層原因,理解 REST 就是理解 Web 技術架構的鑰匙。前面提到的“資源”及“資源表述”只是 REST 理論之中入門級的概念,REST 還有很多其他重要的概念,例如對於超媒體的有力支援等。建議對 REST 非常感興趣的讀者去讀一下 Fielding 的博士論文中文版《架構風格與基於網路應用軟體的架構設計》。REST 理論有力地指導了 HTTP/1.1 的設計,也確保了後續 HTTP 協議沿著正確的方向發展,包括從舊版本到新版本的平滑升級。

儘管 HTTP/1.1 取得了輝煌的成就,但 HTTP/1.1 從 1998 年底釋出之後,已經十幾年都沒有更新了,它的很多方面已經難以跟上時代發展的要求。特別是移動網際網路普及之後, HTTP/1.1 在效能方面的瓶頸越來越突出,以至於有些公司研發出五花八門的私有二進位制 RPC 協議來解決效能問題。這些應用連 HTTP 都不用了,還自稱是“Web 應用”,這實在是掛羊頭賣狗肉。改進 HTTP 以便跟上新時代 Web 發展的需要,已經迫在眉睫。經過各方參與者幾年的不懈努力之後,HTTP/2 終於在 2015 年正式釋出了。HTTP/2 是一次非常棒的升級,它在繼續遵循 REST 架構風格的前提下,在效能方面取得了巨大的提升。

目前距離 HTTP/2 正式釋出已經過去了兩年時間,主流的 Web 伺服器、瀏覽器、HTTP 客戶端工具、開發庫(例如最新的 JDK9)已經能夠很好地支援 HTTP/2。可以預見,無論是國內還是國外,2018 年都會是 HTTP/2 迅速普及的一年。國內有很多從事 Web 開發、測試、運維的工程師對 HTTP/2 非常感興趣,但是苦於缺乏詳細的圖書文件,難以開展學習。《HTTP/2 基礎教程》正是這個領域的最佳圖書。這本書雖然不厚,但是滿滿的都是乾貨,實戰性非常棒。感謝本書的譯者羅正龍、鄭維智,審校者餘晟的辛勤工作,在短時間內將這本高質量的圖書貢獻給中國的讀者。正如本文開頭所說的,HTTP 的重要性再怎麼強調也不為過。《HTTP/2 基礎教程》這本書值得所有軟體開發者擁有,作為自己的案頭常備圖書。

——李錕,Web 架構師,Web 開發老兵

截至 2009 年,HTTP/1.1 面世已經超過 10 年了,並且無可爭議的是,它依然是網際網路上最受歡迎的應用層協議。這是因為它不僅用來瀏覽網頁,還是很多其他東西的參考協議。它上手簡單、實現容易,並被廣大的開發者和運維工程師所理解,因此積累了很多優勢,成為了無可替代的協議。一些人甚至開始說,HTTP 形成了網際網路架構經典沙漏模型的“第二腰”。

儘管如此,HTTP 還是與時代脫節了。Web 如今已經發生了翻天覆地的變化,它的需求給 HTTP 協議造成了巨大的壓力。現在,載入一個網頁通常包含好幾百個請求,總體開銷在拖慢 Web。這就催生了一個新的行業,專治 Web 效能問題——Web 效能優化。

HTTP 社群很清楚這些問題,但是並沒有授權大家修復它們。過往的努力,如 HTTP-NG,已經失敗了。沒有來自 Web 瀏覽器和伺服器的強力支援的提案就動手的做法,看起來並不妙。這反映在 HTTP 工作組當時的綱領中,它說:

工作組不得制定 HTTP 的新版本,也不得給 HTTP 新增新功能。

相反,我們的使命是闡述清楚 HTTP 的規範,並且(至少對我而言)重建一個 HTTP 實現者的強大社群。

也就是說,還有人想實現 HTTP 語義的更高效表達,像 Roy Fielding 的 WAKA 提案 {1[https://tools.ietf.org/agenda/83/slides/slides-83-httpbis-5.pdf]}(很不幸,從未完成)和基於 SCTP{2[https://tools.ietf.org/html/draft-natarajan-http-over-sctp-00]} 的 HTTP(主要在特拉華大學)。

去 Google 做了一次有關上面這些話題的分享後,我收到了 Mike Belshe 留給我的一張便條,問我們是否可以碰個面。我們在 Mountain View 的 Castro 大街上吃了晚飯,他說 Google 正要釋出 SPDY,替代 HTTP 協議。

SPDY 之所以不同,是因為 Mike 為 Chrome 瀏覽器工作,他和為 GFE(Google 的前端 Web 伺服器)工作的 Roberto Peon 是搭檔。他們控制著連線的兩端,因而可以快速迭代,並且他們可以在 Google 的超大流量上測試新的協議,因此能夠在大規模場景下驗證協議的設計。

整個晚飯時間我都感到發自內心的高興。他們在解決實際問題,並且已經測試過程式碼和資料。這些正是網際網路工程任務組(IETF)所推崇的。

然而,直到 2012 年,SPDY 才開始流行開來。Firefox 實現了該協議,然後是 Nginx 伺服器,接著是 Akamai。Netcraft 報告說,支援 SPDY 協議的網站資料激增。

顯然,新版本的 HTTP 協議引起了廣泛的關注。

2012 年 10 月,HTTP 工作組被授權釋出 HTTP/2,使用 SPDY 作為起點。之後的兩年間,來自各個公司和開源專案的代表在各地碰面討論這個新的協議,解決其中的問題,並確保彼此的實現能互相相容。

在這個過程中,我們有過意見不一致的時候,甚至也有過激烈的爭辯。但是,每個人所表現出的專業能力、合作意願和強烈信念仍然讓我印象深刻。這真是一支了不起的、讓人願意共事的團隊。

舉個例子,有時候大家一致認為,取得進展比為某人的觀點爭論一整天更重要,所以我們擲硬幣來做決定。有些人可能覺得這很瘋狂,但我覺得這反映出了成熟的態度和深邃的洞察力。

2014 年 12 月,在規定的截止日期 16 天后(這對標準制定的工作來講,已經很早了),我們向國際網際網路工程指導委員會(IESG)提交了 HTTP/2,申請批准。

大家都說,實踐才能出真知;對網際網路工程任務組來說,可執行的程式碼才能說明一切。我們很快就有了拿得出手的東西,並得到了所有主流瀏覽器、多數 Web 伺服器、CDN 和其他工具的支援。

HTTP/2 並不是完美的,但完美向來也不是我們的目標。我們的現實目標是化亂為治,並逐漸提升 Web 效能;遠景目標則是為確保可以釋出新版本的 HTTP 做好準備,這樣 Web 才不會受制於一份過時的協議。

從這個角度來看,我們已經成功了。當然,我們要做的還有很多。

——Mark Nottingham

Mark Nottingham 在 HTTP 工作組已經 10 多年了。對本書來說尤其有意義的是,當 HTTP/2 完成的時候,他擔任工作組主席。他現在是工作組負責 QUIC 的主席,也曾是 Akamai Foundry 團隊的一員。

前言

HTTP/2,簡稱 h2,是全球資訊網(World Wide Web)所使用的 HTTP 網路協議的一個重大修訂版本,其目的是提升載入 Web 內容時的感知效能。

自從 1999 年 HTTP/1.1(h1)通過以來,Web 發生了翻天覆地的變化。最早大小隻有幾千位元組、包含資源只有個位數、主要基於文字的網頁,如今已發展為平均大小超過 2MB{1[http://httparchive.org/trends.php?s=Top1000&minlabel=Oct+15+2015&maxlabel=Oct+1+2016]}、包含資源數平均為 140 的富媒體網站。然而,用來傳輸 Web 內容的 HTTP 協議這些年並沒有什麼變化。於是一個新的工種出現了:Web 效能專家,他們精於發掘變通辦法,在原有協議上提升網頁載入速度。大家對效能的期望也改變了——在 20 世紀 90 年代後期,大家願意為一個頁面等上 7 秒,而技術和市場調研公司 Forrester Research 在 2009 年的一項研究中發現,線上購物者期望單個頁面能在 2 秒內完成載入,其中很大一部分使用者會放棄載入時間超過 3 秒的頁面。近期 Google 的一項研究表明,甚至 400 毫秒(一眨眼的時間)的延遲,都可能降低人們的搜尋意願。

這就是 h2 誕生的原因——該協議可以更好地適應如今的複雜頁面,同時又不犧牲速度。 HTTP/2 的應用在不斷增多,因為越來越多的網站管理員意識到,他們可以藉此花很小的成本來提高他們網站的感知效能。

我們每天都在使用 h2——它支撐了若干最流行的網站,如 Facebook、Twitter、Google 和 Wikipedia——但很多人並不瞭解它。我們的目標是講解 h2 的原理及其效能優勢,這樣你就可以充分利用它。

本書目標讀者

不管你在工作中扮演什麼角色,只要你的工作涉及網站生命週期的任意部分,本書就會對你有所幫助。本書的目標讀者是網站開發和運維人員,以及那些正考慮要實現 h2 或者希望瞭解 h2 如何工作的人。

閱讀本書要求你熟悉 Web 瀏覽器、Web 伺服器、網站和 HTTP 協議的基礎知識。

本書涵蓋範圍

本書的目標是講解 h2,並幫你充分利用新版的 HTTP 協議。本書不是一份針對所有 h2 客戶端、伺服器、除錯工具、效能基準測試的全面指南。本書雖然是為不太熟悉 HTTP/2 的人而準備的,但專家沒準兒也會覺得這是份稱手的資源。

推薦資源

你可以瀏覽本書在 O'Reilly 網站上的頁面(http://shop.oreilly.com/product/0636920052326.do)獲取更多資訊。此外,我還推薦以下這些書。

  • 《高效能網站建設指南》,作者 Steve Souders,前端工程師的基礎知識。
  • 《高效能網站建設進階指南》,作者 Steve Souders,Web 開發者的效能最佳實踐。
  • 《Web 效能權威指南》{2[該書已由人民郵電出版社出版,書號:9787115349101。——編者注]},作者 Ilya Grigorik,快速上手指南,關於各種網路、傳輸協議、應用協議,以及瀏覽器中可用的 API。
  • 《WebPageTest 應用指南》,作者 Rick Viscomi、Andy Davies 和 Marcel Duran,介紹 WebPagetest 的基礎和高階應用,WebPagetest 是一個用以優化網站的免費效能檢測工具。
  • High Performance Mobile Web{3[該書中文版即將由人民郵電出版社出版,暫名《高效能移動 Web 開發》,參見 http://www.ituring.com.cn/book/1911。——編者注]},作者 Maximiliano Firtman,介紹如何優化移動網站和移動應用效能。
  • http2 explainedhttps://daniel.haxx.se/http2/),作者 Daniel Stenberg。

排版約定

本書使用了下列排版約定。

  • 黑體

    表示新術語或重點強調的內容。

  • 等寬字型(constant width)

    表示程式片段,以及正文中出現的變數、函式名、資料庫、資料型別、環境變數、語句和關鍵字等。

  • 加粗等寬字型(constant width bold

    表示應該由使用者輸入的命令或其他文字。

  • 等寬斜體(constant width italic

    表示應該由使用者輸入的值或根據上下文確定的值替換的文字。

使用程式碼示例

補充材料(程式碼示例、練習等)可以從 https://github.com/oreillymedia/learning-http2 下載。

本書是要幫你完成工作的。一般來說,如果本書提供了示例程式碼,你可以把它用在你的程式或文件中。除非你使用了很大一部分程式碼,否則無需聯絡我們獲得許可。比如,用本書的幾個程式碼片段寫一個程式就無需獲得許可,銷售或分發 O'Reilly 圖書的示例光碟則需要獲得許可;引用本書中的示例程式碼回答問題無需獲得許可,將書中大量的程式碼放到你的產品文件中則需要獲得許可。

我們很希望但並不強制要求你在引用本書內容時加上引用說明。引用說明一般包括書名、作者、出版社和 ISBN。比如:“Learning HTTP/2 by Stephen Ludin and Javier Garza (O'Reilly). Copyright 2017 Stephen Ludin and Javier Garza, 978-1-491-96244-2.”

如果你覺得自己對示例程式碼的用法超出了上述許可的範圍,歡迎你通過 [email protected] 與我們聯絡。

O'Reilly Safari

{40%}

Safari(前身為 Safari Books Online)是為企業、政府、教育機構和個人提供的會員制的培訓和參考平臺。

會員可以觀看和收聽來自 250 多家出版商的上千種圖書、培訓視訊、學習路徑、互動教程和推薦歌單。這些出版商包括 O'Reilly Media、Harvard Business Review、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Adobe、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones & Bartlett、Course Technology,等等。

欲知更多資訊,請訪問 https://www.safaribooksonline.com/

聯絡我們

請把對本書的評價和問題發給出版社。美國:

  O'Reilly Media, Inc.

  1005 Gravenstein Highway North

  Sebastopol, CA 95472

中國:

  北京市西城區西直門南大街 2 號成銘大廈 C 座 807 室(100035)

  奧萊利技術諮詢(北京)有限公司

O'Reilly 的每一本書都有專屬網頁,你可以在那兒找到本書的相關資訊,包括勘誤表、示例程式碼以及其他資訊。本書的網站地址是:http://shop.oreilly.com/product/0636920052326.do

對於本書的評論和技術性問題,請傳送電子郵件到:[email protected]

要了解更多 O'Reilly 圖書、培訓課程、會議和新聞的資訊,請訪問以下網站:

  http://www.oreilly.com

我們在 Facebook 的地址如下:http://facebook.com/oreilly

請關注我們的 Twitter 動態:http://twitter.com/oreillymedia

我們的 YouTube 視訊地址如下:http://www.youtube.com/oreillymedia

致謝

我們要感謝 Akamai 的 h2 核心團隊和 Moritz Steiner(Akamai 的研究員,也是 Foundry 團隊的一員,與 Stephen 共同撰寫了幾篇有關 h2 的論文);Pierre Lermant(感謝他的幽默和對細節的關注,也感謝他審閱本書並貢獻了部分內容);Martin Flack(也是 Akamai Foundry 團隊的一員,時常會提出頗具啟發意義的 Lisp 實現);Jeff Zitomer(感謝他的支援、鼓勵,以及富有感染力的微笑);Mark Nottinghan(感謝他對 h2 協議的貢獻);Pat Meenan(感謝他為 Webpagetest.org 做出的數不清的貢獻,這可能是測試 Web 效能最棒的免費工具了);Andy Davies(本書中廣泛使用的工具 WebPagetest Bulk Tester 就是他開發的)。

感謝本書的編輯 Brian Anderson、Virginia Wilson 和 Dawn Schanafelt,有了他們,一切才變得簡單。還要感謝為本書提供反饋和意見的每一位 h2 專家:Ilya Grigorik、Patrick McManus、Daniel Stenberg、Ragnar Lonn、Colin Bendell、Mark Nottingham、Hooman Beheshti、Rob Trace、Tim Kadlec 以及 Pat Meenan。

Javier Garza

首先,我要感謝妻子 Tina 的支援、鼓勵和理解。感謝我的孩子們(Keona、Diego 和 Lani),在我花費無數個夜晚和週末以及大段的暑假時間寫作本書的時候,他們一如既往地愛著我。感謝我的經理 Aditi 和 Austin,在工作非常緊張的情況下,依然鼓勵我寫作本書。

Stephen Ludin

我最想感謝的是身邊人的耐心。我家人的耐心——感謝 Sarah、Tomas 和 Liam 容忍我以及令人抓狂的出版過程。在寫作過程中,他們的支援是無價的。感謝我的僱主 Akamai 允許我在工作非常忙的時候寫這本書。感謝 O'Reilly 工作人員的耐心,他們非常理解 O'Reilly 作者平日裡的工作已經非常繁忙,只能利用零散的碎片時間來寫作。最後,感謝我父母的耐心,他們的付出我無以為報,唯有珍惜當下——在我 9 歲的時候,父親帶回家一臺 Atari 800,那時他是否知道,這使我從此走上了一條路,並且如今依然奮力前行。

電子版

掃描如下二維碼,即可購買本書電子版。

{%}

第1章 HTTP 進化史
第2章 HTTP/2 快速入門
第3章 Web 優化“黑魔法”的動機與方式
第4章 HTTP/2 遷移
第5章 HTTP/2 協議
第6章 HTTP/2 效能
第7章 HTTP/2 實現
第8章 HTTP/2 除錯
第9章 展望未來
附錄 A HTTP/2 幀
附錄 B 工具引用

閱讀全文: http://gitbook.cn/gitchat/geekbook/5c0e2207edba1b6834591eeb