澀川喜規(guī)(作者) 現(xiàn)就職于日本Future Corporation。工作中經(jīng)常使用Python、C++、JavaScript、Golang,對Web有濃厚興趣。著有《Go系統(tǒng)編程》、Mithril、《Mobage核心技術(shù)》(合著)等,同時也是The Art of Community的日文版譯者。侯振龍(譯者)軟件開發(fā)工程師,日語一級,具有十余年對日軟件開發(fā)經(jīng)驗(yàn),對HTTP通信技術(shù)非常感興趣。
圖書目錄
前言 xix
第 1章 HTTP/1.0的語法:4個基本元素 1
1.1 HTTP的歷史 1
1.2 嘗試HTTP/0.9能夠?qū)崿F(xiàn)的處理 6
1.3 從HTTP/0.9到HTTP/1.0的發(fā)展過程 8
1.4 HTTP的祖先(1):電子郵件 9
1.4.1 發(fā)送首部 11
1.4.2 接收首部 13
1.4.3 MIME類型 14
1.4.4 Content-Type與安全性 15
1.4.5 HTTP與電子郵件的區(qū)別 16
1.5 HTTP的祖先(2):新聞組 16
1.5.1 方法 17
1.5.2 狀態(tài)碼 18
1.6 重定向 20
1.7 URL 22
1.7.1 URL的結(jié)構(gòu) 23
1.7.2 URL與國際化 25
1.7.3 標(biāo)準(zhǔn)URL 25
1.7.4 協(xié)議相對URL 26
1.8 主體 27
1.9 本章小結(jié) 29
第 2章 HTTP/1.0的語義:瀏覽器基本功能的背后 31
2.1 使用x-www-form-urlencoded發(fā)送表單 31
2.2 使用multipart/form-data發(fā)送文件 33
2.3 使用表單進(jìn)行重定向 36
2.4 內(nèi)容協(xié)商 37
2.4.1 確定文件類型 37
2.4.2 確定顯示語言 37
2.4.3 確定字符集 38
2.4.4 使用壓縮提高通信速度 39
2.5 Cookie 40
2.5.1 Cookie的分類 43
2.5.2 Cookie的錯誤用法 43
2.5.3 對Cookie加以限制 44
2.5.4 源 45
2.5.5 SameSite屬性 46
2.6 認(rèn)證和會話 46
2.6.1 BASIC認(rèn)證和Digest認(rèn)證 47
2.6.2 使用Cookie進(jìn)行會話管理 49
2.6.3 使用帶簽名的Cookie保存會話數(shù)據(jù) 50
2.7 代理 50
2.8 緩存 51
2.8.1 基于更新時間的緩存 52
2.8.2 Expires首部 53
2.8.3 Pragma:no-cache 55
2.8.4 不執(zhí)行緩存的條件 55
2.8.5 添加ETag 55
2.8.6 Cache-Control 57
2.8.7 Vary 60
2.9 Referer 61
2.10 面向搜索引擎的內(nèi)容訪問控制 63
2.10.1 robots.txt 63
2.10.2 robots.txt與訴訟案例 64
2.10.3 站點(diǎn)地圖 65
2.11 用戶代理 65
2.12 本章小結(jié) 67
第3章 使用Go語言實(shí)現(xiàn)HTTP/1.0客戶端 69
3.1 為何使用Go語言 69
3.2 Go語言的API結(jié)構(gòu) 70
3.3 本章的主要內(nèi)容 71
3.4 GET方法的發(fā)送及主體、狀態(tài)碼和首部的接收 71
3.5 使用GET方法發(fā)送查詢 75
3.6 使用HEAD方法獲取首部 76
3.7 使用POST方法發(fā)送x-www-form-urlencoded形式的表單 77
3.8 使用POST方法發(fā)送任意主體 78
3.9 使用multipart/form-data形式發(fā)送文件 79
3.10 Cookie的發(fā)送和接收 82
3.11 使用代理 84
3.12 訪問文件系統(tǒng) 86
3.13 發(fā)送任意方法 87
3.14 發(fā)送首部 88
3.15 超時 89
3.16 國際化域名 90
3.17 本章小結(jié) 90
第4章 HTTP/1.1的語法:追求高速化和安全性 93
4.1 通過Keep-Alive提高通信速度 94
4.2 TLS 97
4.2.1 散列函數(shù) 99
4.2.2 公共密鑰加密、公開密鑰加密和數(shù)字簽名 101
4.2.3 密鑰交換 102
4.2.4 區(qū)分使用公共密鑰方式和公開密鑰方式的理由 104
4.2.5 TLS的通信步驟 106
4.2.6 加密強(qiáng)度 110
4.2.7 密碼套件 111
4.2.8 選擇協(xié)議 113
4.2.9 TLS保護(hù)的內(nèi)容 114
4.2.10 TLS時代 115
4.3 PUT方法和DELETE方法的標(biāo)準(zhǔn)化 115
4.4 添加OPTIONS方法、TRACE方法和CONNECT方法 116
4.4.1 OPTIONS 116
4.4.2 TRACE(TRACK) 117
4.4.3 CONNECT 118
4.5 協(xié)議升級 119
4.5.1 客戶端請求升級 120
4.5.2 服務(wù)器請求升級 120
4.5.3 向TLS升級時的問題點(diǎn) 121
4.6 支持虛擬主機(jī) 121
4.7 Chunk 122
4.8 確認(rèn)主體發(fā)送 124
4.9 Data URI方案 124
4.10 本章小結(jié) 125
第5章 HTTP/1.1的語義:HTTP的擴(kuò)展功能 127
5.1 下載文件并保存到本地 127
5.1.1 保存文件的Content-Disposition首部 128
5.1.2 默認(rèn)文件名使用中文 128
5.1.3 在瀏覽器中顯示 128
5.2 暫停和恢復(fù)下載 129
5.2.1 指定多個范圍進(jìn)行下載 131
5.2.2 并行下載 132
5.3 XMLHttpRequest 132
5.3.1 XMLHttpRequest的誕生 133
5.3.2 XMLHttpRequest與瀏覽器的HTTP請求的區(qū)別 134
5.3.3 Comet 134
5.3.4 XMLHttpRequest的安全性 136
5.4 Geo-Location 137
5.4.1 客戶端獲取位置的方法 137
5.4.2 服務(wù)器推測客戶端位置的方法 138
5.5 X-Powered-By首部 139
5.6 遠(yuǎn)程過程調(diào)用 141
5.6.1 XML-RPC 141
5.6.2 SOAP 143
5.6.3 JSON-RPC 145
5.7 WebDAV 147
5.8 網(wǎng)站間共用的認(rèn)證和授權(quán)平臺 148
5.8.1 單點(diǎn)登錄 149
5.8.2 Kerberos認(rèn)證 149
5.8.3 SAML 150
5.8.4 OpenID 151
5.8.5 OpenSocial 153
5.8.6 OAuth 154
5.8.7 OpenID Connect 158
5.8.8 JWT 159
5.8.9 實(shí)際服務(wù)對認(rèn)證系統(tǒng)提供支持時的陷阱 160
5.9 本章小結(jié) 161
第6章 使用Go語言實(shí)現(xiàn)HTTP/1.1客戶端 163
6.1 Keep-Alive 163
6.2 TLS 164
6.2.1 創(chuàng)建證書 164
6.2.2 HTTPS服務(wù)器和注冊證書 168
6.2.3 使用Go語言實(shí)現(xiàn)客戶端 170
6.2.4 客戶端證書 172
6.3 協(xié)議升級 175
6.3.1 服務(wù)器代碼 175
6.3.2 客戶端代碼 176
6.4 Chunk 178
6.4.1 服務(wù)器發(fā)送數(shù)據(jù) 179
6.4.2 客戶端依次接收數(shù)據(jù)(簡易版) 180
6.4.3 客戶端依次接收數(shù)據(jù)(完整版) 181
6.5 遠(yuǎn)程過程調(diào)用 183
6.6 本章小結(jié) 185
第7章 HTTP/2和HTTP/3的語法:重新定義協(xié)議 187
7.1 HTTP/2和HTTP/3中未變化的內(nèi)容 187
7.2 HTTP/2 188
7.2.1 SPDY 188
7.2.2 HTTP/2的改進(jìn) 189
7.2.3 使用流實(shí)現(xiàn)高速通信 190
7.2.4 HTTP/2的應(yīng)用程序?qū)? 195
7.2.5 流量控制 196
7.2.6 服務(wù)器推送 197
7.2.7 使用預(yù)加載優(yōu)化資源獲取操作 197
7.2.8 使用HPACK壓縮首部 200
7.3 HTTP/3 200
7.3.1 QUIC 201
7.3.2 向HTTP/3邁進(jìn) 201
7.3.3 HTTP/3的層 201
7.3.4 使用HTTP Alternative Services進(jìn)行升級 203
7.4 用于JavaScript的新的通信API 205
7.4.1 Fetch API 205
7.4.2 Server-Sent Events 206
7.4.3 WebSocket 207
7.5 WebRTC 210
7.5.1 WebRTC的用例(1) 211
7.5.2 WebRTC的用例(2) 213
7.5.3 RFC之外的用例 214
7.5.4 RTCPeerConnection 214
7.5.5 媒體通道和getUserMedia 215
7.5.6 RTCDataChannel 216
7.6 HTTP Web推送 217
7.6.1 瀏覽器向推送服務(wù)申請訂閱 219
7.6.2 應(yīng)用程序服務(wù)器向推送服務(wù)投遞消息 220
7.6.3 瀏覽器接收推送消息 220
7.6.4 設(shè)置緊急度 221
7.7 本章小結(jié) 221
第8章 HTTP/2的語義:新的用例 223
8.1 響應(yīng)式設(shè)計(jì) 223
8.2 語義網(wǎng) 225
8.2.1 RDF 225
8.2.2 都柏林核心 226
8.2.3 RSS 226
8.2.4 微格式 226
8.2.5 微數(shù)據(jù) 227
8.2.6 RDF的逆襲 227
8.2.7 RDF系列之外的數(shù)據(jù) 228
8.3 開放內(nèi)容協(xié)議 231
8.4 QR碼 234
8.5 AMP 236
8.6 通過移動應(yīng)用程序使瀏覽環(huán)境多樣化 238
8.6.1 iOS的DeepLink 239
8.6.2 Android的DeepLink 239
8.7 使用HTTP Live Streaming播放視頻流 240
8.7.1 HLS的視頻標(biāo)簽 240
8.7.2 Master的.m3u8文件 240
8.7.3 字幕的.m3u8文件 241
8.7.4 視頻文件 242
8.7.5 HLS的優(yōu)點(diǎn)和缺點(diǎn) 243
8.7.6 HLS出現(xiàn)前后的視頻流相關(guān)的歷史 244
8.8 使用MPEG-DASH播放視頻流 244
8.8.1 MPEG-DASH與HLS在播放方法上的區(qū)別 245
8.8.2 Media Presentation Description文件的結(jié)構(gòu) 245