《图灵程序设计丛书:图解HTTP》对互联网基盘——HTTP协议进行了全面系统的介绍。作者由HTTP协议的发展历史娓娓道来,严谨细致地剖析了HTTP协议的结构,列举诸多常见通信场景及实战案例,最后延伸到Web安全、全新技术动向等方面。《图解HTTP》的特色为在讲解的同时,辅以大量生动形象的通信图例,更好地帮助读者深刻理解HTTP通信过程中客户端与服务器之间的交互情况。读者可通过《图灵程序设计丛书:图解HTTP》快速了解并掌握HTTP协议的基础,前端工程师分析抓包数据,后端工程师实现REST API、实现自己的HTTP服务器等过程中所需的HTTP相关知识点本书均有介绍。 《图灵程序设计丛书:图解HTTP》适合Web开发工程师,以及对HTTP协议感兴趣的各层次读者。
上野·宣 ,OWASP 日本分会会长,TRICORDER株式会社董事长。 主要从事安全咨询、风险评估、信息安全教育等工作。著有《今晚我们一起学习邮件协议》(今夜わかるメールプロトコル)、《今晚我们一起学习TCP/IP》(今夜わかるTCP/IP)、《今晚我们一起学习HTTP》(今夜わかるHTTP)。担任The Tangled Web:A Guide to Securing Modern Web Application日文版的审校工作。 于均良(译者),上海交通大学硕士,高级软件工程师,马拉松跑者,四点网创始人。
第1章 了解Web及网络基础1.1 使用HTTP协议访问Web1.2 HTTP的诞生1.2.1 为知识共享而规划Web1.2.2 Web成长时代1.2.3 驻足不前的HTTP1.3 网络基础TCP/IP1.3.1 TCP/IP协议族1.3.2 TCP/IP的分层管理1.3.3 TCP/IP通信传输流1.4 与HTTP关系密切的协议:IP、TCP和DNS1.4.1 负责传输的IP协议1.4.2 确保可靠性的TCP协议1.5 负责域名解析的DNS服务1.6 各种协议与HTTP协议的关系1.7 URI和URL1.7.1 统一资源标识符1.7.2 URI格式第2章 简单的HTTP协议2.1 HTTP协议用于客户端和服务器端之间的通信2.2 通过请求和响应的交换达成通信2.3 HTTP是不保存状态的协议2.4 请求URI定位资源2.5 告知服务器意图的HTTP方法2.6 使用方法下达命令2.7 持久连接节省通信量2.7.1 持久连接2.7.2 管线化2.8 使用Cookie的状态管理第3章 HTTP报文内的HTTP信息3.1 HTTP报文3.2 请求报文及响应报文的结构3.3 编码提升传输速率3.3.1 报文主体和实体主体的差异3.3.2 压缩传输的内容编码3.3.3 分割发送的分块传输编码3.4 发送多种数据的多部分对象集合3.5 获取部分内容的范围请求3.6 内容协商返回最合适的内容第4章 返回结果的HTTP状态码4.1 状态码告知从服务器端返回的请求结果4.2 2XX成功4.2.1 200 OK4.2.2 204 No Content4.2.3 206 Partial Content4.3 3XX重定向4.3.1 301 Moved Permanently4.3.2 302 Found4.3.3 303 See Other4.3.4 304 Not Modified4.3.5 307 Temporary Redirect4.4 4XX客户端错误4.4.1 400 Bad Request4.4.2 401 Unauthorized4.4.3 403 Forbidden4.4.4 404 Not Found4.5 5XX服务器错误4.5.1 500 Internal Server Error4.5.2 503 Service Unavailable第5章 与HTTP协作的Web服务器5.1 用单台虚拟主机实现多个域名5.2 通信数据转发程序:代理、网关、隧道5.2.1 代理5.2.2 网关5.2.3 隧道5.3 保存资源的缓存5.3.1 缓存的有效期限5.3.2 客户端的缓存第6章 HTTP首部6.1 HTTP报文首部6.2 HTTP首部字段6.2.1 HTTP首部字段传递重要信息6.2.2 HTTP首部字段结构6.2.3 4种HTTP首部字段类型6.2.4 HTTP/1.1首部字段一览6.2.5 非HTTP/1.1首部字段6.2.6 End-to-end首部和Hop-by-hop首部6.3 HTTP/1.1通用首部字段6.3.1 Cache-Control6.3.2 Connection6.3.3 Date6.3.4 Pragma6.3.5 Trailer6.3.6 Transfer-Encoding6.3.7 Upgrade6.3.8 Via6.3.9 Warning6.4 请求首部字段6.4.1 Accept6.4.2 Accept-Charset6.4.3 Accept-Encoding6.4.4 Accept-Language6.4.5 Authorization6.4.6 Expect6.4.7 From6.4.8 Host6.4.9 If-Match6.4.10 If-Modified-Since6.4.11 If-None-Match6.4.12 If-Range6.4.13 If-Unmodified-Since6.4.14 Max-Forwards6.4.15 Proxy-Authorization6.4.16 Range6.4.17 Referer6.4.18 TE6.4.19 User-Agent6.5 响应首部字段6.5.1 Accept-Ranges6.5.2 Age6.5.3 ETag6.5.4 Location6.5.5 Proxy-Authenticate6.5.6 Retry-After6.5.7 Server6.5.8 Vary6.5.9 WWW-Authenticate6.6 实体首部字段6.6.1 Allow6.6.2 Content-Encoding6.6.3 Content-Language6.6.4 Content-Length6.6.5 Content-Location6.6.6 Content-MD6.6.7 Content-Range6.6.8 Content-Type6.6.9 Expires6.6.10 Last-Modified6.7 为Cookie服务的首部字段6.7.1 Set-Cookie6.7.2 Cookie6.8 其他首部字段6.8.1 X-Frame-Options6.8.2 X-XSS-Protection6.8.3 DNT6.8.4 P3P第7章 确保Web安全的HTTPS7.1 HTTP的缺点7.1.1 通信使用明文可能会被窃听7.1.2 不验证通信方的身份就可能遭遇伪装7.1.3 无法证明报文完整性,可能已遭篡改7.2 HTTP+加密+认证+完整性保护=HTTPS7.2.1 HTTP加上加密处理和认证以及完整性保护后即是HTTPS7.2.2 HTTPS是身披SSL外壳的HTTP7.2.3 相互交换密钥的公开密钥加密技术7.2.4 证明公开密钥正确性的证书7.2.5 HTTPS的安全通信机制第8章 确认访问用户身份的认证8.1 何为认证8.2 BASIC认证8.3 DIGEST认证8.4 SSL客户端认证8.4.1 SSL客户端认证的认证步骤8.4.2 SSL客户端认证采用双因素认证8.4.3 SSL客户端认证必要的费用8.5 基于表单认证8.5.1 认证多半为基于表单认证8.5.2 Session管理及Cookie应用第9章 基于HTTP的功能追加协议9.1 基于HTTP的协议9.2 消除HTTP瓶颈的SPDY9.2.1 HTTP的瓶颈9.2.2 SPDY的设计与功能9.2.3 SPDY消除Web瓶颈了吗9.3 使用浏览器进行全双工通信的WebSocket9.3.1 WebSocket的设计与功能9.3.2 WebSocket协议9.4 期盼已久的HTTP/2.9.5 Web服务器管理文件的WebDAV9.5.1 扩展HTTP/1.1的WebDAV9.5.2 WebDAV内新增的方法及状态码第10章 构建Web内容的技术10.1 HTML10.1.1 Web页面几乎全由HTML构建10.1.2 HTML的版本10.1.3 设计应用CSS10.2 动态HTML10.2.1 让Web页面动起来的动态HTML10.2.2 更易控制HTML的DOM10.3 Web应用10.3.1 通过Web提供功能的Web应用10.3.2 与Web服务器及程序协作的CGI10.3.3 因Java而普及的Servlet10.4 数据发布的格式及语言10.4.1 可扩展标记语言10.4.2 发布更新信息的RSS/Atom10.4.3 衍生的轻量级易用JSON第11章 Web的攻击技术11.1 针对Web的攻击技术11.1.1 HTTP不具备必要的安全功能11.1.2 在客户端即可篡改请求11.1.3 针对Web应用的攻击模式11.2 因输出值转义不完全引发的安全漏洞11.2.1 跨站脚本攻击11.2.2 SQL注入攻击11.2.3 OS命令注入攻击11.2.4 HTTP首部注入攻击11.2.5 邮件首部注入攻击11.2.6 目录遍历攻击11.2.7 远程文件包含漏洞11.3 因设置或设计上的缺陷引发的安全漏洞11.3.1 强制浏览11.3.2 不正确的错误消息处理11.3.3 开放重定向11.4 因会话管理疏忽引发的安全漏洞11.4.1 会话劫持11.4.2 会话固定攻击11.4.3 跨站点请求伪造11.5 其他安全漏洞11.5.1 密码破解11.5.2 点击劫持11.5.3 DoS攻击11.5.4 后门程序
本书的上一版是2004 年出版的《今夜わかるHTTP》(中文译名: 今晚我们一起学习HTTP,翔泳社)。和当时一样,现在互联网的主流 仍是Web,但人们对Web 的要求却不断地发生变化。Google 在2005 年 推出了地图服务Google Maps,很多人看到这一Web 应用程序的界面后 感到十分震惊。因为在此之前,我们只能借助桌面应用程序或Flash 等 方式,实现流畅滚动及视角放大缩小等功能,如今这些功能仅需一个 Web 浏览器就能呈现了。也许正是由于Google Maps 的出现,人们对 Web 的要求才开始变得多了起来。发送请求、等待响应,这些HTTP 中 稀松平常的功能已经无法满足人们的需求了。于是,Web 不再停留在 HTTP/1.1 版本,在保持HTTP 简洁的同时,也开始开发新的功能。我 之所以要撰写《今夜わかるHTTP》一书,是因为我发现多数Web 应用 程序开发者并不了解支撑Web 基础的HTTP 协议。我坚信通过学习协 议,大家能更深刻地理解Web 开发。即使是在本书撰写完成后的今天, 我的这一想法仍未改变,肯定还有很多开发者尚未了解HTTP 协议。 对HTTP 协议有了更深入的理解后,也许你会从中得到一些启发。 不再囿于HTTP/1.1 版本的制约,你也能开发出Google Maps 那样的应 用程序。 本书不仅面向Web 应用程序的开发者,还面向使用Web 的软件开 发者、Web 风险评估的安全工程师、前端工程师以及Web 使用者等与 Web 相关的所有读者,希望这本书能对大家有所帮助。 写于华盛顿DC 的酒店 2013 年1 月吉日 TRICORDER株式会社 上野宣