注册 | 登录读书好,好读书,读好书!
读书网-DuShu.com
当前位置: 首页出版图书科学技术计算机/网络软件与程序设计其他编程语言/工具详解HTTP:协议基础与Go语言实现

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

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

定 价:¥129.80

作 者: [日]涩川喜规
出版社: 人民邮电出版社
丛编项:
标 签: 暂缺

购买这本书可以去


ISBN: 9787115593221 出版时间: 2022-08-01 包装: 平装
开本: 128开 页数: 字数:  

内容简介

  本书沿着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


本目录推荐