第一章 了解Web及网络基础
第二章 简单的HTTP协议
2.1 HTTP协议用于客户端和服务器端之间的通信
- 客户端:发出访问请求的一端
- 服务器端:响应资源请求的一端
2.2 通过请求和响应达成通信
- 请求报文:请求方法、请求URI、协议版本、首部字段(可选)、内容实体(可选)
//请求报文示例
POST /form/entry HTTP/1.1
Host: hackr.jp
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 16
name=ueno&age=37
- 响应报文:协议版本、状态码、状态解释文本、首部字段(可选)、实体主体(可选)
//响应报文实例
HTTP/1.1 200 OK
Date: Tue, 10 Jul 2012 06:50:15 GMT
Content-Length: 362
Content-Type: text-html
<html>
...
2.3 HTTP是不保存状态的协议
协议本身不保存一切之前的请求或响应的信息
2.4 请求URI定位资源
URI需要将请求报文中的请求URI包含在内
2.5 告知服务器意图的HTTP方法
- GET:获取资源
- POST:传输实体主体(主要目的不是获取响应的主体内容)
- PUT、HEAD、DELETE、OPTIONS、TRACE、CONNECT
2.6 使用方法下达命令
2.7 持久连接节省通信量
- HTTP协议初始版本:每进行一次HTTP通信就要断开一次TCP连接
- 持久连接:只要任意一端没有提出断开连接,则保持TCP连接状态
- 管线化:接收到响应前就可以继续发送其他请求
2.8 使用cookie的状态管理
- 响应报文:包含一个叫Set-Cookie的首部字段信息
- 请求报文:自动加入Cookie值
- 服务器端:对比根据请求中的Cookie,检查来源客户端,对比记录,得到之前的状态信息
第三章 HTTP报文内的HTTP信息
3.1 HTTP报文
包括请求报文和响应报文,报文分为报文首部和报文主体(可选)
报文首部
(空行[CR+LF])
报文主体
3.2 请求报文及响应报文的结构
- 报文首部结构:
- 请求行/状态行
- 请求首部字段/响应首部字段
- 通用首部字段
- 实体首部字段
- 其他
- 各部分解释:
- 请求行:包含请求方法、请求URI、HTTP版本
- 状态行:状态码、原因短语、HTTP版本
- 首部字段:表示各种条件与属性的各类首部
- 其他:可能包含HTTP的RFC中未定义首部
3.3 编码提升传输速率
- 报文主体通常等于实体主体,只是传输编码是实体主体内容会变化,使他们有差异
- 内容在服务器端编码后传输,可提高传输速率,完成传输后由客户端解码
- 分块传输编码能让实体主体分块,客户端可以逐步显示页面
3.4 发送多种数据的多部分对象集合
3.5 获取部分内容的范围请求
只请求指定的实体范围内的资源
3.6 内容协商返回最合适的内容
- 客户端或服务器端请求首部字段中的语言、字符集、编码方式来使响应结果是合适的内容
- 类型:服务器驱动协商、客户端驱动协商、透明协商
第四章 返回结果的HTTP状态码
4.1 状态码告知从服务器端返回的请求结果
- 1XX:信息性状态码
- 2XX:成功状态码
- 3XX:重定向状态码
- 4XX:客户端错误状态码
- 5XX:服务器端错误状态码
4.2 2XX成功
- 200 OK:请求已正常处理
- 204 No Content:请求处理成功,但没有资源可(需要)返回
- 206 Partial Content:成功执行了范围请求
4.3 3XX重定向
301、302、303浏览器都会采用GET方法对新URI发出请求,虽然301、302更改POST方法为GET是不符标准的。
- 301 Moved Permanently: 永久性重定向
- 302 Found:临时性重定向
- 303 See Other:URI已更新,应使用GET定向获取
- 304 Not Modified:找到资源但不符合条件请求
- 307 Temporary Redirect:临时重定向
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 用单台虚拟主机实现多个域名
5.2 通信数据转发程序:代理、网管、隧道
工作于客户端和服务器之间
- 代理:转发请求或响应,过程中添加via头部;可按是否使用缓存(缓存代理)和是否会修改报文(透明代理、非透明代理)进行分类
- 网关:可以转换通信协议/利用网关提高安全性
- 隧道:用于加密传输,提高安全性,本身透明
5.3 保存资源的缓存
- 缓存代理和客户端都可缓存资源,以减少请求
- 需要确认缓存有效期限,过期后需要更新
第六章 HTTP首部
6.1 HTTP报文首部
- HTTP请求报文首部:方法、URI、HTTP版本、HTTP首部字段等
- HTTP响应报文首部:HTTP版本、状态码、原因短语、HTTP首部字段等
6.2 HTTP首部字段
- HTTP首部字段传递重要信息
- HTTP首部字段结构:
首部字段名:字段值
- 4中HTTP首部字段类型:
- 通用首部字段(General Header Fields)
- 请求首部字段(Request Header Fields)
- 响应首部字段(Response Header Fields)
- 实体首部字段(Entity Header Fields)
- HTTP/1.1首部字段一览
- 非HTTP/1.1首部字段:如Cookie、Set-Cookie、Content-Disposition
- End-to-end首部和Hop-by-hop首部:代理对其处理方式不同
6.3 HTTP/1.1通用首部字段
请求和响应报文双方都会使用的首部
- Cache-Control:控制缓存的操作机制
- Cache-Control指令一览
- 表示是否能缓存的指令
- pulic指令
- private指令
- no-cacahe指令
- 控制可执行缓存的对象的指令
- no-store指令
- 指定缓存期限和认证的指令
- s-maxage指令
- max-age指令
- min-fresh指令
- max-stale指令
- only-if-cached指令
- must-revalidate指令
- proxy-revalidate指令
- no-transform指令
- Cache-Control扩展
- Cache-extension token
- Connection
- 控制不再转发给代理的首部字段
- 管理持久连接
- Date:报文创建日期和时间
- Pragma:向后兼容HTTP1.0的字段
- Trailer:报文主体后的首部字段
- Transfer-Encoding: 传输报文主体的编码方式
- Upgrade:是否可采用更高的传输协议版本
- Via:追踪客户端与服务器之间的请求与响应报文传输路径
- Warning:通常告知用户一些与缓存相关的问题的警告
6.4 请求首部字段
- Accept:指定用户代理可处理的媒体类型及媒体类型的相对优先级
- Accept-Charset:用户代理支持的字符集及其相对优先顺序
- Accept-Encoding:用户代理支持的内容编码及优先级
- Accept-Language:用户代理可处理的自然语言集及其优先级
- Authorization:用户代理认证信息
- Expect:客户端希望服务器出现的某特定行为
- From:用户代理的电子邮件地址
- Host:请求资源所处的互联网主机名和端口号,该字段在请求首部字段中必须存在
- If-Match:If-xxx字段表示条件请求。该字段表示资源的实体标记(ETag)值,匹配时服务器才返回。
- If-Modified-Since:是指定事件后更新过的资源
- If-None-Match:字段值与服务器资源的ETag值不一致是才处理请求
- If-Range:比对其值和资源的ETag或时间是否一致,以确定作为范围请求处理还是返回全体资源
- If-Unmodified-Since:只在指定事件后无更新才处理请求
- Max-Forwards:每经过一个服务器,该值减1,为0时,服务其返回响应
- Proxy-Authorization:客户端在接受到代理服务器的认证质询时,发送的包含认证信息的字段
- Range:范围请求的资源范围
- Referer:请求的原始页面位置URI
- TE:告知服务器客户端可处理的传输编码方式及其优先级
- User-Agent:创建请求的浏览器和用户代理名称等信息
6.5 响应首部字段
- Accept-Ranges:能否处理范围请求
- Age:源服务器在多久前创建了响应
- ETag:告知客户端实体标识
- Location:引导响应接收方至某个与请求URI位置不同的 资源
- Proxy-Authenticate:将代理服务器需求的认证信息发送给客户端
- Retry-After:告知客户端多久后再发送请求
- Server:当前服务器HTTP服务器应用程序信息
- Vary: 控制代理服务器本地缓存使用方法
- WWW-Authenticate:告知客户端访问资源所需认证方案
6.6 实体首部字段
- Allow:通知客户端受支持的请求URI资源的HTTP方法
- Content-Encoding:告知客户端服务器对实体主体部分使用的内容编码方式
- Content-Language:告知客户端实体主体的自然语言
- Content-Length:实体主体部分的大小
- Content-Location:报文主体部分对于的URI
- Content-MD5:用于检验传输完整性的MD5值
- Content-Range:当前返回实体对应哪个部分的范围请求
- Content-Type:实体主体的媒体理想
- Expires:资源失效时间;缓存服务器使用缓存的一个依据
- Last-Modified:资源最终修改时间
6.7 为Cookie服务的首部字段
- Set-Cookie:服务器开始管理客户端状态提供的各种信息
- expires:浏览器可发送Cookie的有效期
- path:限制指定Cookie的发送范围的文件目录
- domain:可发送Cookie的域名结尾
- secure:限制只在HTTPS安全链接下发送Cookie
- HttpOnly:无法使用Javascript脚本获取Cookie
- Cookie:告知服务器客户端希望获得HTTP状态管理支持并在请求中包含从服务器接受到的Cookie
6.8 其他首部字段
- X-Frame-Options
- X-XSS-Protection
- DNT
- P3P
第七章 确保Web安全的HTTPS
7.1 HTTP的缺点
被窃听、伪装、篡改等
- 通信使用明文可能会被窃听
- TCP/IP是可能被窃听的网络
- 机密处理防止被窃听(通信的加密、内容的加密)
- 不验证通信方的身份就可能遭遇伪装
- 任何人都可发起请求
- 查明对手的证书
- 无法证明报文完整性,可能已篡改
- 接受到的内容可能有误
- 如何防止篡改
7.2 HTTP+加密+认证+完整性保护=HTTPS
- HTTP加上加密处理和认证以及完整性保护后即是HTTPS
- HTTPS是身披SSL外壳的HTTP
- 相互交换密钥的公开密钥加密技术
- 共享密钥加密的困境
- 使用两把密钥的公开密钥加密
- HTTPS使用混合加密机制
- 证明公开密钥正确性的证书
- 可证明组织真实性的EV SSL证书
- 用于确认客户端的客户端证书
- 认证机构信誉第一
- 由自认证机构颁发的证书称为自签名证书
- HTTPS的安全通信机制
- SSL和TLS
- SSL速度更慢