《图解HTTP》学习记录

本文概述了Web通信的基础,从HTTP协议如何连接客户端和服务器,TCP/IP协议族的层次结构,到关键协议如IP、TCP、DNS的作用。深入讲解了状态管理、HTTP首部、HTTPS安全增强,以及Web安全挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一章 了解Web及网络基础

1.1 使用http协议访问web

通过发送请求获取服务器资源的 Web 浏览器等,都可称为客户端(client)。

Web 使用一种名为 HTTP(HyperText Transfer Protocol,超文本传输协议)的协议作为规范,完成从客户端服务器端等一系列运作流程。可以说,Web 是建立在 HTTP 协议上通信的。

1.2 网络基础TCP/IP

通常使用的网络(包括互联网)是在 TCP/IP 协议族的基础上运作的。而 HTTP 属于它内部的一个子集。 

1.2.1 TCP/IP协议族

 1.2.2 TCP/IP的分层管理

TCP/IP 协议族按层次分别分 为以下 4 层:应用层、传输层、网络层数据链路层

各层的作用:

应用层:

应用层决定了向用户提供应用服务时通信的活动

TCP/IP 协议族内预存了各类通用的应用服务。比如,FTP(文件传输协议)和 DNS(域名系统)服务就是其中两类。 HTTP 协议也处于该层。 

传输层

传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输

在传输层有两个性质不同的协议:

TCP(传输控制协议)和 UDP(用户数据报协议)。

网络层(又名网络互连层)

网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎样的路径到达对方计算机,并把数据包传送给对方。 与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起的作用就是在众多的选项内选择一条传输路线。

链路层(又名数据链路层,网络接口层)

用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱 动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等物理可见部分(还包括连接器等一切传输媒介)。硬件上的范畴均在链路层的作用范围之内。 

1.2.3 TCP/IP通信传输流

 

1)首先作为发送端的客户端在应用层 (HTTP 协议)发出一个想看某个 Web 页面的 HTTP 请求。

2)接着,为了传输方便,在传输层(TCP 协议)把从应用层处收到的数据(HTTP 请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层。

3)在网络层(IP 协议),增加作为通信目的地的 MAC 地址后转发给链 路层。这样一来,发往网络的通信请求就准备齐全了。

4)接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层。当传输到应用层,才能算真正接收到由客户端发送过来的 HTTP 请求。 

 

 发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该 层所属的首部信息。反之,接收端在层与层传输数据时,每经过一层 时会把对应的首部消去。 这种把数据信息包装起来的做法称为封装(encapsulate)。

1.3 IP、TCP、DNS

与http密不可分的三个协议

1.3.1 负责传输的 IP 协议

IP(Internet Protocol)网际协议位于网络层 

IP 协议的作用是把各种数据包传送给对方。而要保证确实传送到对方那里,则需要满足各类条件。其中两个重要的条件是 IP 地址和 MAC 地址(Media Access Control Address)。 

IP 地址指明了节点被分配到的地址,MAC 地址是指网卡所属的固定地址。IP 地址可以和 MAC 地址进行配对。IP 地址可变换,但 MAC 地址基本上不会更改。 

 

1.3.2 确保可靠性的TCP协议 

 TCP 位于传输层,提供可靠的字节流服务。

所谓的字节流服务(Byte Stream Service)是指,为了方便传输,将大块数据分割成以报文段为单位的数据包进行管理

可靠的传输服务是指,能够把数据准确可靠地传给对方。 TCP 协议为了更容易传送大数据才把数据分割,而且 TCP 协议能够确认数据最终是否送达到对方。 

三次握手策略:

用 TCP 协议把数据包送出去后,TCP 不会对传送后的情况置之不理,它一定会向对方确认是否成功送达。

握手过程中使用了 TCP 的标志 —— SYN(synchronize) 和 ACK(acknowledgement)。 

1)发送端首先发送一个带 SYN 标志的数据包给对方。

2)接收端收到后, 回传一个带有 SYN/ACK 标志的数据包以示传达确认信息。

3)最后,发送端再回传一个带 ACK 标志的数据包,代表“握手”结束。 

 

 1.3.3 负责域名解析的 DNS 服务

DNS(Domain Name System)服务是和 HTTP 协议一样位于应用层的 协议。

提供域名到 IP 地址之间的解析服务。 

DNS 协议提供通过域名 查找 IP 地址,或逆向从 IP 地址反查域名的服务。

 

1.4 各类协议与 HTTP协议的关系

 1.5 URI 和 URL

URI(统一资源标识符)

URL(统一资源定位符)

URI 用字符串标识某一互联网资源,而 URL表示资源的地点(互联 网上所处的位置)。可见 URL是 URI 的子集。

 

