
HTTP协议是Web通信的基石,它是一种无状态 的请求/响应协议,通常基于TCP/IP协议族,通过客户端(如浏览器)向服务器发送请求,服务器返回响应来完成一次数据交换。
第1部分:HTTP协议本身
第1-2章:基础概念与网络基础
1. Web与网络基础
1)TCP/IP协议族:HTTP是其中的一个子集,分层管理(应用层、传输层、网络层、数据链路层)。
2)IP协议(网络层):负责把数据包传送给对方,依靠IP地址和MAC地址。
3)TCP协议(传输层) :提供可靠的字节流服务,采用三次握手策略确保数据准确送达。
4)DNS服务(应用层):负责域名解析,将域名转换为IP地址。
2. 简单的HTTP协议
1)请求/响应模型:客户端发起请求,服务器端回复响应。
2)HTTP是不保存状态的协议:协议本身不对请求和响应之间的通信状态进行保存。这是Cookie和Session技术出现的原因。
3)请求报文结构:
① 请求行(方法、URI、协议版本)
② 请求头(各种首部字段)
③ 空行
④ 请求体(报文主体)
4)响应报文结构:
① 状态行(协议版本、状态码、状态短语)
② 响应头(各种首部字段)
③ 空行
④ 响应体(报文主体)
5)HTTP方法:
① GET:获取资源。
② POST:传输实体主体。
③ PUT:传输文件(由于安全性等问题,一般不使用)。
④ HEAD:获得报文首部,用于确认URI的有效性等。
⑤ DELETE:删除文件(同样因安全性一般不使用)。
⑥ OPTIONS:询问支持的方法。
⑦ TRACE:追踪路径,用于诊断,容易引发XST攻击。
⑧ CONNECT:要求用隧道协议连接代理,主要用于SSL加密。
第3章:HTTP报文内的信息
1. 编码提升传输速率
1)内容编码:压缩传输内容,如gzip、deflate。
2)分块传输编码:将报文主体分块发送,用于边生成内容边发送(如动态页面)。
2. 多部分对象集合
报文主体内可含有多类型实体,如上传表单时同时包含文本和文件。
3. 范围请求
通过指定Range头字段,可以只下载部分内容,用于断点续传。
4. 内容协商
客户端和服务器就响应的资源内容进行交涉,提供最适合用户的版本(如语言、字符集、编码方式)。机制有:服务器驱动、客户端驱动、透明协商。
第4章:返回结果的HTTP状态码
状态码负责表示客户端请求的返回结果,是判断服务器处理状态的重要依据。
1)1xx(信息性):接收的请求正在处理。
2)2xx(成功):请求正常处理完毕。
① 200 OK:请求成功。
② 204 No Content:请求成功,但响应报文无主体。
③ 206 Partial Content:客户端进行了范围请求,服务器成功执行。
3)3xx(重定向):需要进行附加操作以完成请求。
① 301 Moved Permanently:永久重定向。
② 302 Found:临时重定向。
③ 304 Not Modified:客户端有缓存,且资源未改变,服务器告诉客户端继续使用缓存。
4)4xx(客户端错误):服务器无法处理请求。
① 400 Bad Request:请求报文存在语法错误。
② 401 Unauthorized:需要认证。
③ 403 Forbidden:请求被服务器拒绝(权限不足)。
④ 404 Not Found:服务器上找不到请求的资源。
5)5xx(服务器错误):服务器处理请求出错。
① 500 Internal Server Error:服务器内部错误。
② 503 Service Unavailable:服务器超负载或停机维护。
第5章:与HTTP协作的Web服务器
1. 虚拟主机
一台物理服务器可以托管多个域名,通过HTTP请求头中的Host字段来区分。
2. 通信数据转发程序
1)代理 :位于客户端和服务器之间,起中转作用。可用于缓存、访问控制、日志记录等。分为缓存代理 和透明代理。
2)网关:转发其他服务器通信数据的服务器,常用于将HTTP请求转换为其他协议,如数据库连接。
3)隧道:在相隔甚远的客户端和服务器之间进行中转,并保持双方通信连接的应用程序,如SSL隧道。
第2部分:HTTP的强化与安全
第6章:HTTP首部
首部是HTTP的关键组成部分,它给请求和响应报文附加了大量额外信息。
1. 通用首部字段
请求和响应报文都会使用的首部。
Cache-Control:控制缓存的行为。
Connection:管理持久连接(Keep-Alive)或逐跳首部。
2. 请求首部字段
客户端使用的首部。
Host:指定请求资源的主机和端口。
User-Agent:将创建请求的浏览器和用户代理名称等信息传达给服务器。
Accept:告知服务器用户代理能够处理的媒体类型及相对优先级。
Authorization:认证信息。
If-Modified-Since / If-None-Match:用于条件请求,与缓存相关。
3. 响应首部字段
服务器使用的首部。
Location:将响应接收方引导至某个与请求URI位置不同的资源(用于重定向)。
Server:包含服务器的软件信息。
ETag:资源的唯一标识,与缓存相关。
4. 实体首部字段
针对请求和响应报文的实体部分使用的首部。
Content-Type:实体主体的媒体类型。
Content-Length:实体主体的大小。
Content-Encoding:实体主体适用的编码方式。
Expires:实体主体过期的日期时间。
Last-Modified:资源的最后修改日期时间。
第7章:确保Web安全的HTTPS
1. HTTP的缺点
1)通信使用明文,内容可能被窃听。
2)不验证通信方身份,可能遭遇伪装。
3)无法证明报文的完整性,内容可能已被篡改。
2. HTTPS = HTTP + 加密 + 认证 + 完整性保护
1)加密(防窃听):通过与SSL(或其后续版本TLS)组合使用,对通信内容进行加密。
2)认证(防伪装) :通过证书来验证通信方的身份。
3)完整性保护(防篡改):通过校验和来确保数据在传输过程中没有被修改。
3. SSL/TLS工作机制
1) 采用公开密钥加密 (非对称加密)和共享密钥加密(对称加密)混合的机制。
2)握手过程:使用公钥加密安全地交换共享密钥,之后使用该共享密钥进行高速的对称加密通信。
第8章:确认访问用户身份的认证
1. BASIC认证
简单地将用户名密码Base64编码后发送,安全性极低。
2. DIGEST认证
使用质询/响应的方式,不直接发送密码,比BASIC安全,但仍不够强。
3. SSL客户端认证
依靠HTTPS的客户端证书完成认证,安全性最高,但部署成本高。
4. 基于表单的认证 :最常用
由Web应用自行管理认证,通常使用Cookie来管理会话(Session)。
第9章:基于HTTP的功能追加协议
1. HTTP/1.1的瓶颈
一条连接上只能发送一个请求(现代浏览器通过并行连接缓解)。
请求只能从客户端开始,服务器不能主动推送。
报文首部冗长,且每次发送相似首部,造成浪费。
2. Ajax与Comet
Ajax:异步JavaScript与XML技术,实现局部页面刷新,改善用户体验。
Comet:模拟服务器推送,但连接长期占用,资源消耗大。
3. SPDY
由Google推出,旨在解决HTTP/1.1的性能瓶颈,是HTTP/2的基础。核心特性包括:多路复用、请求优先级、压缩HTTP首部、服务器推送。
4. WebSocket
为了实现全双工通信,由HTTP升级而来。一旦建立连接,客户端和服务器可以平等地相互发送消息,适用于实时应用(如聊天室、游戏)。
第3部分:前沿与扩展
第10-11章:构建Web内容的技术与Web攻击技术
1. Web内容技术
简要介绍了HTML、CSS、DOM、JavaScript、CGI、RESTful API等。
2. Web攻击技术
1)主动攻击 :直接攻击服务器,如SQL注入 、OS命令注入。
2)被动攻击 :设陷阱利用用户身份攻击,如XSS(跨站脚本攻击) 、CSRF(跨站请求伪造)。
书中详细讲解了这些攻击的原理以及如何通过HTTP协议的特性(如验证输入输出、使用Token等)进行防御。
💡总结与知识脉络图
可以将《图解HTTP》的核心知识点梳理为以下脉络:
1)基础(通信如何建立): TCP/IP -> DNS -> HTTP请求/响应模型
2)核心(报文如何构成): 方法 -> 状态码 -> 首部字段 -> 编码/协商
3)协作(如何扩展与优化): 虚拟主机 -> 代理/网关/隧道 -> 缓存机制
4)安全(如何保证可靠): HTTP缺点 -> HTTPS(SSL/TLS) -> 各种认证方式 -> 常见Web攻击与防御
5)演进(如何更高效) : HTTP/1.1瓶颈 -> Ajax/Comet -> SPDY -> HTTP/2(多路复用、首部压缩、服务器推送) -> WebSocket
希望这份详细的梳理能帮助你全面掌握《图解HTTP》的核心内容。这本书是理解现代Web开发底层原理的绝佳起点。