书籍详情
详解HTTP:协议基础与Go语言实现
作者:[日]涩川喜规
出版社:人民邮电出版社
出版时间:2022-08-01
ISBN:9787115593221
定价:¥129.80
购买这本书可以去
内容简介
本书沿着HTTP/1.0、HTTP/1.1、HTTP/2和HTTP/3的发展历史,从方法和路径、首部、主体、状态码这4个HTTP的基本元素讲起,详细介绍了浏览器内部的动作、浏览器与服务器进行交互的方法等。针对各个版本的HTTP,分别从语法和语义两个角度,通俗易懂地讲解了HTTP的协议规范,并结合用Go语言实现的具体的客户端代码示例,为读者阐明了HTTP是如何通过功能设计和扩展来实现高速化和安全性目标的。 本书内容丰富,网罗了与HTTP相关的各种技术,包括简单的HTTP访问、表单的发送、缓存和Cookie的控制、Keep-Alive、SSL/TLS、协议升级、服务器推送、Server-Sent Events、WebSocket、DNS、CDN、RESTful API、Web应用程序和安全方面的内容等。本书适合Web开发工程师,以及对HTTP协议感兴趣的各层次读者阅读。
作者简介
涩川喜规(作者) 现就职于日本Future Corporation。工作中经常使用Python、C++、JavaScript、Golang,对Web有浓厚兴趣。著有《Go系统编程》、Mithril、《Mobage核心技术》(合著)等,同时也是The Art of Community的日文版译者。侯振龙(译者)软件开发工程师,日语一级,具有十余年对日软件开发经验,对HTTP通信技术非常感兴趣。
目录
前言 xix
第 1章 HTTP/1.0的语法:4个基本元素 1
1.1 HTTP的历史 1
1.2 尝试HTTP/0.9能够实现的处理 6
1.3 从HTTP/0.9到HTTP/1.0的发展过程 8
1.4 HTTP的祖先(1):电子邮件 9
1.4.1 发送首部 11
1.4.2 接收首部 13
1.4.3 MIME类型 14
1.4.4 Content-Type与安全性 15
1.4.5 HTTP与电子邮件的区别 16
1.5 HTTP的祖先(2):新闻组 16
1.5.1 方法 17
1.5.2 状态码 18
1.6 重定向 20
1.7 URL 22
1.7.1 URL的结构 23
1.7.2 URL与国际化 25
1.7.3 标准URL 25
1.7.4 协议相对URL 26
1.8 主体 27
1.9 本章小结 29
第 2章 HTTP/1.0的语义:浏览器基本功能的背后 31
2.1 使用x-www-form-urlencoded发送表单 31
2.2 使用multipart/form-data发送文件 33
2.3 使用表单进行重定向 36
2.4 内容协商 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 认证和会话 46
2.6.1 BASIC认证和Digest认证 47
2.6.2 使用Cookie进行会话管理 49
2.6.3 使用带签名的Cookie保存会话数据 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 不执行缓存的条件 55
2.8.5 添加ETag 55
2.8.6 Cache-Control 57
2.8.7 Vary 60
2.9 Referer 61
2.10 面向搜索引擎的内容访问控制 63
2.10.1 robots.txt 63
2.10.2 robots.txt与诉讼案例 64
2.10.3 站点地图 65
2.11 用户代理 65
2.12 本章小结 67
第3章 使用Go语言实现HTTP/1.0客户端 69
3.1 为何使用Go语言 69
3.2 Go语言的API结构 70
3.3 本章的主要内容 71
3.4 GET方法的发送及主体、状态码和首部的接收 71
3.5 使用GET方法发送查询 75
3.6 使用HEAD方法获取首部 76
3.7 使用POST方法发送x-www-form-urlencoded形式的表单 77
3.8 使用POST方法发送任意主体 78
3.9 使用multipart/form-data形式发送文件 79
3.10 Cookie的发送和接收 82
3.11 使用代理 84
3.12 访问文件系统 86
3.13 发送任意方法 87
3.14 发送首部 88
3.15 超时 89
3.16 国际化域名 90
3.17 本章小结 90
第4章 HTTP/1.1的语法:追求高速化和安全性 93
4.1 通过Keep-Alive提高通信速度 94
4.2 TLS 97
4.2.1 散列函数 99
4.2.2 公共密钥加密、公开密钥加密和数字签名 101
4.2.3 密钥交换 102
4.2.4 区分使用公共密钥方式和公开密钥方式的理由 104
4.2.5 TLS的通信步骤 106
4.2.6 加密强度 110
4.2.7 密码套件 111
4.2.8 选择协议 113
4.2.9 TLS保护的内容 114
4.2.10 TLS时代 115
4.3 PUT方法和DELETE方法的标准化 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 协议升级 119
4.5.1 客户端请求升级 120
4.5.2 服务器请求升级 120
4.5.3 向TLS升级时的问题点 121
4.6 支持虚拟主机 121
4.7 Chunk 122
4.8 确认主体发送 124
4.9 Data URI方案 124
4.10 本章小结 125
第5章 HTTP/1.1的语义:HTTP的扩展功能 127
5.1 下载文件并保存到本地 127
5.1.1 保存文件的Content-Disposition首部 128
5.1.2 默认文件名使用中文 128
5.1.3 在浏览器中显示 128
5.2 暂停和恢复下载 129
5.2.1 指定多个范围进行下载 131
5.2.2 并行下载 132
5.3 XMLHttpRequest 132
5.3.1 XMLHttpRequest的诞生 133
5.3.2 XMLHttpRequest与浏览器的HTTP请求的区别 134
5.3.3 Comet 134
5.3.4 XMLHttpRequest的安全性 136
5.4 Geo-Location 137
5.4.1 客户端获取位置的方法 137
5.4.2 服务器推测客户端位置的方法 138
5.5 X-Powered-By首部 139
5.6 远程过程调用 141
5.6.1 XML-RPC 141
5.6.2 SOAP 143
5.6.3 JSON-RPC 145
5.7 WebDAV 147
5.8 网站间共用的认证和授权平台 148
5.8.1 单点登录 149
5.8.2 Kerberos认证 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 实际服务对认证系统提供支持时的陷阱 160
5.9 本章小结 161
第6章 使用Go语言实现HTTP/1.1客户端 163
6.1 Keep-Alive 163
6.2 TLS 164
6.2.1 创建证书 164
6.2.2 HTTPS服务器和注册证书 168
6.2.3 使用Go语言实现客户端 170
6.2.4 客户端证书 172
6.3 协议升级 175
6.3.1 服务器代码 175
6.3.2 客户端代码 176
6.4 Chunk 178
6.4.1 服务器发送数据 179
6.4.2 客户端依次接收数据(简易版) 180
6.4.3 客户端依次接收数据(完整版) 181
6.5 远程过程调用 183
6.6 本章小结 185
第7章 HTTP/2和HTTP/3的语法:重新定义协议 187
7.1 HTTP/2和HTTP/3中未变化的内容 187
7.2 HTTP/2 188
7.2.1 SPDY 188
7.2.2 HTTP/2的改进 189
7.2.3 使用流实现高速通信 190
7.2.4 HTTP/2的应用程序层 195
7.2.5 流量控制 196
7.2.6 服务器推送 197
7.2.7 使用预加载优化资源获取操作 197
7.2.8 使用HPACK压缩首部 200
7.3 HTTP/3 200
7.3.1 QUIC 201
7.3.2 向HTTP/3迈进 201
7.3.3 HTTP/3的层 201
7.3.4 使用HTTP Alternative Services进行升级 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 浏览器向推送服务申请订阅 219
7.6.2 应用程序服务器向推送服务投递消息 220
7.6.3 浏览器接收推送消息 220
7.6.4 设置紧急度 221
7.7 本章小结 221
第8章 HTTP/2的语义:新的用例 223
8.1 响应式设计 223
8.2 语义网 225
8.2.1 RDF 225
8.2.2 都柏林核心 226
8.2.3 RSS 226
8.2.4 微格式 226
8.2.5 微数据 227
8.2.6 RDF的逆袭 227
8.2.7 RDF系列之外的数据 228
8.3 开放内容协议 231
8.4 QR码 234
8.5 AMP 236
8.6 通过移动应用程序使浏览环境多样化 238
8.6.1 iOS的DeepLink 239
8.6.2 Android的DeepLink 239
8.7 使用HTTP Live Streaming播放视频流 240
8.7.1 HLS的视频标签 240
8.7.2 Master的.m3u8文件 240
8.7.3 字幕的.m3u8文件 241
8.7.4 视频文件 242
8.7.5 HLS的优点和缺点 243
8.7.6 HLS出现前后的视频流相关的历史 244
8.8 使用MPEG-DASH播放视频流 244
8.8.1 MPEG-DASH与HLS在播放方法上的区别 245
8.8.2 Media Presentation Description文件的结构 245
8.9 CMAF 248
8.10 本章小结 248
第9章 使用Go语言实现HTTP/2、HTML5的协议 251
9.1 HTTP/2 251
9.2 HTTP/2的服务器推送 253
9.3 Server-Sent Events 257
9.3.1 服务器的实现 257
9.3.2 客户端的实现 260
9.4 WebSocket 263
9.4.1 服务器的实现 263
9.4.2 客户端的实现 265
9.4.3 房间的实现 265
9.5 本章小结 266
第 10章 从客户端的角度来看RESTful API 269
10.1 RESTful API 269
10.1.1 RESTful API和RPC API的区别 270
10.1.2 Web API和事务 270
10.1.3 HATEOAS 272
10.1.4 RESTful和REST-ish 273
10.2 方法 274
10.3 状态码 275
10.4 主体 277
10.5 查看实际的RESTful API(PAY.JP的示例) 277
10.6 查看实际的RESTful API(GitHub的示例) 279
10.6.1 GitHub的授权 279
10.6.2 获取信息的API访问 283
10.6.3 刷新信息的API访问 284
10.7 访问RESTful API时的具体问题 286
10.7.1 超时 286
10.7.2 访问次数的限制 286
10.8 本章小结 287
第 11章 使用JavaScript实现浏览器的动态HTTP请求 289
11.1 浏览器的HTTP与生命周期 289
11.2 XMLHttpRequest 290
11.3 Fetch API 292
11.3.1 Fetch API的基础内容 292
11.3.2 Fetch的选项 293
11.3.3 创建和解析查询参数 294
11.3.4 发送主体 295
11.3.5 只有Fetch API可以执行的操作 297
11.3.6 使用Fetch API时常见的错误 299
11.3.7 在浏览器之外的JavaScript环境中使用Fetch API 300
11.4 使用JavaScript重新加载浏览器时的HTTP访问 300
11.5 下载文件 300
11.6 Server-Sent Events 302
11.7 WebSocket 303
11.8 本章小结 304
第 12章 Web应用程序的基础知识 307
12.1 术语 307
12.2 基本流程 308
12.3 Web应用程序的请求的生命周期 310
12.3.1 HTTP请求 310
12.3.2 会话 311
12.4 Web应用程序的动作模式 314
12.4.1 第 1代:服务端渲染 314
12.4.2 第 2代:Ajax 315
12.4.3 第3代:单页面应用 317
12.4.4 第3.5代:单页面应用 + 服务端渲染 318
12.5 基础设施的结构 319
12.5.1 开发环境 319
12.5.2 实际开发环境的基本结构 321
12.6 基础设施的其他形式 324
12.6.1 PaaS 324
12.6.2 Serverless 325
12.6.3 微服务 325
12.7 Web应用程序的内部层次结构 326
12.8 Web应用程序的组成元素的详细分类 329
12.9 Web API的设计:区分使用数据容器 330
12.10 今后不再使用的技术 331
12.10.1 CGI 331
12.10.2 RIA 332
12.11 本章小结 333
第 13章 云时代的HTTP:Web的各种强化技术 335
13.1 更大规模的Web系统的结构 335
13.2 DNS 336
13.2.1 DNS预查询 337
13.2.2 DNS服务器的缓存 338
13.2.3 DNS客户端的缓存 339
13.2.4 DNS负载均衡 339
13.2.5 DNS引流 339
13.2.6 使用SRV记录的服务发现 340
13.3 反向代理 341
13.4 CDN 346
13.4.1 提高通信本身的速度和稳定性 346
13.4.2 作为靠近用户的高级代理服务器 347
13.4.3 CDN的注意事项 349
13.5 负载均衡器 350
13.6 API网关 351
13.7 健康检查 351
13.7.1 Liveness Prove 351
13.7.2 Readiness Prove 352
13.8 VPC 352
13.9 微服务与认证 353
13.10 分布式追踪 354
13.10.1 向子任务传递追踪信息的HTTP首部 355
13.10.2 向浏览器传递服务器内部的时间信息的HTTP首部 356
13.11 其他技术元素 357
13.12 本章小结 358
第 14章 安全:守护浏览器的HTTP功能 359
14.1 传统类型的攻击 359
14.2 针对浏览器的攻击的特征 360
14.3 跨站脚本攻击 361
14.3.1 设置Cookie以防止泄露 362
14.3.2 Content-Security-Policy首部 362
14.3.3 Content-Security-Policy和JavaScript模板引擎 365
14.3.4 Mixed Content的应对策略 366
14.3.5 CORS 366
14.4 中间人攻击 370
14.5 会话劫持 371
14.5.1 旧的会话管理和会话固定攻击 372
14.5.2 Cookie注入 372
14.6 跨站请求伪造 373
14.6.1 应对跨站请求伪造的令牌 373
14.6.2 SameSite属性 374
14.7 点击劫持 374
14.8 列表型账户入侵 375
14.8.1 密码的保存:不保存明文密码 376
14.8.2 保存密码时使用的各种散列函数 377
14.8.3 密码的日志掩码化 377
14.8.4 多因素身份验证 378
14.8.5 TOTP算法 378
14.8.6 WebAuthn 380
14.8.7 通知用户别处的登录 380
14.9 注入存在漏洞的代码 381
14.10 面向Web应用程序的安全指南 382
14.11 Web广告和安全 382
14.11.1 第三方Cookie 383
14.11.2 Cookie以外的代替手段 384
14.11.3 Google Analytics 384
14.11.4 在不确定用户的情况下进行推测(Finger Print) 385
14.12 本章小结 386
附 录 387
A.1 状态码一览表 387
A.1.1 1字头(信息) 387
A.1.2 2字头(成功) 388
A.1.3 3字头(重定向) 388
A.1.4 4字头(客户端错误) 389
A.1.5 5字头(服务器错误) 390
A.2 首部字段一览表 391
A.3 Internet Explorer与Content-Security-Policy首部 396
A.3.1 X-Content-Security-Policy首部 397
A.3.2 X-XSS-Protection首部 397
A.3.3 X-Frame-Options首部 397
A.4 使用Go语言进行JSON解析 398
A.4.1 使用Go语言的结构体标签进行JSON解析 398
A.4.2 判断值到底是省略了,还是为0 400
A.4.3 想要执行特殊类型转换的情况 401
A.5 JSON相关的应用话题 403
A.5.1 在输出时对输出内容进行加工 403
A.5.2 类型因情况而改变的JSON的解析 404
A.5.3 转换为通用的数据类型 406
A.5.4 JSON Schema 407
后记 411
第 1章 HTTP/1.0的语法:4个基本元素 1
1.1 HTTP的历史 1
1.2 尝试HTTP/0.9能够实现的处理 6
1.3 从HTTP/0.9到HTTP/1.0的发展过程 8
1.4 HTTP的祖先(1):电子邮件 9
1.4.1 发送首部 11
1.4.2 接收首部 13
1.4.3 MIME类型 14
1.4.4 Content-Type与安全性 15
1.4.5 HTTP与电子邮件的区别 16
1.5 HTTP的祖先(2):新闻组 16
1.5.1 方法 17
1.5.2 状态码 18
1.6 重定向 20
1.7 URL 22
1.7.1 URL的结构 23
1.7.2 URL与国际化 25
1.7.3 标准URL 25
1.7.4 协议相对URL 26
1.8 主体 27
1.9 本章小结 29
第 2章 HTTP/1.0的语义:浏览器基本功能的背后 31
2.1 使用x-www-form-urlencoded发送表单 31
2.2 使用multipart/form-data发送文件 33
2.3 使用表单进行重定向 36
2.4 内容协商 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 认证和会话 46
2.6.1 BASIC认证和Digest认证 47
2.6.2 使用Cookie进行会话管理 49
2.6.3 使用带签名的Cookie保存会话数据 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 不执行缓存的条件 55
2.8.5 添加ETag 55
2.8.6 Cache-Control 57
2.8.7 Vary 60
2.9 Referer 61
2.10 面向搜索引擎的内容访问控制 63
2.10.1 robots.txt 63
2.10.2 robots.txt与诉讼案例 64
2.10.3 站点地图 65
2.11 用户代理 65
2.12 本章小结 67
第3章 使用Go语言实现HTTP/1.0客户端 69
3.1 为何使用Go语言 69
3.2 Go语言的API结构 70
3.3 本章的主要内容 71
3.4 GET方法的发送及主体、状态码和首部的接收 71
3.5 使用GET方法发送查询 75
3.6 使用HEAD方法获取首部 76
3.7 使用POST方法发送x-www-form-urlencoded形式的表单 77
3.8 使用POST方法发送任意主体 78
3.9 使用multipart/form-data形式发送文件 79
3.10 Cookie的发送和接收 82
3.11 使用代理 84
3.12 访问文件系统 86
3.13 发送任意方法 87
3.14 发送首部 88
3.15 超时 89
3.16 国际化域名 90
3.17 本章小结 90
第4章 HTTP/1.1的语法:追求高速化和安全性 93
4.1 通过Keep-Alive提高通信速度 94
4.2 TLS 97
4.2.1 散列函数 99
4.2.2 公共密钥加密、公开密钥加密和数字签名 101
4.2.3 密钥交换 102
4.2.4 区分使用公共密钥方式和公开密钥方式的理由 104
4.2.5 TLS的通信步骤 106
4.2.6 加密强度 110
4.2.7 密码套件 111
4.2.8 选择协议 113
4.2.9 TLS保护的内容 114
4.2.10 TLS时代 115
4.3 PUT方法和DELETE方法的标准化 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 协议升级 119
4.5.1 客户端请求升级 120
4.5.2 服务器请求升级 120
4.5.3 向TLS升级时的问题点 121
4.6 支持虚拟主机 121
4.7 Chunk 122
4.8 确认主体发送 124
4.9 Data URI方案 124
4.10 本章小结 125
第5章 HTTP/1.1的语义:HTTP的扩展功能 127
5.1 下载文件并保存到本地 127
5.1.1 保存文件的Content-Disposition首部 128
5.1.2 默认文件名使用中文 128
5.1.3 在浏览器中显示 128
5.2 暂停和恢复下载 129
5.2.1 指定多个范围进行下载 131
5.2.2 并行下载 132
5.3 XMLHttpRequest 132
5.3.1 XMLHttpRequest的诞生 133
5.3.2 XMLHttpRequest与浏览器的HTTP请求的区别 134
5.3.3 Comet 134
5.3.4 XMLHttpRequest的安全性 136
5.4 Geo-Location 137
5.4.1 客户端获取位置的方法 137
5.4.2 服务器推测客户端位置的方法 138
5.5 X-Powered-By首部 139
5.6 远程过程调用 141
5.6.1 XML-RPC 141
5.6.2 SOAP 143
5.6.3 JSON-RPC 145
5.7 WebDAV 147
5.8 网站间共用的认证和授权平台 148
5.8.1 单点登录 149
5.8.2 Kerberos认证 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 实际服务对认证系统提供支持时的陷阱 160
5.9 本章小结 161
第6章 使用Go语言实现HTTP/1.1客户端 163
6.1 Keep-Alive 163
6.2 TLS 164
6.2.1 创建证书 164
6.2.2 HTTPS服务器和注册证书 168
6.2.3 使用Go语言实现客户端 170
6.2.4 客户端证书 172
6.3 协议升级 175
6.3.1 服务器代码 175
6.3.2 客户端代码 176
6.4 Chunk 178
6.4.1 服务器发送数据 179
6.4.2 客户端依次接收数据(简易版) 180
6.4.3 客户端依次接收数据(完整版) 181
6.5 远程过程调用 183
6.6 本章小结 185
第7章 HTTP/2和HTTP/3的语法:重新定义协议 187
7.1 HTTP/2和HTTP/3中未变化的内容 187
7.2 HTTP/2 188
7.2.1 SPDY 188
7.2.2 HTTP/2的改进 189
7.2.3 使用流实现高速通信 190
7.2.4 HTTP/2的应用程序层 195
7.2.5 流量控制 196
7.2.6 服务器推送 197
7.2.7 使用预加载优化资源获取操作 197
7.2.8 使用HPACK压缩首部 200
7.3 HTTP/3 200
7.3.1 QUIC 201
7.3.2 向HTTP/3迈进 201
7.3.3 HTTP/3的层 201
7.3.4 使用HTTP Alternative Services进行升级 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 浏览器向推送服务申请订阅 219
7.6.2 应用程序服务器向推送服务投递消息 220
7.6.3 浏览器接收推送消息 220
7.6.4 设置紧急度 221
7.7 本章小结 221
第8章 HTTP/2的语义:新的用例 223
8.1 响应式设计 223
8.2 语义网 225
8.2.1 RDF 225
8.2.2 都柏林核心 226
8.2.3 RSS 226
8.2.4 微格式 226
8.2.5 微数据 227
8.2.6 RDF的逆袭 227
8.2.7 RDF系列之外的数据 228
8.3 开放内容协议 231
8.4 QR码 234
8.5 AMP 236
8.6 通过移动应用程序使浏览环境多样化 238
8.6.1 iOS的DeepLink 239
8.6.2 Android的DeepLink 239
8.7 使用HTTP Live Streaming播放视频流 240
8.7.1 HLS的视频标签 240
8.7.2 Master的.m3u8文件 240
8.7.3 字幕的.m3u8文件 241
8.7.4 视频文件 242
8.7.5 HLS的优点和缺点 243
8.7.6 HLS出现前后的视频流相关的历史 244
8.8 使用MPEG-DASH播放视频流 244
8.8.1 MPEG-DASH与HLS在播放方法上的区别 245
8.8.2 Media Presentation Description文件的结构 245
8.9 CMAF 248
8.10 本章小结 248
第9章 使用Go语言实现HTTP/2、HTML5的协议 251
9.1 HTTP/2 251
9.2 HTTP/2的服务器推送 253
9.3 Server-Sent Events 257
9.3.1 服务器的实现 257
9.3.2 客户端的实现 260
9.4 WebSocket 263
9.4.1 服务器的实现 263
9.4.2 客户端的实现 265
9.4.3 房间的实现 265
9.5 本章小结 266
第 10章 从客户端的角度来看RESTful API 269
10.1 RESTful API 269
10.1.1 RESTful API和RPC API的区别 270
10.1.2 Web API和事务 270
10.1.3 HATEOAS 272
10.1.4 RESTful和REST-ish 273
10.2 方法 274
10.3 状态码 275
10.4 主体 277
10.5 查看实际的RESTful API(PAY.JP的示例) 277
10.6 查看实际的RESTful API(GitHub的示例) 279
10.6.1 GitHub的授权 279
10.6.2 获取信息的API访问 283
10.6.3 刷新信息的API访问 284
10.7 访问RESTful API时的具体问题 286
10.7.1 超时 286
10.7.2 访问次数的限制 286
10.8 本章小结 287
第 11章 使用JavaScript实现浏览器的动态HTTP请求 289
11.1 浏览器的HTTP与生命周期 289
11.2 XMLHttpRequest 290
11.3 Fetch API 292
11.3.1 Fetch API的基础内容 292
11.3.2 Fetch的选项 293
11.3.3 创建和解析查询参数 294
11.3.4 发送主体 295
11.3.5 只有Fetch API可以执行的操作 297
11.3.6 使用Fetch API时常见的错误 299
11.3.7 在浏览器之外的JavaScript环境中使用Fetch API 300
11.4 使用JavaScript重新加载浏览器时的HTTP访问 300
11.5 下载文件 300
11.6 Server-Sent Events 302
11.7 WebSocket 303
11.8 本章小结 304
第 12章 Web应用程序的基础知识 307
12.1 术语 307
12.2 基本流程 308
12.3 Web应用程序的请求的生命周期 310
12.3.1 HTTP请求 310
12.3.2 会话 311
12.4 Web应用程序的动作模式 314
12.4.1 第 1代:服务端渲染 314
12.4.2 第 2代:Ajax 315
12.4.3 第3代:单页面应用 317
12.4.4 第3.5代:单页面应用 + 服务端渲染 318
12.5 基础设施的结构 319
12.5.1 开发环境 319
12.5.2 实际开发环境的基本结构 321
12.6 基础设施的其他形式 324
12.6.1 PaaS 324
12.6.2 Serverless 325
12.6.3 微服务 325
12.7 Web应用程序的内部层次结构 326
12.8 Web应用程序的组成元素的详细分类 329
12.9 Web API的设计:区分使用数据容器 330
12.10 今后不再使用的技术 331
12.10.1 CGI 331
12.10.2 RIA 332
12.11 本章小结 333
第 13章 云时代的HTTP:Web的各种强化技术 335
13.1 更大规模的Web系统的结构 335
13.2 DNS 336
13.2.1 DNS预查询 337
13.2.2 DNS服务器的缓存 338
13.2.3 DNS客户端的缓存 339
13.2.4 DNS负载均衡 339
13.2.5 DNS引流 339
13.2.6 使用SRV记录的服务发现 340
13.3 反向代理 341
13.4 CDN 346
13.4.1 提高通信本身的速度和稳定性 346
13.4.2 作为靠近用户的高级代理服务器 347
13.4.3 CDN的注意事项 349
13.5 负载均衡器 350
13.6 API网关 351
13.7 健康检查 351
13.7.1 Liveness Prove 351
13.7.2 Readiness Prove 352
13.8 VPC 352
13.9 微服务与认证 353
13.10 分布式追踪 354
13.10.1 向子任务传递追踪信息的HTTP首部 355
13.10.2 向浏览器传递服务器内部的时间信息的HTTP首部 356
13.11 其他技术元素 357
13.12 本章小结 358
第 14章 安全:守护浏览器的HTTP功能 359
14.1 传统类型的攻击 359
14.2 针对浏览器的攻击的特征 360
14.3 跨站脚本攻击 361
14.3.1 设置Cookie以防止泄露 362
14.3.2 Content-Security-Policy首部 362
14.3.3 Content-Security-Policy和JavaScript模板引擎 365
14.3.4 Mixed Content的应对策略 366
14.3.5 CORS 366
14.4 中间人攻击 370
14.5 会话劫持 371
14.5.1 旧的会话管理和会话固定攻击 372
14.5.2 Cookie注入 372
14.6 跨站请求伪造 373
14.6.1 应对跨站请求伪造的令牌 373
14.6.2 SameSite属性 374
14.7 点击劫持 374
14.8 列表型账户入侵 375
14.8.1 密码的保存:不保存明文密码 376
14.8.2 保存密码时使用的各种散列函数 377
14.8.3 密码的日志掩码化 377
14.8.4 多因素身份验证 378
14.8.5 TOTP算法 378
14.8.6 WebAuthn 380
14.8.7 通知用户别处的登录 380
14.9 注入存在漏洞的代码 381
14.10 面向Web应用程序的安全指南 382
14.11 Web广告和安全 382
14.11.1 第三方Cookie 383
14.11.2 Cookie以外的代替手段 384
14.11.3 Google Analytics 384
14.11.4 在不确定用户的情况下进行推测(Finger Print) 385
14.12 本章小结 386
附 录 387
A.1 状态码一览表 387
A.1.1 1字头(信息) 387
A.1.2 2字头(成功) 388
A.1.3 3字头(重定向) 388
A.1.4 4字头(客户端错误) 389
A.1.5 5字头(服务器错误) 390
A.2 首部字段一览表 391
A.3 Internet Explorer与Content-Security-Policy首部 396
A.3.1 X-Content-Security-Policy首部 397
A.3.2 X-XSS-Protection首部 397
A.3.3 X-Frame-Options首部 397
A.4 使用Go语言进行JSON解析 398
A.4.1 使用Go语言的结构体标签进行JSON解析 398
A.4.2 判断值到底是省略了,还是为0 400
A.4.3 想要执行特殊类型转换的情况 401
A.5 JSON相关的应用话题 403
A.5.1 在输出时对输出内容进行加工 403
A.5.2 类型因情况而改变的JSON的解析 404
A.5.3 转换为通用的数据类型 406
A.5.4 JSON Schema 407
后记 411
猜您喜欢