第二章 简单的HTTP协议

2.1 HTTP 协议用于客户端和服务器端之间 的通信

 2.2 通过请求和响应的交换达成通信

HTTP 协议规定,请求从客户端发出,最后服务器端响应该请求并返 回。换句话说,肯定是先从客户端开始建立通信的,服务器端在没有 接收到请求之前不会发送响应。

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

 

  

 

响应报文基本上由协议版本、状态码、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。稍后我们会对这些内容进行详细说明。 

 

 

2.3 HTTP是不保存状态的协议 (使用Cookie保存状态)

HTTP 是一种不保存状态,即无状态协议。HTTP 协议自 身不对请求和响应之间的通信状态进行保存。也就是说在 HTTP 这个 级别,协议对于发送过的请求或响应都不做持久化处理。 

可是,随着 Web 的不断发展,因无状态而导致业务处理变得棘手的 情况增多了。比如,用户登录到一家购物网站,即使他跳转到该站的其他页面后,也需要能继续保持登录状态。针对这个实例,网站为了能够掌握是谁送出的请求,需要保存用户的状态

Cookie

HTTP/1.1 虽然是无状态协议,但为了实现期望的保持状态功能,于 是引入了 Cookie 技术。有了 Cookie 再用 HTTP 协议通信,就可以管 理状态了。

2.4 请求 URI 定位资源

HTTP 协议使用 URI 定位互联网上的资源。正是因为 URI 的特定功 能,在互联网上任意位置的资源都能访问到。

 当客户端请求访问资源而发送请求时,URI 需要将作为请求报文中的 请求 URI 包含在内。指定请求 URI 的方式有很多。

 2.5 告知服务器意图的 http 方法

GET :获取资源

 

POST:传输实体主体 

 

PUT:传输文件 

DELETE:删除文件 

DELETE 方法用来删除文件,是与 PUT 相反的方法。DELETE 方法按 请求 URI 删除指定的资源。

 2.7 持久连接节省通信量

HTTP 协议的初始版本中,每进行一次 HTTP 通信就要断开一次 TCP 连接。

 2.7.1 持久连接

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

 

 

 2.7.2 管线化(同时并行发送多个请求)

持久连接使得多数请求以管线化(pipelining)方式发送成为可能。

从前发送请求后需等待并收到响应,才能发送下一个请求。

管线化技术出现后,不用等待响应亦可直接发送下一个请求。 

2.8 使用 Cookie 的状态管理 

Cookie 技术通过在请求响应报文中写入 Cookie 信息来控制客户端的状态。

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

服务器端发现客户端发送过来的 Cookie 后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。

 第三章 HTTP 报文内的HTTP信息

3.1 HTTP 报文

用于 HTTP 协议交互的信息被称为 HTTP 报文。

请求端(客户端)的 HTTP 报文叫做请求报文,响应端(服务器端)的叫做响应报文。

 HTTP 报文本身是由多行(用 CR+LF 作换行符)数据构成的字符串文本。

3.2 请求报文及响应报文的结构 

 3.3 编码提升传输速率

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

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

报文(message)

是 HTTP 通信中的基本单位,由 8 位组字节流组成,通过 HTTP 通信传输。

实体(entity)

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

 3.3.2 压缩传输的内容编码

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

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

在 HTTP 通信过程中,请求的编码实体资源尚未全部传输完成之前, 浏览器无法显示请求页面。在传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面。 

这种把实体主体分块的功能称为分块传输编码

 3.4 获取部分内容的范围请求

以前,用户不能使用现在这种高速的带宽访问互联网,当时,下载一个尺寸稍大的图片或文件就已经很吃力了。如果下载过程中遇到网络 中断的情况,那就必须重头开始。为了解决上述问题,需要一种可恢复的机制。所谓恢复是指能从之前下载中断处恢复下载。 要实现该功能需要指定下载的实体范围。像这样,指定范围发送的请 求叫做范围请求。

对一份 10 000 字节大小的资源,如果使用范围请求,可以只请求 5001~10 000 字节内的资源。

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

4.1 状态码告知从服务器端返回的请求结果

状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结 果。

 

注:4XX主要是客户端错误,5XX主要是服务器错误 

 

4.2 常见状态码

4.2.1 200 OK

 4.2.2 Moved Permanently

永久性重定向。该状态码表示请求的资源已被分配了新的 URI,以后 应使用资源现在所指的 URI。也就是说,如果已经把资源对应的 URI 保存为书签了,这时应该按 Location 首部字段提示的 URI 重新保存。 

 4.2.3 302 Not Modified

