新書推薦:
《
大宋悬疑录:貔貅刑
》
售價:HK$
74.8
《
不被大风吹倒
》
售價:HK$
65.9
《
人生解忧:佛学入门四十讲
》
售價:HK$
107.8
《
东野圭吾:分身(东野圭吾无法再现的双女主之作 奇绝瑰丽、残忍又温情)
》
售價:HK$
64.9
《
浪潮将至
》
售價:HK$
86.9
《
在虚无时代:与马克斯·韦伯共同思考
》
售價:HK$
57.2
《
斯大林格勒:为了正义的事业(格罗斯曼“战争二部曲”的第一部,《生活与命运》前传)
》
售價:HK$
184.8
《
日内交易与波段交易的资金风险管理
》
售價:HK$
85.8
編輯推薦:
1.从历史中学习本书角度新颖,沿着HTTP/1.0、HTTP/1.1、HTTP/2、HTTP/3的发展历史,通俗易懂地讲解了各个版本的HTTP的协议规范,阐明了HTTP是如何通过功能设计和扩展来实现高速化和安全性目标的。2.从代码中学习本书结合大量用Go语言实现的具体的客户端代码示例,详细介绍了浏览器内部的动作、浏览器与服务器进行交互的方法等,揭秘了HTTP通信的机制。3.本书在日本出版后受到好评,在日亚图书“网络协议”类排名TOP。
內容簡介:
本书沿着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个基本元素 11.1 HTTP的历史 11.2 尝试HTTP/0.9能够实现的处理 61.3 从HTTP/0.9到HTTP/1.0的发展过程 81.4 HTTP的祖先(1):电子邮件 91.4.1 发送首部 111.4.2 接收首部 131.4.3 MIME类型 141.4.4 Content-Type与安全性 151.4.5 HTTP与电子邮件的区别 161.5 HTTP的祖先(2):新闻组 161.5.1 方法 171.5.2 状态码 181.6 重定向 201.7 URL 221.7.1 URL的结构 231.7.2 URL与国际化 251.7.3 标准URL 251.7.4 协议相对URL 261.8 主体 271.9 本章小结 29第 2章 HTTP/1.0的语义:浏览器基本功能的背后 312.1 使用x-www-form-urlencoded发送表单 312.2 使用multipart/form-data发送文件 332.3 使用表单进行重定向 362.4 内容协商 372.4.1 确定文件类型 372.4.2 确定显示语言 372.4.3 确定字符集 382.4.4 使用压缩提高通信速度 392.5 Cookie 402.5.1 Cookie的分类 432.5.2 Cookie的错误用法 432.5.3 对Cookie加以限制 442.5.4 源 452.5.5 SameSite属性 462.6 认证和会话 462.6.1 BASIC认证和Digest认证 472.6.2 使用Cookie进行会话管理 492.6.3 使用带签名的Cookie保存会话数据 502.7 代理 502.8 缓存 512.8.1 基于更新时间的缓存 522.8.2 Expires首部 532.8.3 Pragma:no-cache 552.8.4 不执行缓存的条件 552.8.5 添加ETag 552.8.6 Cache-Control 572.8.7 Vary 602.9 Referer 612.10 面向搜索引擎的内容访问控制 632.10.1 robots.txt 632.10.2 robots.txt与诉讼案例 642.10.3 站点地图 652.11 用户代理 652.12 本章小结 67第3章 使用Go语言实现HTTP/1.0客户端 693.1 为何使用Go语言 693.2 Go语言的API结构 703.3 本章的主要内容 713.4 GET方法的发送及主体、状态码和首部的接收 713.5 使用GET方法发送查询 753.6 使用HEAD方法获取首部 763.7 使用POST方法发送x-www-form-urlencoded形式的表单 773.8 使用POST方法发送任意主体 783.9 使用multipart/form-data形式发送文件 793.10 Cookie的发送和接收 823.11 使用代理 843.12 访问文件系统 863.13 发送任意方法 873.14 发送首部 883.15 超时 893.16 国际化域名 903.17 本章小结 90第4章 HTTP/1.1的语法:追求高速化和安全性 934.1 通过Keep-Alive提高通信速度 944.2 TLS 974.2.1 散列函数 994.2.2 公共密钥加密、公开密钥加密和数字签名 1014.2.3 密钥交换 1024.2.4 区分使用公共密钥方式和公开密钥方式的理由 1044.2.5 TLS的通信步骤 1064.2.6 加密强度 1104.2.7 密码套件 1114.2.8 选择协议 1134.2.9 TLS保护的内容 1144.2.10 TLS时代 1154.3 PUT方法和DELETE方法的标准化 1154.4 添加OPTIONS方法、TRACE方法和CONNECT方法 1164.4.1 OPTIONS 1164.4.2 TRACE(TRACK) 1174.4.3 CONNECT 1184.5 协议升级 1194.5.1 客户端请求升级 1204.5.2 服务器请求升级 1204.5.3 向TLS升级时的问题点 1214.6 支持虚拟主机 1214.7 Chunk 1224.8 确认主体发送 1244.9 Data URI方案 1244.10 本章小结 125第5章 HTTP/1.1的语义:HTTP的扩展功能 1275.1 下载文件并保存到本地 1275.1.1 保存文件的Content-Disposition首部 1285.1.2 默认文件名使用中文 1285.1.3 在浏览器中显示 1285.2 暂停和恢复下载 1295.2.1 指定多个范围进行下载 1315.2.2 并行下载 1325.3 XMLHttpRequest 1325.3.1 XMLHttpRequest的诞生 1335.3.2 XMLHttpRequest与浏览器的HTTP请求的区别 1345.3.3 Comet 1345.3.4 XMLHttpRequest的安全性 1365.4 Geo-Location 1375.4.1 客户端获取位置的方法 1375.4.2 服务器推测客户端位置的方法 1385.5 X-Powered-By首部 1395.6 远程过程调用 1415.6.1 XML-RPC 1415.6.2 SOAP 1435.6.3 JSON-RPC 1455.7 WebDAV 1475.8 网站间共用的认证和授权平台 1485.8.1 单点登录 1495.8.2 Kerberos认证 1495.8.3 SAML 1505.8.4 OpenID 1515.8.5 OpenSocial 1535.8.6 OAuth 1545.8.7 OpenID Connect 1585.8.8 JWT 1595.8.9 实际服务对认证系统提供支持时的陷阱 1605.9 本章小结 161第6章 使用Go语言实现HTTP/1.1客户端 1636.1 Keep-Alive 1636.2 TLS 1646.2.1 创建证书 1646.2.2 HTTPS服务器和注册证书 1686.2.3 使用Go语言实现客户端 1706.2.4 客户端证书 1726.3 协议升级 1756.3.1 服务器代码 1756.3.2 客户端代码 1766.4 Chunk 1786.4.1 服务器发送数据 1796.4.2 客户端依次接收数据(简易版) 1806.4.3 客户端依次接收数据(完整版) 1816.5 远程过程调用 1836.6 本章小结 185第7章 HTTP/2和HTTP/3的语法:重新定义协议 1877.1 HTTP/2和HTTP/3中未变化的内容 1877.2 HTTP/2 1887.2.1 SPDY 1887.2.2 HTTP/2的改进 1897.2.3 使用流实现高速通信 1907.2.4 HTTP/2的应用程序层 1957.2.5 流量控制 1967.2.6 服务器推送 1977.2.7 使用预加载优化资源获取操作 1977.2.8 使用HPACK压缩首部 2007.3 HTTP/3 2007.3.1 QUIC 2017.3.2 向HTTP/3迈进 2017.3.3 HTTP/3的层 2017.3.4 使用HTTP Alternative Services进行升级 2037.4 用于JavaScript的新的通信API 2057.4.1 Fetch API 2057.4.2 Server-Sent Events 2067.4.3 WebSocket 2077.5 WebRTC 2107.5.1 WebRTC的用例(1) 2117.5.2 WebRTC的用例(2) 2137.5.3 RFC之外的用例 2147.5.4 RTCPeerConnection 2147.5.5 媒体通道和getUserMedia 2157.5.6 RTCDataChannel 2167.6 HTTP Web推送 2177.6.1 浏览器向推送服务申请订阅 2197.6.2 应用程序服务器向推送服务投递消息 2207.6.3 浏览器接收推送消息 2207.6.4 设置紧急度 2217.7 本章小结 221第8章 HTTP/2的语义:新的用例 2238.1 响应式设计 2238.2 语义网 2258.2.1 RDF 2258.2.2 都柏林核心 2268.2.3 RSS 2268.2.4 微格式 2268.2.5 微数据 2278.2.6 RDF的逆袭 2278.2.7 RDF系列之外的数据 2288.3 开放内容协议 2318.4 QR码 2348.5 AMP 2368.6 通过移动应用程序使浏览环境多样化 2388.6.1 iOS的DeepLink 2398.6.2 Android的DeepLink 2398.7 使用HTTP Live Streaming播放视频流 2408.7.1 HLS的视频标签 2408.7.2 Master的.m3u8文件 2408.7.3 字幕的.m3u8文件 2418.7.4 视频文件 2428.7.5 HLS的优点和缺点 2438.7.6 HLS出现前后的视频流相关的历史 2448.8 使用MPEG-DASH播放视频流 2448.8.1 MPEG-DASH与HLS在播放方法上的区别 2458.8.2 Media Presentation Description文件的结构 2458.9 CMAF 2488.10 本章小结 248第9章 使用Go语言实现HTTP/2、HTML5的协议 2519.1 HTTP/2 2519.2 HTTP/2的服务器推送 2539.3 Server-Sent Events 2579.3.1 服务器的实现 2579.3.2 客户端的实现 2609.4 WebSocket 2639.4.1 服务器的实现 2639.4.2 客户端的实现 2659.4.3 房间的实现 2659.5 本章小结 266第 10章 从客户端的角度来看RESTful API 26910.1 RESTful API 26910.1.1 RESTful API和RPC API的区别 27010.1.2 Web API和事务 27010.1.3 HATEOAS 27210.1.4 RESTful和REST-ish 27310.2 方法 27410.3 状态码 27510.4 主体 27710.5 查看实际的RESTful API(PAY.JP的示例) 27710.6 查看实际的RESTful API(GitHub的示例) 27910.6.1 GitHub的授权 27910.6.2 获取信息的API访问 28310.6.3 刷新信息的API访问 28410.7 访问RESTful API时的具体问题 28610.7.1 超时 28610.7.2 访问次数的限制 28610.8 本章小结 287第 11章 使用JavaScript实现浏览器的动态HTTP请求 28911.1 浏览器的HTTP与生命周期 28911.2 XMLHttpRequest 29011.3 Fetch API 29211.3.1 Fetch API的基础内容 29211.3.2 Fetch的选项 29311.3.3 创建和解析查询参数 29411.3.4 发送主体 29511.3.5 只有Fetch API可以执行的操作 29711.3.6 使用Fetch API时常见的错误 29911.3.7 在浏览器之外的JavaScript环境中使用Fetch API 30011.4 使用JavaScript重新加载浏览器时的HTTP访问 30011.5 下载文件 30011.6 Server-Sent Events 30211.7 WebSocket 30311.8 本章小结 304第 12章 Web应用程序的基础知识 30712.1 术语 30712.2 基本流程 30812.3 Web应用程序的请求的生命周期 31012.3.1 HTTP请求 31012.3.2 会话 31112.4 Web应用程序的动作模式 31412.4.1 第 1代:服务端渲染 31412.4.2 第 2代:Ajax 31512.4.3 第3代:单页面应用 31712.4.4 第3.5代:单页面应用 + 服务端渲染 31812.5 基础设施的结构 31912.5.1 开发环境 31912.5.2 实际开发环境的基本结构 32112.6 基础设施的其他形式 32412.6.1 PaaS 32412.6.2 Serverless 32512.6.3 微服务 32512.7 Web应用程序的内部层次结构 32612.8 Web应用程序的组成元素的详细分类 32912.9 Web API的设计:区分使用数据容器 33012.10 今后不再使用的技术 33112.10.1 CGI 33112.10.2 RIA 33212.11 本章小结 333第 13章 云时代的HTTP:Web的各种强化技术 33513.1 更大规模的Web系统的结构 33513.2 DNS 33613.2.1 DNS预查询 33713.2.2 DNS服务器的缓存 33813.2.3 DNS客户端的缓存 33913.2.4 DNS负载均衡 33913.2.5 DNS引流 33913.2.6 使用SRV记录的服务发现 34013.3 反向代理 34113.4 CDN 34613.4.1 提高通信本身的速度和稳定性 34613.4.2 作为靠近用户的高级代理服务器 34713.4.3 CDN的注意事项 34913.5 负载均衡器 35013.6 API网关 35113.7 健康检查 35113.7.1 Liveness Prove 35113.7.2 Readiness Prove 35213.8 VPC 35213.9 微服务与认证 35313.10 分布式追踪 35413.10.1 向子任务传递追踪信息的HTTP首部 35513.10.2 向浏览器传递服务器内部的时间信息的HTTP首部 35613.11 其他技术元素 35713.12 本章小结 358第 14章 安全:守护浏览器的HTTP功能 35914.1 传统类型的攻击 35914.2 针对浏览器的攻击的特征 36014.3 跨站脚本攻击 36114.3.1 设置Cookie以防止泄露 36214.3.2 Content-Security-Policy首部 36214.3.3 Content-Security-Policy和JavaScript模板引擎 36514.3.4 Mixed Content的应对策略 36614.3.5 CORS 36614.4 中间人攻击 37014.5 会话劫持 37114.5.1 旧的会话管理和会话固定攻击 37214.5.2 Cookie注入 37214.6 跨站请求伪造 37314.6.1 应对跨站请求伪造的令牌 37314.6.2 SameSite属性 37414.7 点击劫持 37414.8 列表型账户入侵 37514.8.1 密码的保存:不保存明文密码 37614.8.2 保存密码时使用的各种散列函数 37714.8.3 密码的日志掩码化 37714.8.4 多因素身份验证 37814.8.5 TOTP算法 37814.8.6 WebAuthn 38014.8.7 通知用户别处的登录 38014.9 注入存在漏洞的代码 38114.10 面向Web应用程序的安全指南 38214.11 Web广告和安全 38214.11.1 第三方Cookie 38314.11.2 Cookie以外的代替手段 38414.11.3 Google Analytics 38414.11.4 在不确定用户的情况下进行推测(Finger Print) 38514.12 本章小结 386附 录 387A.1 状态码一览表 387A.1.1 1字头(信息) 387A.1.2 2字头(成功) 388A.1.3 3字头(重定向) 388A.1.4 4字头(客户端错误) 389A.1.5 5字头(服务器错误) 390A.2 首部字段一览表 391A.3 Internet Explorer与Content-Security-Policy首部 396A.3.1 X-Content-Security-Policy首部 397A.3.2 X-XSS-Protection首部 397A.3.3 X-Frame-Options首部 397A.4 使用Go语言进行JSON解析 398A.4.1 使用Go语言的结构体标签进行JSON解析 398A.4.2 判断值到底是省略了,还是为0 400A.4.3 想要执行特殊类型转换的情况 401A.5 JSON相关的应用话题 403A.5.1 在输出时对输出内容进行加工 403A.5.2 类型因情况而改变的JSON的解析 404A.5.3 转换为通用的数据类型 406A.5.4 JSON Schema 407后记 411