详解HTTP:协议基础与Go语言实现

详解HTTP:协议基础与Go语言实现
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
作者: [日]
2022-08
版次: 1
ISBN: 9787115593221
定价: 129.80
装帧: 平装
开本: 其他
纸张: 胶版纸
页数: 413页
字数: 604千字
7人买过
  • 本书沿着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
  • 内容简介:
    本书沿着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
查看详情
12
您可能感兴趣 / 更多
详解HTTP:协议基础与Go语言实现
人生的愚者
[日]木木高太郎/著陈晓淇/译
详解HTTP:协议基础与Go语言实现
我的爸爸是奥特曼(套装共7册)给孩子和爸爸的礼物
[日]宫西达也 著;彭懿 译
详解HTTP:协议基础与Go语言实现
东方三月精:Oriental Sacred Place.1-3(赠折立卡1张)
[日]ZUN 原著;THB编辑部 译;[日]比良坂真琴 编绘
详解HTTP:协议基础与Go语言实现
销声匿迹 : 灭绝生物轻图鉴 6-7-8-9-10岁全彩科普漫画图鉴,国内专家老师审读推荐。了解60种以上灭绝生物,增加孩子们对生物多样性、自然界演变历程的了解。小天角
[日]今泉忠明 编;余慧玲 译;[日]佐野翔 绘;邢立达
详解HTTP:协议基础与Go语言实现
宫西达也恐龙故事:嘿嘿嘿嘿 好像很好吃
[日]宫西达也
详解HTTP:协议基础与Go语言实现
明明不是我!
[日]浅仓秋成
详解HTTP:协议基础与Go语言实现
绿色的星星
[日]林木林
详解HTTP:协议基础与Go语言实现
宴: runta插画集(赠典藏画卡×2+精美书签×4)新锐画师runta集大成作品集
[日]runta 著;天闻角川 编译
详解HTTP:协议基础与Go语言实现
宫西达也再见幼儿园系列绘本(套装 全3册)挥手告别幼儿园,拥抱成长和哲思
[日]宫西达也
详解HTTP:协议基础与Go语言实现
再见,我们的幼儿园(精装 宫西达也系列绘本)回顾宝贵的幼儿园生活,让孩子更好地迎接一年级。
[日]宫西达也
详解HTTP:协议基础与Go语言实现
小小熊猫(精装 宫西达也系列绘本)超萌小小熊猫,生活充满惊险,怎么化险为夷?
[日]宫西达也
详解HTTP:协议基础与Go语言实现
草莓村(蜡笔王国系列)(日本畅销七十年,“宫崎骏式”自然主义儿童文学的经典之作!)
[日]福永令三