该状态码表示客户端发送附带条件的请求 2 时,服务器端允许请求访 问资源,但未满足条件的情况。304 状态码返回时,不包含任何响应 的主体部分。304 虽然被划分在 3XX 类别中,但是和重定向没有关 系。 

4.2.4 400 Bad Request

 该状态码表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。另外,浏览器会像 200 OK 一样对待该状态码。

4.2.5 403 Forbidden

该状态码表明对请求资源的访问被服务器拒绝了。

4.2.6 404 Not Found 

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

4.2.7 500 Internal Server Error

该状态码表明服务器端在执行请求时发生了错误。也有可能是 Web 应用存在的 bug 或某些临时的故障。 

4.2.8 503 Service Unavailable

 该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

第 5 章 与 HTTP 协作的 Web 服务器 

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

5.1.1 代理 

代理

代理是一种有转发功能的应用程序,它扮演了位于服务器和客户 端“中间人”的角色,接收由客户端发送的请求并转发给服务器,同时 也接收服务器返回的响应并转发给客户端。

 

 

 缓存代理

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

透明代理

转发请求或响应时,不对报文做任何加工的代理类型被称为透明代理 (Transparent Proxy)。反之,对报文内容进行加工的代理被称为非透明代理。

5.1.2 网关 

网关

网关是转发其他服务器通信数据服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。有时客户端可能都不会察觉,自己的通信目标是一个网关。 

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

 5.1.3 隧道

隧道

隧道是在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序。 

 

第 6 章 HTTP 首部

HTTP 报文首部 

 HTTP 协议的请求和响应报文中必定包含 HTTP 首部。首部内容为客户端和服务器分别处理请求和响应提供所需要的信息。

6.1 HTTP 首部字段

6.1.2 首部字段结构

HTTP 首部字段结构

HTTP 首部字段是由首部字段名和字段值构成的,中间用冒号“:” 分 隔。

 6.1.2  4 种HTTP 首部字段类型

 

6.1.3 HTTP/1.1 首部字段一览 

通用首部字段

 请求首部字段

 响应首部字段

 实体首部字段

 6.2 HTTP/1.1 通用首部字段

6.2.1 Cache-Control

通过指定首部字段 Cache-Control 的指令,就能操作缓存的工作机制。

 该字段可以分为请求类和相应类:

缓存请求指令:

缓存响应指令: 

使用 no-cache 指令的目的是为了防止从缓存中返回过期的资源

客户端发送的请求中如果包含 no-cache 指令,则表示客户端将不会接收缓存过的响应。于是,“中间”的缓存服务器必须把客户端请求转发给源服务器。 如果服务器返回的响应中包含 no-cache 指令,那么缓存服务器不能对资源进行缓存。源服务器以后也将不再对缓存服务器请求中提出的资源有效性进行确认,且禁止其对响应资源进行缓存操作

 no-store 指令

Cache-Control: no-store

 当指定 max-age 值为 0,那么缓存服务器通常需要将请求转发给源服务器

 

使用 must-revalidate 指令,代理会向源服务器再次验证即将返回的响应缓存目前是否仍然有效

若代理无法连通源服务器再次获取有效资源的话,缓存必须给客户端 一条 504(Gateway Timeout)状态码。

6.2.2 Connection 

Connection 首部字段具备如下两个作用。

(1)控制不再转发给代理的首部字段 

(2)管理持久连接 

HTTP/1.1 版本的默认连接都是持久连接。为此,客户端会在持 久连接上连续发送请求。当服务器端想明确断开连接时,则指定 Connection 首部字段的值为 Close。

 

6.3 请求首部字段 

6.3.1 Accept

Accept 首部字段可通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级。

 如下图:优先返回 json 格式的数据,没有则返回文本格式

分为四类:后面是要求的类型 

 

 6.3.2 Accept-Charset

Accept-Charset 首部字段可用来通知服务器用户代理支持的字符集及 字符集的相对优先顺序。另外,可一次性指定多种字符集。与首部字 段 Accept 相同的是可用权重 q 值来表示相对优先级。 

6.3.3 Accept-Encoding 

 6.3.4 Authorization

 

6.3.5 Host 

 请求被发送至服务器时,请求中的主机名会用 IP 地址直接替换解 决。但如果这时,相同的 IP 地址下部署运行着多个域名,那么服务 器就会无法理解究竟是哪个域名对应的请求。因此,就需要使用首部 字段 Host 来明确指出请求的主机名。若服务器未设定主机名,那直 接发送一个空值即可。

 6.3.6 Referer

客户端一般都会发送 Referer 首部字段给服务器。但当直接在浏览器的地址栏输入 URI,或出于安全性的考虑时,也可以不发送该首部字段。 

 

