第一章
第一章简单的介绍了WWW的历史,以及其周边相关协议,如HTTP、IP、DNS等,而这里,我们主要关注HTTP协议。
HTTP协议:英文名称 HyperText Transfer Protocol
,中文名称 超文本传输协议
,是建立在TCP/IP协议族之上,是一种应用层协议。与它密切相关的其实协议有 DNS、TCP、IP。其中:
DNS
:属于应用层,提供域名到IP的解析服务;TCP
:属于传输层,由握手机制保证了它是一种可靠的字节流服务协议;IP
: 属于网络层,负责传送各类数据包。
HTTP 使用 URL(Uniform Resource Locator,统一资源定位符) 定位要访问的地址,它是 URI(Uniform Resource Identifier ,统一资源标识符) 的子集。
第二章
第二章主要介绍了HTTP的基本概念,准确来说是 HTTP/1.1 版本的相关知识。在这一章我们可以了解到,一次完整的 HTTP 通信由请求和响应两部分构成。请求方法有多种,其中 Web 主要使用:
GET
:获取资源POST
:传输实体主体PUT
:传输文件DELETE
:删除文件HEAD
:获取报文首部OPTIONS
:询问支持的方法
额外的还有
TRACE
:追踪路径CONNECT
:要求用隧道协议连接代理
HTTP/1.0 每次通信都会建立新的 TCP 连接,效率比较低下。为了解决这个问题,在 HTTP/1.1 中提出了持久化连接的概念。当客户端和服务端不主动断开 TCP 连接时,默认会保持 TCP 通道连接状态。持久化连接使得请求以管线化(piplining)方式请求成为可能。管线化请求可以在一个 TCP 中连续发送多个请求,而不是等待上一个请求完成之后再发送下一个。
HTTP 是一种无状态的协议。为了解决这个问题,引入了 Cookie。当服务端响应 Set-Cookie
首部字段时,客户端会将其保存,并在之后的请求中以首部字段 Cookie
发送给服务端。
第三章
第三章是讲 HTTP 通信的报文构成。
我们把 HTTP 协议交互的信息称为 HTTP 报文,客户端的称为请求报文,服务端的称为响应报文。报文由 CRLF
分隔的多行字符串组成。报文可以分为报文首部和报文主体,两者用一个空行来区分,报文主体是非必须的。为了提升 HTTP 传输速率,可以对报文主体进行压缩编码,但这会消耗更多的CPU资源。
第四章
第四章主要介绍了 HTTP 的各类状态码
状态码分类有:
1XX
Informational(信息性状态码) 接收的请求正在处理2XX
Success(成功状态码) 请求正常处理完毕3XX
Redirection(重定向状态码) 需要进行附加操作以完成请求4XX
Client Error(客户端错误状态码) 服务器无法处理请求5XX
Server Error(服务器错误状态码) 服务器处理请求出错
常用的状态码有:
200 OK
: 请求被正常处理204 No Content
:请求已被正常处理,但不返回报文主体206 Partial Content
:客户端进行范围请求,并且服务端成功执行301 Move Permanently
:请求资源永久重定向到Location
指向的新的URL302 Found
:请求的资源临时重定向到新的 URL303 See Other
:请求对应的资源对应另一个URL,应该使用 GET 去获取资源304 Not Modified
:请求的资源没有变更307 Temporary Redirect
:临时重定向400 Bad Request
:由于客户端错误,服务端不能或不会处理该请求401 Unauthorized
:发送的请求需要有HTTP认证信息403 Forbidden
:请求的资源被服务端拒绝404 Not Found
:请求的资源未找到500 Internal Server Error
:服务器错误503 Service Unavailable
:服务器暂时处于超负载或停机维护状态,现在无法处理请求
第五章
第五章主要讲了HTTP的主要用途。
HTTP 最广泛的用途是在在客户端和服务器托管 Web 站点间通信。HTTP/1.1 允许一台服务器搭建多个Web站点,客户端在请求时,必须用 Host
首部完整指定主机名或域名的URI。除此之外,HTTP 通信时,还有一些通信转发的应用程序,如:代理、网关,隧道
第六章
第六章主要介绍了 HTTP 的报文首部和各字段的用法。
首部字段主要分为 4 种类型:
- 通用首部字段
首部字体名 | 说明 |
---|---|
Cache-Contro | 控制缓存的行为 |
Connection | 逐跳首部、连接的管理 |
Date | 创建报方的日期时间 |
Pragma | 报文指令 |
Trailer | 报文末端的首部一览 |
Transfer-Encoding | 指定报文主体的传输编码方式 |
Upgrade | 升级为其它协议 |
Via | 代理服务器的相关信息 |
Warning | 错误通知 |
- 请求首部字段
首部字体名 | 说明 |
---|---|
Accept | 用户代理可处理的媒体类型 |
Accept-Charset | 优先的字符集 |
Accept-Encoding | 优先的内容编码 |
Accept-Language | 优先的语言(自然语言) |
Authorization | Web认证信息 |
Expect | 期待服务器的特定行为 |
Form | 用户的电子邮箱地址 |
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 客户端程序的信息 |
- 响应首部字段
首部字体名 | 说明 |
---|---|
Accept-Ranges | 是否接受字节范围请求 |
Age | 推算美人尖创建经过时间 |
Etag | 资源的匹配信息 |
Location | 令客户端重定向到指定 URI |
Proxy-Authenticate | 代理服务器对客户端的认证信息 |
Retry-After | 对再次发起请求的时机要求 |
Server | HTTP 服务器的安装信息 |
Vary | 代理服务器缓存的管理信息 |
WWW-Authenticate | 服务器对客户端的认证信息 |
- 实体首部字段
首部字体名 | 说明 |
---|---|
Allow | 资源可支持的 HTTP 方法 |
Content-Encoding | 实体主体适用的编码方式 |
Content-Language | 实体主体的自然语言 |
Content-Length | 实体主体的大小(单位:字节) |
Content-Location | 替换对应资源的 URI |
Content-MD5 | 实体主体的报文摘要 |
Content-Range | 实体主体的位置范围 |
Content-Type | 实体主体的媒体类型 |
Expires | 实体主体过期的日期时间 |
Last-Modified | 资源的最后修改日期时间 |
第七章
第七章主要介绍 HTTP 安全相关的内容。
HTTP 是一种明文传输的协议。通信过程中,容易遭到内容窃听、内容篡改、中间人攻击等安全问题。为了解决这些问题,在 HTTP 之上又加了一层SSL(Secure Socket Layer,安全套接层)或 TLS(Transport Layer Security,安全层传输协议) ,这种方式称为是 HTTPS (HTTP Secure,超文本传输安全协议)或 HTTP over SSL 。
为了提高加密通信的效率,HTTPS 通信是非对称加密和对称加密混和的加密机制。先通过非对称加密算法协商对称加密的密钥,后续通信过程中采用对称加密的算法。
第八章
第八章介绍了 HTTP 的认证机制。
HTTP/1.1 的认证方式主要有以下几种:
- BASIC 认证
- DIGEST 认证
- SSL 认证
- FormBase 认证
HTTP 是无状态协议,所以一般用 Cookie 来管理 Session。为了减轻 XSS 攻击带来的损失,建议在 Cookie 内加上 httponly 属性。
第九章
第九章主要介绍了 HTTP/1.1 的瓶颈和一些改善的方法。
HTTP 的瓶颈:
- 一条链接只可发送一个请求
- 请求只能从客户端开始。请求不能接受除响应之外的指令
- 请求首部未经压缩就发送
- 发送冗长的首部。每次发送相同的首部造成浪费较多
解决方法:
- Ajax(Asynchronous JavaScript and XML, 异 步 JavaScript 与 XML 技 术) :只更新局部页面
- Comet:长连接。收到客户端请求后,服务端挂起,直到需要有内容更新时再响应
- SPDY:在会话层对 HTTP 协议增强
- WebSocket:全双工通信
其它功能:
WebDAV(Web-based Distributed Authoring and Versioning,基于万维网 的分布式创作和版本控制)是一个可对 Web 服务器上的内容直接进 行文件复制、编辑等操作的分布式文件系统。