《图解HTTP》读后总结及浅谈
本文最后更新于 1140 天前,其中的信息可能已经有所发展或是发生改变。

第一章:了解 Web 及网络基础

1.1 简介

为理解 HTTP 应事先了解一下 TCP/IP 协议族,我们通常使用的网络(包括互联网)是在 TCP/IP 协议族的基础上运作,而 HTTP 属于它内部的一个子集。在互联网上的设备需要相互通信双方就必须要遵从相同的规则,我们把这些规则称为协议。(TCP/IP 是对互联网相关的各类协议族的一个总称包括但不限于:PPPoE、HTTP、TCP、IP、UDP、IEEE 802.3…)

在 TCP/IP 协议族中按照层次从上到下分为:应用层、传输层、网络层、数据链路层

互联网协议套件 - 维基百科

在使用 TCP/IP 协议族进行通信时,客户端会从应用层往下走,服务端会从链路层往上走。客户端在层与层之间传输数据时,每经过一层时会为其加上该层的段首信息。相反,服务端会一层一层的消去首部。这种把数据信息包装起来的办法叫做封装。

1.2 IP、TCP 和 DNS

1.2.1 IP 协议

IP 协议处于网络层,TCP/IP 中的 IP 指的是 IP 协议,与 IP 地址并不是一回事。IP 协议的作用是把各种数据包发送给对方。各种 IP 地址可以和 MAC 地址进行配对。IP 地址可变换,但 MAC 地址基本上不会更改。IP 地址指明了节点被分配到的地址,MAC 地址是指网卡所属的固定地址。

1.2.2 MAC 地址

IP 之间的通信依赖 MAC 地址。通常会使用 ARP 协议来根据通信方的 IP 地址反查出对应的 MAC 地址

1.2.3 TCP 协议

按层次分,TCP 位于传输层,提供字节流服务(Byte Stream Service)—— 为了方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理。一言以蔽之, TCP 协议为了更容易传送大数据才把数据分割,而且 TCP 协议能够确认数据最终是否送达到对方。

为了确认数据是否送达到了对方,TCP 采用了三次握手策略。握手过程中使用了 TCP 的标志(flag)——SYN(synchronize)和 ACK(acknowledgement)。

1.2.4 负责域名解析的 DNS 服务

计算机既可以被赋予 IP 地址,也可以被赋予主机名和域名。DNS 协议提供通过域名查找 IP 地址,或逆向从 IP 地址反查域名的服务。

1.2.5 总结

1.3 URL 和 URI

1.3.1 区别与关系

与 URI(统一资源标识符)相比,我们更熟悉 URL(Uniform Resource Locator,统一资源定位符)。URL 正是使用 Web 浏览器等访问 Web 页面时需要输入的网页地址。比如 https://www.bilibili.com/ 就是 URL。URI 用字符串标识某一互联网资源,而 URL 表示资源的地点(互联网上所处的位置)。可见 URL 是 URI 的子集。URI 可被视为定位符(URL),名称(URN)或两者兼备。统一资源名(URN)如同一个人的名称,而统一资源定位符(URL)代表一个人的住址。换言之,URN 定义某事物的身份,而 URL 提供查找该事物的方法。

1.3.2 URI 格式

表示指定的 URI,要使用涵盖全部必要信息的绝对 URI、绝对 URL 以及相对 URL。

相对 URL,是指从浏览器中基本 URI 处指定的 URL,形如 /image/logo.gif。

绝对 URI 的格式:

登录信息(认证):指定用户名和密码作为从服务器端获取资源时必要的登录信息(身份认证)。此项是可选项。

服务器地址:使用绝对 URI 必须指定待访问的服务器地址。地址可以是类似 hackr.jp 这种 DNS 可解析的名称,或是 192.168.1.1 这类 IPv4 地址 名,还可以是 [0:0:0:0:0:0:0:1] 这样用方括号括起来的 IPv6 地址名。

服务器端口号 :指定服务器连接的网络端口号。此项也是可选项,若用户省略则自动使用默认端口号。

带层次的文件路径 :指定服务器上的文件路径来定位特指的资源。这与 UNIX 系统的文件目录结构相似。

查询字符串 :针对已指定的文件路径内的资源,可以使用查询字符串传入任意参数。此项可选。

片段标识符:使用片段标识符通常可标记出已获取资源中的子资源(文档内的某个位置)。但在 RFC 中并没有明确规定其使用方法。该项也为可选项。

第二章:简单的 HTTP 协议

2.1 HTTP 简介

HTTP 是一种不保存状态的协议,所谓不保存状态是指 HTTP 协议自身并不会对每次的请求和响应之间的通信状态进行保存。所以引入了 cookie 技术来保存通信状态。(注:HTTP 这本书出版较早,现在使用保存状态的技术是由 cookie、session 和 token 共同实现的)

2.2 常用的 HTTP 方法

GET:获取资源

GET 方法是用来请求 URL 指定的资源。指定资源经服务器端解析后返回响应内容

POST:传输实体主体

POST 用于向服务器传输数据,和获取的数据过大时也会使用 POST 方法。

GET 和 POST 的区别:

先下结论,GET 和 POST 方法没有实质区别,只是报文格式不同。

请求参数长度限制:GET 请求长度最多 1024kb,POST 对请求数据没有限制

请求参数:GET 请求参数是通过 URL 传递的,多个参数以 & 连接,POST 请求放在 request body 中。
请求缓存:GET 请求会被缓存,而 POST 请求不会,除非手动设置。
安全性:POST 比 GET 安全,GET 请求在浏览器回退时是无害的,而 POST 会再次请求。
历史记录:GET 请求参数会被完整保留在浏览历史记录里,而 POST 中的参数不会被保留。
编码方式:GET 请求只能进行 url 编码,而 POST 支持多种编码方式。
对参数的数据类型:GET 只接受 ASCII 字符,而 POST 没有限制。

