《图解HTTP》读书笔记一

164 阅读6分钟

第一章 了解Web及网络基础

一、HTTP

HTTP(HyperText Transfer Protocol,超文本传输协议),Web 是建立在 HTTP 协议上通信的。

二、TCP/IP

不同的硬件、操作系统之间的通信都需要规则,我们就把这种规则称为协议。而TCP/IP 是互联网相关的各类协议族的总称。

image.png

TCP/IP协议分层

image.png

网络通信步骤:

  1. 作为发送端的客户端在应用层(HTTP 协议)发出一个想看某个 Web 页面的 HTTP 请求;
  2. 在传输层(TCP 协议)把从应用层处收到的数据(HTTP 请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层;
  3. 增加作为通信目的地的 MAC 地址后转发给链路层。

image.png

三、负责传输的 IP 协议

IP网际协议位于网络层,作用是把各种数据包传送给对方,此时便需要知道IP 地址和 MAC地址。

IP 地址指明了节点被分配到的地址,MAC 地址是指网卡所属的固定地址。ARP 是一种用以解析地址的协议,根据通信方的 IP 地址就可以反查出对应的 MAC 地址。

四、确保可靠性的 TCP 协议

TCP 位于传输层,提供可靠的字节流服务。所谓的字节流服务是指,为了方便传输,将大块数据分割成以报文段为单位的数据包进行管理;而可靠是指通过三次握手把数据准确地传给对方,握手过程中使用了 TCP 的标志(flag)——SYN(synchronize)和 ACK(acknowledgement)。

五、负责域名解析的 DNS 服务

提供域名到 IP 地址之间的解析服务,通过域名查找 IP 地址,或逆向从 IP 地址反查域名。

第二章 简单的 HTTP协议

一、请求报文与响应报文

请求报文与响应报文是由请求方法、请求 URI、协议版本、可选的请求首部字段和内容实体构成的。

image.png

响应报文基本上由协议版本、状态码(表示请求成功或失败的数字代码)、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。

image.png

二、 HTTP 方法

image.png

三、HTTP 是一种无状态协议

HTTP 是一种不保存状态,即无状态(stateless)协议。HTTP 协议自身不对请求和响应之间的通信状态进行保存,也就是说在 HTTP 这个级别,协议对于发送过的请求或响应都不做持久化处理,减少服务器的CPU及内存资源的消耗。

引入cookie管理状态

image.png

响应头Set-Cookie字段格式:

<Set-Cookie: sid=1342077140226724; path=/; expires=Wed, 10-Oct-12 07:12:20 GMT>

请求头Cookie字段格式:

Cookie: sid=1342077140226724

值得注意的是,目前Chrome浏览器基于安全策略,默认情况下已不支持非同源发送cookie;虽然可通过修改浏览器配置解决,但每个用户在访问之前都会遇到报错而措手不及,因此建议在项目中寻求更好的解决方法如添加请求头字段。

四、持久连接

HTTP/1.1和一部分的HTTP/1.0想出了持久连接(HTTP keep-alive或HTTP connection reuse)的方法,只要任意一端没有明确提出断开连接,则保持TCP连接状态。因此,减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。另外,减少开销的那部分时间,使HTTP请求和响应能够更早地结束,这样Web页面的显示速度也就相应提高了。

五、管线化

持久连接使得多数请求以管线化(pipelining)方式发送成为可能。从前发送请求后需等待并收到响应,才能发送下一个请求。管线化技术出现后,能够同时并行发送多个请求,而不需要一个接一个地等待响应了。

第三章 HTTP报文内的 HTTP信息

HTTP报文

用于 HTTP 协议交互的信息被称为 HTTP 报文,可分为报文首部报文主体两块。请求端(客户端)的HTTP 报文叫做请求报文,响应端(服务器端)的叫做响应报文

image.png

编码提升传输速率

HTTP 在传输数据时可以按照数据原貌直接传输,也可以在传输过程中通过编码提升传输速率。但是,编码的操作需要计算机来完成,因此会消耗更多的CPU 等资源。

image.png

  • 压缩传输的内容编码

内容编码指明应用在实体内容上的编码格式,并保持实体信息原样压缩。内容编码后的实体由客户端接收并负责解码。如gzip(GNU zip)

  • 分割发送的分块传输编码

分块传输编码:在传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面。分割物称为块(chunk)。

发送多种数据的多部分对象集合

HTTP 协议中采纳了多部分对象集合,发送的一份报文主体内可含有多类型实体。通常是在图片或文本文件等上传时使用。

多部分对象集合包含的对象如下。

  • multipart/form-data:在 Web 表单文件上传时使用。
  • multipart/byteranges:状态码 206 响应报文包含了多个范围的内容时使用。

获取部分内容的范围请求

范围请求:在请求首部指定下载的实体范围Range: bytes =5001-10000

内容协商返回最合适的内容

内容协商:客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源。包含在请求报文中的某些首部字段就是判断的基准(如Accept、Accept-Language)

内容协商技术有以下 3 种类型:

  • 服务器驱动协商 由服务器端进行内容协商。以请求的首部字段为参考,在服务器端自动处理。
  • 客户端驱动协商 由客户端进行内容协商的方式。用户从浏览器显示的可选项列表中手动选择。还可以利用 JavaScript 脚本在 Web 页面上自动进行上述选择。
  • 透明协商 是服务器驱动和客户端驱动的结合体,是由服务器端和客户端各自进行内容协商的一种方法。