详解HTTP:协议基础与Go语言实现
涩川喜规
侯振龙 译
出版时间:2022年09月
页数:413
本书有什么特色?
● 从历史中学习
本书沿着HTTP/1.0、HTTP/1.1、HTTP/2、HTTP/3的发展历史,通俗易懂地讲解了各个版本的HTTP的协议规范,阐明了HTTP是如何通过功能设计和扩展来实现高速化和安全性目标的。

● 从代码中学习
本书结合大量用Go语言实现的具体的客户端代码示例,详细介绍了浏览器内部的动作、浏览器与服务器进行交互的方法等,揭秘了HTTP通信的机制。
  1. 前言
  2. 第1章 HTTP/1.0的语法:4个基本元素
  3. 1.1 HTTP的历史
  4. 1.2 尝试HTTP/0.9能够实现的处理
  5. 1.3 从HTTP/0.9到HTTP/1.0的发展过程
  6. 1.4 HTTP的祖先(1):电子邮件
  7. 1.4.1 发送首部
  8. 1.4.2 接收首部
  9. 1.4.3 MIME类型
  10. 1.4.4 Content-Type与安全性
  11. 1.4.5 HTTP与电子邮件的区别
  12. 1.5 HTTP的祖先(2):新闻组
  13. 1.5.1 方法
  14. 1.5.2 状态码
  15. 1.6 重定向
  16. 1.7 URL
  17. 1.7.1 URL的结构
  18. 1.7.2 URL与国际化
  19. 1.7.3 标准URL
  20. 1.7.4 协议相对URL
  21. 1.8 主体
  22. 1.9 本章小结
  23. 第2章 HTTP/1.0的语义:浏览器基本功能的背后
  24. 2.1 使用x-www-form-urlencoded发送表单
  25. 2.2 使用multipart/form-data发送文件
  26. 2.3 使用表单进行重定向
  27. 2.4 内容协商
  28. 2.4.1 确定文件类型
  29. 2.4.2 确定显示语言
  30. 2.4.3 确定字符集
  31. 2.4.4 使用压缩提高通信速度
  32. 2.5 Cookie
  33. 2.5.1 Cookie的分类
  34. 2.5.2 Cookie的错误用法
  35. 2.5.3 对Cookie加以限制
  36. 2.5.4 源
  37. 2.5.5 SameSite属性
  38. 2.6 认证和会话
  39. 2.6.1 BASIC认证和Digest认证
  40. 2.6.2 使用Cookie进行会话管理
  41. 2.6.3 使用带签名的Cookie保存会话数据
  42. 2.7 代理
  43. 2.8 缓存
  44. 2.8.1 基于更新时间的缓存
  45. 2.8.2 Expires首部
  46. 2.8.3 Pragma:no-cache
  47. 2.8.4 不执行缓存的条件
  48. 2.8.5 添加ETag
  49. 2.8.6 Cache-Control
  50. 2.8.7 Vary
  51. 2.9 Referer
  52. 2.10 面向搜索引擎的内容访问控制
  53. 2.10.1 robots.txt
  54. 2.10.2 robots.txt与诉讼案例
  55. 2.10.3 站点地图
  56. 2.11 用户代理
  57. 2.12 本章小结
  58. 第3章 使用Go语言实现HTTP/1.0客户端
  59. 3.1 为何使用Go语言
  60. 3.2 Go语言的API结构
  61. 3.3 本章的主要内容
  62. 3.4 GET方法的发送及主体、状态码和首部的接收
  63. 3.5 使用GET方法发送查询
  64. 3.6 使用HEAD方法获取首部
  65. 3.7 使用POST方法发送x-www-form-urlencoded形式的表单
  66. 3.8 使用POST方法发送任意主体
  67. 3.9 使用multipart/form-data形式发送文件
  68. 3.10 Cookie的发送和接收
  69. 3.11 使用代理
  70. 3.12 访问文件系统
  71. 3.13 发送任意方法
  72. 3.14 发送首部
  73. 3.15 超时
  74. 3.16 国际化域名
  75. 3.17 本章小结
  76. 第4章 HTTP/1.1的语法:追求高速化和安全性
  77. 4.1 通过Keep-Alive提高通信速度
  78. 4.2 TLS
  79. 4.2.1 散列函数
  80. 4.2.2 公共密钥加密、公开密钥加密和数字签名
  81. 4.2.3 密钥交换
  82. 4.2.4 区分使用公共密钥方式和公开密钥方式的理由
  83. 4.2.5 TLS 的通信步骤
  84. 4.2.6 加密强度
  85. 4.2.7 密码套件
  86. 4.2.8 选择协议
  87. 4.2.9 TLS保护的内容
  88. 4.2.10 TLS时代
  89. 4.3 PUT 方法和DELETE方法的标准化
  90. 4.4 添加OPTIONS方法、TRACE方法和CONNECT 法
  91. 4.4.1 OPTIONS
  92. 4.4.2 TRACE(TRACK)
  93. 4.4.3 CONNECT
  94. 4.5 协议升级
  95. 4.5.1 客户端请求升级
  96. 4.5.2 服务器请求升级
  97. 4.5.3 向TLS升级时的问题点
  98. 4.6 支持虚拟主机
  99. 4.7 Chunk
  100. 4.8 确认主体发送
  101. 4.9 Data URI方案
  102. 4.10 本章小结
  103. 第5章 HTTP/1.1的语义:HTTP的扩展功能
  104. 5.1 下载文件并保存到本地…
  105. 5.1.1 保存文件的Content-Disposition首部
  106. 5.1.2 默认文件名使用中文
  107. 5.1.3 在浏览器中显示
  108. 5.2 暂停和恢复下载
  109. 5.2.1 指定多个范围进行下载
  110. 5.2.2 并行下载
  111. 5.3 XMLHttpRequest
  112. 5.3.1 XMLHttpRequest的诞生
  113. 5.3.2 XMLHttpRequest与浏览器的HTTP请求的区别
  114. 5.3.3 Comet
  115. 5.3.4 XMLHttpRequest的安全性
  116. 5.4 Geo-Location
  117. 5.4.1 客户端获取位置的方法
  118. 5.4.2 服务器推测客户端位置的方法
  119. 5.5 X-Powered-By首部
  120. 5.6 远程过程调用
  121. 5.6.1 XML-RPC
  122. 5.6.2 SOAP
  123. 5.6.3 JSON-RPC
  124. 5.7 WebDAV
  125. 5.8 网站间共用的认证和授权平台
  126. 5.8.1 单点登录
  127. 5.8.2 Kerberos认证
  128. 5.8.3 SAML
  129. 5.8.4 OpenID
  130. 5.8.5 OpenSocial
  131. 5.8.6 OAuth
  132. 5.8.7 OpenID Connect
  133. 5.8.8 JWT
  134. 5.8.9 实际服务对认证系统提供支持时的陷阱
  135. 5.9 本章小结
  136. 第6章 使用Go语言实现HTTP/1.1客户端
  137. 6.1 Keep-Alive
  138. 6.2 TLS
  139. 6.2.1 创建证书
  140. 6.2.2 HTTPS服务器和注册证书
  141. 6.2.3 使用Go语言实现客户端
  142. 6.2.4 客户端证书
  143. 6.3 协议升级
  144. 6.3.1 服务器代码
  145. 6.3.2 客户端代码
  146. 6.4 Chunk
  147. 6.4.1 服务器发送数据
  148. 6.4.2 客户端依次接收数据(简易版)
  149. 6.4.3 客户端依次接收数据(完整版)
  150. 6.5 远程过程调用
  151. 6.6 本章小结
  152. 第7章 HTTP/2和HTTP/3的语法:重新定义协议
  153. 7.1 HTTP/2和HTTP/3中未变化的内容
  154. 7.2 HTTP/2
  155. 7.2.1 SPDY
  156. 7.2.2 HTTP/2的改进
  157. 7.2.3 使用流实现高速通信
  158. 7.2.4 HTTP/2的应用程序层
  159. 7.2.5 流量控制
  160. 7.2.6 服务器推送
  161. 7.2.7 使用预加载优化资源获取操作
  162. 7.2.8 使用HPACK压缩首部
  163. 7.3 HTTP/3
  164. 7.3.1 QUIC
  165. 7.3.2 向HTTP/3迈进
  166. 7.3.3 HTTP/3的层
  167. 7.3.4 使用HTTP Alternative Services进行升级
  168. 7.4 用于JavaScript的新的通信API
  169. 7.4.1 Fetch API
  170. 7.4.2 Server-Sent Events
  171. 7.4.3 WebSocket
  172. 7.5 WebRTC
  173. 7.5.1 WebRTC的用例(1)
  174. 7.5.2 WebRTC的用例(2)
  175. 7.5.3 RFC之外的用例
  176. 7.5.4 RTCPeerConnection
  177. 7.5.5 媒体通道和getUserMedia
  178. 7.5.6 RTCDataChannel
  179. 7.6 HTTP Web推送
  180. 7.6.1 浏览器向推送服务申请订阅
  181. 7.6.2 应用程序服务器向推送服务投递消息
  182. 7.6.3 浏览器接收推送消息
  183. 7.6.4 设置紧急度
  184. 7.7 本章小结
  185. 第8章 HTTP/2的语义:新的用例
  186. 8.1 响应式设计
  187. 8.2 语义网
  188. 8.2.1 RDF
  189. 8.2.2 都柏林核心
  190. 8.2.3 RSS
  191. 8.2.4 微格式
  192. 8.2.5 微数据
  193. 8.2.6 RDF的逆袭
  194. 8.2.7 RDF系列之外的数据
  195. 8.3 开放内容协议
  196. 8.4 QR码
  197. 8.5 AMP6
  198. 8.6 通过移动应用程序使浏览环境多样化
  199. 8.6.1 iOS的DeepLink9
  200. 8.6.2 Android的DeepLink
  201. 8.7 使用HTTP Live Streaming播放视频流
  202. 8.7.1 HLS的视频标签
  203. 8.7.2 Master的.m3u8文件
  204. 8.7.3 字幕的.m3u8文件
  205. 8.7.4 视频文件
  206. 8.7.5 HLS的优点和缺点
  207. 8.7.6 HLS出现前后的视频流相关的历史
  208. 8.8 使用MPEG-DASH播放视频流
  209. 8.8.1 MPEG-DASH与HLS在播放方法上的区别
  210. 8.8.2 Media Presentation Description文件的结构
  211. 8.9 CMAF
  212. 8.10 本章小结
  213. 第9章 使用Go语言实现HTTP/2、HTML5的协议
  214. 9.1 HTTP/2
  215. 9.2 HTTP/2的服务器推送
  216. 9.3 Server-Sent Events
  217. 9.3.1 服务器的实现
  218. 9.3.2 客户端的实现
  219. 9.4 WebSocket
  220. 9.4.1 服务器的实现
  221. 9.4.2 客户端的实现
  222. 9.4.3 房间的实现
  223. 9.5 本章小结
  224. 第10章 从客户端的角度来看RESTful API
  225. 10.1 RESTful API
  226. 10.1.1 RESTful API和RPC API的区别
  227. 10.1.2 Web API和事务
  228. 10.1.3 HATEOAS
  229. 10.1.4 RESTful和REST-ish
  230. 10.2 方法
  231. 10.3 状态码
  232. 10.4 主体
  233. 10.5 查看实际的RESTful API(PAY.JP的示例)
  234. 10.6 查看实际的RESTful API(GitHub的示例)
  235. 10.6.1 GitHub的授权
  236. 10.6.2 获取信息的API访问
  237. 10.6.3 刷新信息的API访问
  238. 10.7 访问RESTful API时的具体问题
  239. 10.7.1 超时
  240. 10.7.2 访问次数的限制
  241. 10.8 本章小结
  242. 第11章 使用JavaScript实现浏览器的动态HTTP请求
  243. 11.1 浏览器的HTTP与生命周期
  244. 11.2 XMLHttpRequest
  245. 11.3 Fetch API
  246. 11.3.1 Fetch API的基础内容
  247. 11.3.2 Fetch的选项
  248. 11.3.3 创建和解析查询参数
  249. 11.3.4 发送主体
  250. 11.3.5 只有Fetch API可以执行的操作
  251. 11.3.6 使用Fetch API时常见的错误
  252. 11.3.7 在浏览器之外的JavaScript环境中使用Fetch API
  253. 11.4 使用JavaScript重新加载浏览器时的HTTP 访问
  254. 11.5 下载文件
  255. 11.6 Server-Sent Events
  256. 11.7 WebSocket
  257. 11.8 本章小结
  258. 第12章 Web应用程序的基础知识
  259. 12.1 术语
  260. 12.2 基本流程
  261. 12.3 Web应用程序的请求的生命周期
  262. 12.3.1 HTTP请求
  263. 12.3.2 会话
  264. 12.4 Web应用程序的动作模式
  265. 12.4.1 第1代:服务端渲染
  266. 12.4.2 第2代:Ajax
  267. 12.4.3 第3代:单页面应用
  268. 12.4.4 第3.5代:单页面应用 + 服务端渲染
  269. 12.5 基础设施的结构
  270. 12.5.1 开发环境
  271. 12.5.2 实际开发环境的基本结构
  272. 12.6 基础设施的其他形式
  273. 12.6.1 PaaS
  274. 12.6.2 Serverless
  275. 12.6.3 微服务
  276. 12.7 Web应用程序的内部层次结构
  277. 12.8 Web应用程序的组成元素的详细分类
  278. 12.9 Web API的设计:区分使用数据容器
  279. 12.10 今后不再使用的技术
  280. 12.10.1 CGI
  281. 12.10.2 RIA
  282. 12.11 本章小结
  283. 第13章 云时代的HTTP:Web的各种强化技术
  284. 13.1 更大规模的Web系统的结构
  285. 13.2 DNS
  286. 13.2.1 DNS预查询
  287. 13.2.2 DNS服务器的缓存
  288. 13.2.3 DNS客户端的缓存
  289. 13.2.4 DNS负载均衡
  290. 13.2.5 DNS引流
  291. 13.2.6 使用SRV记录的服务发现
  292. 13.3 反向代理
  293. 13.4 CDN
  294. 13.4.1 提高通信本身的速度和稳定性
  295. 13.4.2 作为靠近用户的高级代理服务器
  296. 13.4.3 CDN的注意事项
  297. 13.5 负载均衡器
  298. 13.6 API网关
  299. 13.7 健康检查
  300. 13.7.1 Liveness Prove
  301. 13.7.2 Readiness Prove
  302. 13.8 VPC
  303. 13.9 微服务与认证
  304. 13.10 分布式追踪
  305. 13.10.1 向子任务传递追踪信息的HTTP首部
  306. 13.10.2 向浏览器传递服务器内部的时间信息的HTTP首部
  307. 13.11 其他技术元素
  308. 13.12 本章小结
  309. 第14章 安全:守护浏览器的HTTP功能
  310. 14.1 传统类型的攻击
  311. 14.2 针对浏览器的攻击的特征
  312. 14.3 跨站脚本攻击
  313. 14.3.1 设置Cookie以防止泄露
  314. 14.3.2 Content-Security-Policy首部
  315. 14.3.3 Content-Security-Policy和JavaScript模板引擎
  316. 14.3.4 Mixed Content的应对策略
  317. 14.3.5 CORS
  318. 14.4 中间人攻击
  319. 14.5 会话劫持
  320. 14.5.1 旧的会话管理和会话固定攻击
  321. 14.5.2 Cookie注入
  322. 14.6 跨站请求伪造
  323. 14.6.1 应对跨站请求伪造的令牌
  324. 14.6.2 SameSite属性
  325. 14.7 点击劫持
  326. 14.8 列表型账户入侵
  327. 14.8.1 密码的保存:不保存明文密码
  328. 14.8.2 保存密码时使用的各种散列函数
  329. 14.8.3 密码的日志掩码化
  330. 14.8.4 多因素身份验证
  331. 14.8.5 TOTP算法
  332. 14.8.6 WebAuthn
  333. 14.8.7 通知用户别处的登录
  334. 14.9 注入存在漏洞的代码
  335. 14.10 面向Web应用程序的安全指南
  336. 14.11 Web广告和安全
  337. 14.11.1 第三方Cookie
  338. 14.11.2 Cookie以外的代替手段
  339. 14.11.3 Google Analytics
  340. 14.11.4 在不确定用户的情况下进行推测(Finger Print)
  341. 14.12 本章小结
  342. 附录
  343. 后记
书名:详解HTTP:协议基础与Go语言实现
作者:涩川喜规
译者:侯振龙 译
国内出版社:人民邮电出版社
出版时间:2022年09月
页数:413
书号:978-7-115-59322-1
原版书书名:Real World HTTP, 2E
原版书出版商:O'Reilly Media
涩川喜规
 
现就职于日本Future Corporation,工作中经常使用Python、C++、JavaScript、Golang,对Web有浓厚兴趣。著有《Go系统编程》、Mithril、《Mobage核心技术》(合著)等,同时也是The Art of Community的日文版译者。
 
 
购买选项
定价:129.80元
书号:978-7-115-59322-1
出版社:人民邮电出版社