《图解HTTP》读后总结
阅读时间:2019.10.30-2019.11.6
阅读心得:
从知乎上看到有人推荐这本书,本身对计算机网络方面学习的比较少,于是就买来这本书开始看。这本书总体看下来比较轻松,因为书中的插画非常卡通,而且因为整本书都是在围绕HTTP进行讲解,所以内容上不会设计太多其他深奥的知识。读完之后,我对HTTP有了一个基本的认识,从以前只知道它是一个协议,到现在能够搞清楚这个协议内部的结构、返回的状态码等等,这都得益于这本小巧但又细致的书。也希望感兴趣的伙伴可以去读一读这本书呀!
阅读总结:
【这本书一共有十一章,每一章都根据侧重点的不同展开介绍。在这里我将本书的章节框架展开,并根据自己读完的理解给每个部分做个小结,也方便自己日后复习。】
第一章:了解Web即网络基础
- 1.1 使用HTTP协议访问Web(什么是HTTP?什么是客户端、服务器端?)
- 1.2 HTTP的诞生(诞生原因:知识共享;WWW(即Web)构建技术:HTML、HTTP、URL)
- 1.3 网络基础TCP/IP
(HTTP是TCP/IP内部的一个子集;TCP/IP的传输流?发送端从应用层往下走,每通过一层增加首部,接收端从链路层往上走,每通过一层删除首部)
TCP/IP分层如下表所示:
应用层 | 各类应用服务,比如FTP(文件传输协议)、DNS(域名系统) |
传输层 | 将计算机之间的数据进行分割、传输;TCP(传输控制协议)、UDP(用户数据报协议) |
网络层 | 处理在网络上流动的数据包,在众多的选项内选择一条传输路线;数据包是网络传输的最小数据单位 |
链路层 | 处理连接网络的硬件部分,包括控制操作系统、硬件的设备驱动、NIC(网络适配器,即网卡)、光纤等物理可见部分 |
- 1.4 与HTTP关系密切的协议:IP\TCP和DNS
(IP网际协议:网络层;IP地址可变换,MAC地址基本不会变;ARP协议:根据IP地址反查MAC地址;IP间的通信依赖MAC地址来搜索下一个中转目标)
(TCP协议:传输层;字节流服务:大数据分割成报文段单位的数据包;三次握手:SYN标志、SYN/ACK标志、ACK标志)
(DNS服务:应用层(HTTP协议也在应用层);域名与IP地址之间(双向查找)的解析服务)
- 1.5 负责域名解析的DNS服务(见上1.4)
- 1.6 各种协议与HTTP协议的关系
(客户端输入网址,DNS解析对应的IP地址,HTTP生成请求报文,TCP分割成报文段,IP边中转边发送,TCP接收报文段并重组,HTTP处理请求内容)
- 1.7 URI和URL
(URI:统一资源标识符,URL:统一资源定位符,URL是URI的子集)
绝对URI的格式:
http:// | user:pass@ | www.example.jp: | 80 | /dir/index.htm? | uid=1# | ch1 |
协议方案名 | 登录信息(认证) | 服务器地址 | 服务器端口号 | 带层次的文件路径 | 查询字符串 | 片段标识符 |
第二章:简单的HTTP协议
- 2.1 HTTP协议用于客户端和服务器端之间的通信(客户端?服务器端?)
- 2.2 通过请求和响应的交换达成通信(请求报文和响应报文的组成?)
- 2.3 HTTP是不保存状态的协议(发送过的请求和响应都不保存状态--引进了Cookie技术来保持状态)
- 2.4 请求URI定位资源(如果对服务器本身发起请求,可用一个*来代替请求URI)
- 2.5 告知服务器意图的HTTP方法
GET | 获取资源 |
POST | 传输实体主体 |
PUT | 传输文件 |
HEAD | 获得报文首部 |
DELETE | 删除文件 |
OPTIONS | 询问支持的方法 |
TRACE | 追踪路径 |
CONNECT | 要求用隧道协议连接代理 |
- 2.6 使用方法下达命令(见上2.5)
- 2.7 持久连接节省通信量(持久连接:任意一端没有明确提出断开连接,则保持TCP连接状态;管线化:不用等待响应亦可直接发送下一个请求)
- 2.8 使用Cookie的状态管理(请求报文(没有Cookie信息的状态)--响应报文(服务器端生成Cookie信息)--请求报文(自动发送保存着的Cookie信息))
第三章:HTTP报文内的HTTP信息
- 3.1 HTTP报文(报文首部+空行+报文主体)
- 3.2 请求报文及响应报文的结构
( 请求报文的结构:请求行+请求首部字段+通用首部字段+实体首部字段+其他;响应报文的结构:请求行+请求首部字段+通用首部字段+实体首部字段+其他)
请求行 | 方法、请求URI、HTTP版本 |
状态行 | 状态码、原因状语、HTTP版本 |
首部字段 | 请求首部、响应首部、通用首部、实体首部 |
其他 | HTTP的RFC里未定义的首部(Cookie等) |
- 3.3 编码提升传输速率
(什么是报文?HTTP通信的基本单位,由8位组字节流组成;什么是实体?请求或响应的有效载荷数据;压缩传输的内容编码;分割发送的分块传输编码)
- 3.4 发送多种数据的多部分对象集合(多部分对象集合(Multipart))
- 3.5 获取部分内容的范围请求(首部字段Range指定资源的byte范围)
- 3.6 内容协商返回最合适的内容(服务器驱动协商,客户端驱动协商,透明协商)
第四章:返回结构的HTTP状态码
- 4.1 状态码告知从服务器端返回的请求结果
类别 | 原因状语 | |
1XX | Informational(信息性状态码) | 接受的请求正在处理 |
2XX | Success(成功状态码) | 请求正常处理完毕 |
3XX | Redirection(重定向状态码) | 需要进行附加操作以完成请求 |
4XX | Client Error(客户端错误状态码) | 服务器无法处理请求 |
5XX | Server Error(服务器端错误状态码) | 服务器处理请求错误 |
- 4.2 2XX成功(200 OK--请求成功;204 No Content--没有资源可返回;206 Partial Content--范围请求)
- 4.3 3XX重定向
(301 Moverd Permanently--永久性重定向;302 Found--临时性重定向;303 See Other--使用GET方法获取资源的另一个URI;
304 Not modified--资源已找到,但未符合条件请求;307 Temporary Redirect--临时重定向,与302类似)
- 4.4 4XX客户端错误
(400 Bad Request--请求报文语法错误;401 Unauthorized--请求需要认证;403 Forbidden--未获得访问授权;404 Not Found--服务器上没有请求的资源)
- 4.5 5XX服务器错误
(500 Internal Server Error--服务器端在执行请求时发生了错误;503 Service Unavailable--服务器处于超负载或者正在停机维护)
第五章:与HTTP协作的Web服务器
- 5.1 用单台虚拟主机实现多个域名(相同的IP地址下,虚拟主机可以寄存多个不同主机名和域名的Web网站)
- 5.2 通信数据转发程序:代理、网关、隧道
(代理:客户端和服务器端的中间人,接收请求和响应;源服务器?每次经过代理追加写入Via首部信息;缓存代理、透明代理)
(网关:对请求进行处理;通过加密提高通信的安全性)
(隧道:在相隔甚远的客户端和服务器两者之间进行中转,保持双方通信连接;通信双方断开连接时隧道结束)
- 5.3 保存资源的缓存
(缓存:代理服务器或者客户端本地磁盘内保存的资源副本)
第六章:HTTP首部
- 6.1 HTTP报文首部
- 6.2 HTTP首部字段
- 6.3 HTTP/1.1通用首部字段
首部字段名 | 说明 |
Cache-Control | 控制缓存的行为 |
Connection | 连接管理 |
Date | 创建报文的日期时间 |
Pragma | 报文指令 |
Trailer | 报文末端的首部一览 |
Transfer-Encoding | 指定报文主体的传输编码方式 |
Upgrade | 升级为其他协议 |
Via | 代理服务器的相关信息 |
Warning | 错误通知 |
- 6.4 请求首部字段
首部字段名 | 说明 |
Accept | 用户代理可处理的媒体类型 |
Accept-Charset | 优先的字符集 |
Accept-Encoding | 优先的内容编码 |
Accept-Language | 优先的语言 |
Authorization | Web认证信息 |
Expect | 期待服务器的特定行为 |
From | 用户的电子邮箱地址 |
Host | 请求资源所在服务器 |
If-Match | 比较实体标记(ETag) |
If-Modified-Since | 比较资源的更新时间 |
If-None-Match | 与If-Match相反 |
If-Range | 资源未更新时发送实体Byte的范围请求 |
If-Unmodified-Since | 与If-Modified-Since相反 |
Max-Forwards | 最大传输逐跳数 |
Proxy-Authorization | 代理服务器要求客户端的认证信息 |
Range | 实体的字节范围请求 |
Referer | 对请求中URI的原始获取方 |
TE | 传输编码的优先级 |
User-Agent | HTTP客户端程序的信息 |
- 6.5 响应首部字段
首部字段名 | 说明 |
Accept-Range | 是否接收字节范围请求 |
Age | 推算资源创建经过时间 |
ETage | 资源的匹配信息 |
Location | 令客户端重定向至指定URI |
Proxy-Authenticate | 代理服务器对客户端的认证信息 |
Retry-After | 对再次发起请求的时机要求 |
Server | HTTP服务器的安装信息 |
Vary | 代理服务器缓存的管理信息 |
WWW-Authenticate | 服务器对客户端的认证信息 |
- 6.6 实体首部字段
首部字段名 | 说明 |
Allow | 资源可支持的HTTP格式 |
Content-Encoding | 实体主体适用的编码方式 |
Content-Language | 实体主体的自然语言 |
Content-Length | 实体主体的大小(单位:字节) |
Content-Location | 替代对应资源的URI |
Content-MD5 | 实体主体的报文摘要 |
Content-Range | 实体主体的位置范围 |
Content-Type | 实体主体的媒体类型 |
Expires | 实体主体过期的日期和时间 |
Last-Modified | 资源的最后修改日期时间 |
- 6.7 为Cookie服务的首部字段
首部字段名 | 说明 | 首部类型 |
Set-Cookie | 开始状态管理所使用的Cookie信息 | 响应首部字段 |
Cookie | 服务器接收到的Cookie信息 | 请求首部字段 |
- 6.8 其他首部字段(不再列举)
第七章:确保Web安全的HTTPS
- 7.1 HTTP的缺点
(a.通信使用明文(不加密),内容可能会被窃听
b.不验证通信方的身份,有可能遭遇伪装
c.无法证明报文的完整性,有肯能已经被纂改)
- 7.2 HTTP+加密+认证+完整性保护=HTTPS
(HTTP通信接口部分用SSL和TLS协议代替即为HTTPS;公开密钥加密技术)
第八章:确认访问用户身份的认证
- 8.1 何为认证(判断访问服务器的对方)
- 8.2 BASIC认证(基本认证;用户id+密码+Base64编码处理)
- 8.3 DIGEST认证(摘要认证;响应摘要+质询码产生的计算结果)
- 8.4 SSL客户端认证(客户端证书+密码)
- 8.5 FormBase认证( 基于表单认证;按登录信息的验证结果认证)
第九章:基于HTTP的功能追加协议
- 9.1 基于HTTP的协议
- 9.2 消除HTTP瓶颈的SPDY
(HTTP瓶颈:一条连接上只能发送一个请求;请求只能从客户端开始;请求/响应首部未经压缩就发送;发送冗长的首部;可任意选择数据压缩格式)
(Ajax:只更新局部界面;Comet:服务器端有更新时载返回响应;SPDY:TCP/IP的应用层和传输层之间通过新加会话层的形式运作,通信中使用SSL)
- 9.3 使用浏览器进行全双工通信的WebSocket(推送功能、减少通信量、握手/请求、握手/响应)
- 9.4 期盼已久的HTTP/2.0(SPDY、HTTP Speed + Mobility、 Network-Friendly HTTP Upgrade)
- 9.5 Web服务器管理文件的WebDav (可对Web服务器上的内容直接进行文件复制、编辑等操作的分布式文件系统)
第十章:构建Web内容的技术
- 10.1 HTML(超文本标记语言、层叠样式表CSS)
- 10.2 动态HTML(调用客户端脚本语言JavaScript实现对HTML的Web页面的动态改造;DOM(文档对象模型)可指定预发生动态变化的HTML元素)
- 10.3 Web应用(通过Web功能提供的应用程序;CGI;Servlet:能在服务器上创建动态内容的程序,是Java语言实现的一个接口,属于Java EE的一部分)
- 10.4 数据发布的格式及语言(XML、RSS、JSON)
第十一章:Web的攻击技术
- 11.1 针对Web的攻击技术(主动攻击:直接访问Web应用,将攻击代码传入;被动攻击:例用全套策略执行攻击)
- 11.2 因输出值转义不完全引发的安全漏洞(跨站脚本攻击(XSS)、窃取用户Cookie、SQL注入攻击、OS命令注入攻击、HTTP首部注入攻击、邮件首部注入攻击)
- 11.3 因设置或设计上的缺陷引发的安全漏洞(强制浏览、不正确的错误消息处理、开放重定向)
- 11.4 因会话管理疏忽引发的安全漏洞(会话劫持、会话固定攻击、跨站点请求伪造)
- 11.5 其他安全漏洞(密码破解、点击劫持、DOS攻击(服务停止攻击/拒绝服务攻击))