此外,HTTP 还有 PUT、HEAD、DELETE 等方法在此不细细展开。

2.3 HTTP 的持久连接(三次握手四次挥手)

持久连接的特点是,只要任意一端没 有明确提出断开连接,则保持 TCP 连接状态。

三次握手:建立 TCP 连接 四次挥手:断开 TCP 连接

在持久连接中使用管线化技术可以不用等待响应即可直接发送下一个请求。

2.4 使用 cookie 的状态管理

Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存 Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去。

Cookie 信息是在服务端产生发送给客户端进行保存的

第三章 HTTP 报文信息

3.1 HTTP 的请求和响应报文结构

用于 HTTP 协议交互的信息被称为 HTTP 报文。请求端(客户端)的 HTTP 报文叫做请求报文,响应端(服务器端)的叫做响应报文。由 8 位字节流组成,通过 HTTP 通信传输。

请求行:包含用于请求的方法,请求 URI 和 HTTP 版本。

状态行:包含表明响应结果的状态码,原因短语和 HTTP 版本。

首部字段:包含表示请求和响应的各种条件和属性的各类首部。一般有 4 种首部,分别是:通用首部、请求首部、响应首部和实体首部。

其他:可能包含 HTTP 的 RFC 里未定义的首部(Cookie 等)。

3.2 编码传输及分块传输

HTTP 在传输数据过程中通过编码提升传输速率。

3.2.1 报文主体和实体主体的差异

实体:作为请求或响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成。

HTTP 报文的主体用于传输请求或响应的实体主体。 通常,报文主体等于实体主体。只有当传输中进行编码操作时,实体主体的内容发生变化,才导致它和报文主体产生差异。

3.2.2 分割发送实体主体

在 HTTP 通信过程中传输大容量数据时,通过把数据分割成多块能让浏览器逐步显示页面。把实体主体分块的功能称为分块传输编码。分块传输编码会将实体主体分成多个块。每一块都会用 十六进制来标记块的大小,而实体主体的最后一块会使用 “0 (CR+LF)” 来标记。

所谓的块也就是常称的包

第四章 返回结果的 HTTP 状态码

4.1 状态码的类别

借助状态码用户可以知道服务器是否正常处理了请求,状态码种类繁多但常用的大概只要 14 种。

4.2 2XX 成功

4.2.1 200 OK

表示从客户端发来的请求在服务器端被正常处理了。在响应报文内,随状态码一起返回的信息会因方法的不同而发生改变。

4.2.2 204 No Content

该状态码代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。

4.3 3XX 重定向

重点介绍一下 301 重定向和 302 重定向,还有其他状态码可自行查看

4.3.1 301 Moved Permanently

301 重定向是永久性的重定向。该状态码表示请求的资源已被分配了新的 URI,以后应使用资源现在所指的 URI。例如像下方给出的请求 URI,当指定资源路径的最后忘记添加斜杠 “/”,就会产生 301 状态码。

http://excample.com/sample

4.3.2 302 Found

302 重定向是临时性的重定向。该状态码表示请求的资源已被分配了新的 URI,希望用户(本次)能使用新的 URI 访问。和 301 Moved Permanently 状态码相似,但 302 状态码代表的资源不是被永久移动,只是临时性质的。

4.4 4XX 客户端错误

有 400 Bad Request、401 Unauthorized、403 Forbidden、404 Not Found。 重点介绍一下 404 Not Found

4.4.1 404 Not Found

该状态码表明服务器上无法找到请求的资源。除此之外,也可以在服务器端拒绝请求且不想说明理由时使用。

4.5 5XX 服务器端错误

5XX 的响应结果表明服务器本身发生错误。

第五章 Web 服务器

5.1 通信数据转发程序:代理、网关、隧道

5.1.1 代理

代理服务器的基本行为就是接收客户端发送的请求后转发给其他服务器。代理不改变请求 URI,会直接发送给前方持有资源的目标服务器。值得一提的是代理是指对客户端的代理(也称为前向代理),而反向代理是指对服务器的代理。

使用代理服务器可以利用缓存技术减少网络宽带的流量,有时也会为了信息安全而使用代理。

  • 缓存代理

代理转发响应时,缓存代理(Caching Proxy)会预先将资源的副本(缓存)保存在代理服务器上。当代理再次接收到对相同资源的请求时,就可以不从源服务器那里获取资源,而是将之前缓存的资源作为响应返回。

  • 反向代理

反向代理的优点有很多:

对客户端隐藏服务器(集群)的 IP 地址

安全:作为应用层防火墙,为网站提供对基于 Web 的攻击行为(例如 DoS/DDoS)的防护,更容易排查恶意软件

为后端服务器(集群)统一提供加密和 SSL 加速(如 SSL 终端代理)

负载均衡,若服务器集群中有负荷较高者,反向代理通过 URL 重写,根据连线请求从负荷较低者获取与所需相同的资源或备援

对于静态内容及短时间内有大量访问请求的动态内容提供缓存服务

对一些内容进行压缩,以节约带宽或为网络带宽不佳的网络提供服务

preview
图片源自网络

5.1.2 网关

网关的工作机制和代理十分相似。而网关能使通信线路上的服务器 提供非 HTTP 协议服务。

本文链接:《图解HTTP》读后总结及浅谈
本文章由 hiyoung 采用 知识共享署名 - 非商业性使用 - 相同方式共享 4.0 国际许可协议 进行许可,转载请注明出处。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