6.3.7 User-Agent 

6.4 响应首部字段

响应首部字段是由服务器端向客户端返回响应报文中所使用的字段, 用于补充响应的附加信息、服务器信息,以及对客户端的附加要求等信息。

6.4.1 Age 

6.4.2 Location 

6.4.3 Server 

第 7 章 确保 Web 安全的 HTTPS 

在 HTTP 协议中有可能存在信息窃听或身份伪装等安全问题。使用 HTTPS 通信机制可以有效地防止这些问题。

HTTP 主要有这些不足:

(1)通信使用明文(不加密),内容可能会被窃听

(2)不验证通信方的身份,因此有可能遭遇伪装

(3)无法证明报文的完整性,所以有可能已遭篡改 

 7.1 HTTP+ 加密 + 认证 + 完整性保护 =HTTPS

加密方式:

(1)通信的加密

一种方式就是将通信加密。HTTP 协议中没有加密机制,但可以通过和 SSL(Secure Socket Layer,安全套接层)或 TLS(Transport Layer Security,安全层传输协议)的组合使用, 加密 HTTP 的通信内容。

(2)内容的加密

还有一种将参与通信的内容本身加密的方式。由于 HTTP 协议中没有加密机制,那么就对 HTTP 协议传输的内容本身加密。即把 HTTP 报文里所含的内容进行加密处理。

HTTP缺点: 

(1)任何人都可发起请求

(2)查明对手的证书

 虽然使用 HTTP 协议无法确定通信方,但如果使用 SSL则可以。SSL不仅提供加密处理,而且还使用了一种被称为证书的手段, 可用于确定方。

证书由值得信任的第三方机构颁发,用以证明服务器和客户端是 实际存在的。

 

在 HTTP 上再加入加密处理和认证 等机制。我们把添加了加密及认证机制的 HTTP 称为 HTTPS(HTTP Secure)。

 

经常会在 Web 的登录页面和购物结算界面等使用 HTTPS 通信。使用 HTTPS 通信时,不再用 http://,而是改用 https://。另外,当浏览器访 问 HTTPS 通信有效的 Web 网站时,浏览器的地址栏内会出现一个带锁的标记。对 HTTPS 的显示方式会因浏览器的不同而有所改变。 

HTTPS 并非是应用层的一种新协议。只是 HTTP 通信接口部分用 SSL和 TLS协议代替而已。

通常,HTTP 直接和 TCP 通信。当使用 SSL时,则演变成先和 SSL通信,再由 SSL和 TCP 通信了。

 

第 11 章 Web 的攻击技术

11.1 针对 Web 的攻击技术

目前,来自互联网的攻击大多是冲着 Web 站点来的,它们大多把 Web 应用作为攻击目标。

针对 Web 应用的攻击模式 

1)以服务器为目标的主动攻击

主动攻击(active attack)是指攻击者通过直接访问 Web 应用, 把攻击代码传入的攻击模式。由于该模式是直接针对服务器上的资源进行攻击,因此攻击者需要能够访问到那些资源。主动攻击模式里具有代表性的攻击是 SQL注入攻击OS 命令注入攻击

 

2)以服务器为目标的被动攻击

被动攻击(passive attack)是指利用圈套策略执行攻击代码的攻击模式。在被动攻击过程中,攻击者不直接对目标 Web 应用访问发起攻击。

被动攻击通常的攻击模式如下所示:

步骤 1: 攻击者诱使用户触发已设置好的陷阱,而陷阱会启动发 送已嵌入攻击代码的 HTTP 请求。

步骤 2: 当用户不知不觉中招之后,用户的浏览器或邮件客户端 就会触发这个陷阱。

步骤 3: 中招后的用户浏览器会把含有攻击代码的 HTTP 请求发 送给作为攻击目标的 Web 应用,运行攻击代码。

步骤 4: 执行完攻击代码,存在安全漏洞的 Web 应用会成为攻 击者的跳板,可能导致用户所持的 Cookie 等个人信息被窃取, 登录状态中的用户权限遭恶意滥用等后果。

被动攻击模式中具有代表性的攻击是跨站脚本攻击跨站点请求伪造

 跨站脚本攻击

跨站脚本攻击(Cross-Site Scripting,XSS)是指通过存在安全漏洞的 Web 网站注册用户的浏览器内运行非法的 HTML标签或 JavaScript 进行的一种攻击。

跨站脚本攻击有可能造成以下影响。

1)利用虚假输入表单骗取用户个人信息。

2)利用脚本窃取用户的 Cookie 值,被害者在不知情的情况下, 帮助攻击者发送恶意请求。

3)显示伪造的文章或图片。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小印z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值