《图解 HTTP》阅读记录

分享
2021-12-13T02:12:01.156944Z

第一章

第一章简单的介绍了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 指向的新的URL
  • 302 Found:请求的资源临时重定向到新的 URL
  • 303 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 种类型:

  1. 通用首部字段
首部字体名说明
Cache-Contro控制缓存的行为
Connection逐跳首部、连接的管理
Date创建报方的日期时间
Pragma报文指令
Trailer报文末端的首部一览
Transfer-Encoding指定报文主体的传输编码方式
Upgrade升级为其它协议
Via代理服务器的相关信息
Warning错误通知
  1. 请求首部字段
首部字体名说明
Accept用户代理可处理的媒体类型
Accept-Charset优先的字符集
Accept-Encoding优先的内容编码
Accept-Language优先的语言(自然语言)
AuthorizationWeb认证信息
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-AgentHTTP 客户端程序的信息
  1. 响应首部字段
首部字体名说明
Accept-Ranges是否接受字节范围请求
Age推算美人尖创建经过时间
Etag资源的匹配信息
Location令客户端重定向到指定 URI
Proxy-Authenticate代理服务器对客户端的认证信息
Retry-After对再次发起请求的时机要求
ServerHTTP 服务器的安装信息
Vary代理服务器缓存的管理信息
WWW-Authenticate服务器对客户端的认证信息
  1. 实体首部字段
首部字体名说明
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 的认证方式主要有以下几种:

  1. BASIC 认证
  2. DIGEST 认证
  3. SSL 认证
  4. FormBase 认证

HTTP 是无状态协议,所以一般用 Cookie 来管理 Session。为了减轻 XSS 攻击带来的损失,建议在 Cookie 内加上 httponly 属性。

第九章

第九章主要介绍了 HTTP/1.1 的瓶颈和一些改善的方法。

HTTP 的瓶颈:

  1. 一条链接只可发送一个请求
  2. 请求只能从客户端开始。请求不能接受除响应之外的指令
  3. 请求首部未经压缩就发送
  4. 发送冗长的首部。每次发送相同的首部造成浪费较多

解决方法:

  1. Ajax(Asynchronous JavaScript and XML, 异 步 JavaScript 与 XML 技 术) :只更新局部页面
  2. Comet:长连接。收到客户端请求后,服务端挂起,直到需要有内容更新时再响应
  3. SPDY:在会话层对 HTTP 协议增强
  4. WebSocket:全双工通信

其它功能:

WebDAV(Web-based Distributed Authoring and Versioning,基于万维网 的分布式创作和版本控制)是一个可对 Web 服务器上的内容直接进 行文件复制、编辑等操作的分布式文件系统。