跳至内容

通信网络/HTTP 协议

来自维基教科书,开放的书籍,为开放的世界

超文本传输协议 (HTTP)

[编辑 | 编辑源代码]

超文本传输协议 (HTTP) 是一种应用层协议,用于传输万维网上的几乎所有文件和其他数据,无论是 HTML 文件、图像文件、查询结果,还是其他任何内容。通常,HTTP 通过 TCP/IP 套接字进行。

浏览器是 HTTP 客户端,因为它向 HTTP 服务器(Web 服务器)发送请求,然后服务器将响应发送回客户端。 HTTP 服务器的标准(和默认)监听端口是 80,但它们可以使用任何端口。

HTTP 基于 TCP/IP 协议,通常用于互联网上从服务器传输网页到浏览器。

网络应用

客户端-服务器模式

客户端和服务器是端系统,也称为主机。 客户端发起与服务器的联系以请求服务。 例如,对于 Web,客户端在 Web 浏览器中实现,对于电子邮件,它是邮件阅读器。 以类似的方式,服务器通过提供所请求的网页和邮件服务器来提供请求的服务,向客户端传送电子邮件。

对等模式

在网络中,对等方可以随时加入和离开网络。 因此,对等方可以是客户端或服务器。 因此,可扩展性是对等网络的优势。 除了客户端-服务器模式和对等模式之外,它还支持混合对等和客户端-服务器模式,在现实世界中。

HTTP 协议还支持我们在日常生活中使用的另一种或多种应用程序协议。 对于电子邮件,我们使用 SMTP 协议,或者当我们在网络世界中通过电话与其他人交谈(Voip)时。 所以这些应用程序是通过网络世界。 它们定义消息的类型和使用的语法。 它还提供有关采取的行动或结果的信息。

识别应用程序

当必须执行通信过程时,有两件事很重要: 1. IP 地址:这是运行该过程的主机的 IP 地址。 它是一个 32 位地址,是唯一的标识符。 从这个 IP 地址,主机被识别并用于与网络世界通信。 2. 端口号:IP 地址和端口号的组合称为套接字。 因此,套接字 = (IP 地址,端口号)

因此,每当客户端或 Web 用户应用程序与 Web 服务器通信时,它都需要四个重要组件,也称为 TCP 连接元组。 此元组包含:1. 客户端 IP 地址 2. 客户端端口号 3. 源 IP 地址 4. 源端口号

HTTP 协议使用 TCP 协议在客户端(例如 Web 浏览器)和服务器(例如 wikibooks.org)之间建立可靠的连接。 所有 HTTP 命令都以纯文本形式,并且几乎所有 HTTP 请求都使用 TCP 端口 80 发送,当然可以使用任何端口。 HTTP 协议要求每个请求都以 IP 地址形式,而不是 DNS 格式。 所以如果我们想加载 www.wikibooks.org,我们需要先从 DNS 服务器解析 wikibooks.org IP 地址,然后发出该请求。 假设(这不可能)wikibooks.org 的 IP 地址是 192.168.1.1。 然后,要加载此页面,我们将创建一个包含以下文本的 TCP 数据包

GET 192.168.1.1/wiki/Communication_Systems/HTTP_Protocol HTTP/1.1

请求的第一部分,“GET”,是我们的 HTTP 命令。 请求的中间部分是我们想要加载的页面的 URL(通用资源定位器),请求的最后部分(“HTTP/1.1”)告诉服务器将使用哪个版本的 HTTP。

当服务器收到请求时,它将使用 HTTP 标准中定义的状态代码进行回复。 例如

HTTP/1.1 200 OK

或臭名昭著的

HTTP/1.1 404 Not Found

回复的第一部分是正在使用的 HTTP 版本,回复的第二部分是错误代码号,回复的最后部分是纯文本形式的人类可读消息。

万维网

[编辑 | 编辑源代码]

网络世界由许多网页组成,这些网页由 URL 定位的对象组成。 网页主要由 HTML 页面组成,以及一些引用的对象。 称为统一资源定位器的 URL 由主机名和路径名组成。

主机名是 www.sjsu.edu/student/tower.gif


Web 用户通过代理(如 Internet Explorer 或 Firefox)向 Web 服务器发送请求。 此用户代理处理所有对 Web 服务器的 HTTP 请求。 同样适用于 Web 服务器,当它通过服务器(如 Apache 服务器或 MS Internet Information Server)向 Web 用户发送信息时。

HTTP 是 Web 的应用程序层协议,它在客户端-服务器技术上运行。 客户端向服务器请求 HTML 页面,服务器以 HTML 页面进行响应。 在这里,客户端通过其代理请求页面和对象,服务器通过显示来响应它们。




这是如何工作的??

HTTP:TCP 传输服务使用套接字来传输数据。 客户端通过在端口 80 上使用套接字到服务器来发起 TCP 连接。 然后服务器接受来自客户端的连接。 客户端请求 HTML 页面和对象,这些页面和对象随后在客户端浏览器和 Web 服务器之间交换。 完成请求后,TCP 连接关闭。

由于 HTTP 是一种无状态协议。 它不会保留有关先前客户端请求的用户的信息。 所以,这个协议很简单,但是如果你必须维护过去的客户端记录,那么它就很复杂。 因为服务器会维护所有客户端请求,当服务器崩溃时,很难获取信息并使系统非常复杂。

HTTP 连接

[编辑 | 编辑源代码]

网页由对象和 URL 组成。 由于可能存在一个或多个对象或 URL,因此 HTTP 连接的类型决定了请求对象的顺序。

由于 HTTP 不断发展以提高其性能,因此有两种类型的连接:• 非持久性 (HTTP/1.0) • 持久性 (HTTP/1.1)

非持久连接和持久连接之间的主要区别在于传输对象所需的 TCP 连接数量。

非持久性 HTTP - 此连接要求每个对象通过单独建立的 TCP 连接进行传送。 通常,初始 TCP 连接有一个往返时间延迟。 假设用户请求包含文本和 5 个图像的页面。 TCP 连接数量如下





持久性 HTTP - 此连接也称为 HTTP 保持活动或 HTTP 重用。 其理念是使用相同的 TCP 连接来发送和接收使用相同连接的多个 HTTP 请求/响应。 使用持久连接对于提高性能至关重要。

无管道持久性 HTTP - 在此连接中,每个客户端必须等待先前请求的对象收到后才能发出新的请求。 因此,如果不计算初始 TCP 建立(一个 RTT 时间),每个对象至少需要一个 RTT 加上服务器发送对象的时间。

带管道持久性 HTTP - 允许客户端同时发送所有(多个)请求,因此服务器可以同时接收所有请求,然后按顺序发送响应(对象)。 HTTP/1.1 中的管道方法是默认方法。 管道中最短的时间是一个初始 RTT,请求和响应的 RTT 以及服务器发送所有对象的传输时间。

因此,我们可以说,在所有上述类型中,考虑到一些文本和三个对象,所需的 RTT 数量将是

  1. 非持久性 HTTP
  2. 持久性 HTTP
    1. 无管道
    2. 带管道

响应时间(建模)

[编辑 | 编辑源代码]

往返时间 (RTT):将数据包发送到远程主机并接收响应所需的时间:用于衡量给定时间网络的延迟。

响应时间

响应时间表示启动 TCP 连接以及接收下一个响应和请求以及文件传输时间所需的时间。

以下示例表示响应时间 -

       

从上图可以看出,响应时间为

2 RTT + 文件传输时间。

HTTP 消息格式

[编辑 | 编辑源代码]

HTTP 使用两种类型的消息:1. 请求消息 2. 响应消息

1. 请求消息

[编辑 | 编辑源代码]

请求行包含三个部分,用空格分隔:方法名称、请求资源的本地路径和使用的 HTTP 版本。消息格式为 ASCII,以便人类可以阅读。

例如

GET /path/to/the/file.html HTTP/1.0

GET 方法是最常用的方法。它表示“给我这个资源”。URL 的一部分也称为请求 URL。HTTP 必须为大写字母,下一部分表示 HTTP 的版本。

HTTP 请求消息:通用格式

HTTP 请求消息格式如下所示


方法是用于请求 URL 的方法类型。例如 GET、POST 或 HEAD。URL 块包含请求的 URL。版本表示 HTTP 版本。HTTP/1.0 或 HTTP/1.1。标题行包括浏览器类型、主机、对象数量和文件名以及请求页面的语言类型。例如


        

实体主体由 POST 方法使用。当用户在页面上输入信息时,实体主体包含该信息。

HTTP 1.0 包含 GET、POST 和 HEAD 方法。而 HTTP 1.1 除了 GET、POST 和 HEAD 之外,还包含 PUT 和 DELETE。

上传网页中的信息

POST 方法

要求用户输入信息的网页使用 POST 方法。网页用户填写的信息将上传到服务器的实体主体中。

POST 方法中典型的表单提交。内容类型通常为 application/x-www-form-urlencoded,内容长度是 URL 编码表单数据的长度。

URL 方法

URL 方法使用 GET 方法从用户那里获取用户输入。它将要上传到服务器的用户的信息附加到 URL 字段中。

2. 响应消息

[编辑 | 编辑源代码]

HTTP 消息响应行也包含三个部分,用空格分隔:HTTP 版本、表示请求结果的响应状态代码以及状态代码的英文短语。这第一行也称为状态行。

HTTP 响应消息格式如下所示


例如

          
                                 


以下是部分 HTTP 响应状态代码

200 OK 请求成功,生成的资源(例如文件或脚本输出)将返回消息正文中。

404 Not Found 请求的资源不存在。

301 Moved Permanently

302 Moved Temporarily

303 See Other(仅限 HTTP 1.1)

资源已移动到另一个 URL(由 Location:响应头给出),应由客户端自动检索。这通常由 CGI 脚本用来将浏览器重定向到现有文件。

500 Server Error

意外的服务器错误。最常见的原因是服务器端脚本语法错误、失败或无法正常运行。

用户服务器识别

[编辑 | 编辑源代码]

HTTP 协议是一种无状态协议。因此,应该有一种机制来使用 Web 服务器识别用户。有各种技术被使用

1. 身份验证 2. Cookie

1. 身份验证

客户端每次从 Web 服务器请求网页时,服务器都会验证用户。因此,每次网页用户或客户端请求任何对象时,它都必须提供用户名和密码,以便服务器识别。身份验证的需要是为了使服务器能够控制文档。由于 HTTP 协议是无状态的,因此每次请求网页时都必须提供信息。授权在请求的标题行中进行。通常,缓存用于存储网页用户的用户名和密码。因此,每次都不必提供相同的信息。


2. Cookie

Cookie 由 Web 服务器用于识别 Web 用户。它们是存储在 Web 用户磁盘上的少量数据。它在所有主要的网站上使用。因为它们在 Web 世界中具有相对重要的意义。如前所述,cookie 是少量数据,而不是代码。每次浏览器访问服务器站点时,这块小信息都会存储到 Web 用户的机器中。

那么 Cookie 如何精确地发挥作用呢?

当 Web 用户的浏览器从 Web 服务器请求文件时,它会将文件与 Cookie 一起发送。因此,下次 Web 浏览器从同一个服务器请求文件时,它会将之前的 Cookie 发送到 Web 服务器,以便服务器识别该浏览器之前已请求过文件。因此,Web 服务器会协调您对其网站不同页面的访问。

一个典型的例子可能是您进行网上购物时,cookie 用于跟踪您的购物车。

Cookie 的主要四个组成部分是

1. HTTP 响应消息中的 Cookie 标题行。2. HTTP 请求消息中的 Cookie 标题行。3. 存储在用户主机中并由用户浏览器管理的 Cookie 文件。4. 网站上的后端数据库。因此,我们可以说 Cookie 用于保持 Web 浏览器的状态。由于 HTTP 是无状态的,因此服务器应该有一些方法来记住客户端请求的状态。

Cookie 有两种类型,一种是持久性的,另一种是非持久性的。持久性 Cookie 会保留在 Web 浏览器的机器内存中,直到它第一次创建时指定的时间为止。而非持久性 Cookie 是那些在 Web 用户关闭浏览器后立即删除的 Cookie。

Cookie 在当今的互联网世界中带来了许多有用的应用。借助 Cookie,您可以拥有:• 用户帐户 • 网上购物 • Web 门户 • 广告

但是,使用这些 Cookie,您可以秘密地跟踪 Web 用户的习惯。因为每次 Web 浏览器向 Web 服务器发送请求时,它都会包含其 IP 地址、使用的浏览器类型和操作系统。因此,此信息也会记录到服务器的文件中。

广告是 Cookie 中的主要问题。由于它被用来跟踪个人的浏览和购买习惯,因此它不太令人满意。由于服务器的日志文件包含您所有的信息,因此跟踪您就变得容易。广告公司拥有许多客户,包括其他几个广告公司。因此,它与许多其他代理机构签订了合同。它们在其网站上放置一个图像文件。一旦您点击它们,您点击的不是图像,而是到另一个广告公司网站的链接。因此,当您请求该页面时,它会向您发送一个 Cookie。因此,您的 IP 地址被跟踪。每次您请求其网站页面时,它们都可以跟踪您访问其网站的次数、您访问了哪些页面以及访问频率。因此,他们会了解您的兴趣。因此,这些重要信息对于他们来说非常宝贵,他们可以跟踪您的偏好,并根据您的推断来定位您。

Web 缓存(代理服务器)

[编辑 | 编辑源代码]

代理服务器的主要目标是在不涉及原始 Web 服务器的情况下满足客户端的请求。它是一台充当客户端 Web 浏览器和 Web 服务器之间缓冲区的服务器。它接收来自用户的请求,如果包含请求的页面,则对其进行响应。如果它没有请求的页面,那么它会向原始 Web 服务器请求并响应客户端。它使用缓存来存储页面。如果请求的网页在缓存中,它会快速满足请求。


代理服务器的工作原理


代理服务器的两个主要目的是

1. 提高性能 -

因为它会将结果保存一段时间。如果再次请求相同的结果,并且它存在于代理服务器的缓存中,那么可以在更短的时间内满足请求。因此,它极大地提高了性能。主要的在线搜索拥有大量的代理服务器,以服务于大量 Web 用户。

2. 过滤请求 -

代理服务器也可以用来过滤请求。假设一家公司想要限制用户访问特定的一组网站,这可以通过代理服务器来实现。

条件性 GET

条件 GET 与 GET 方法相同,区别在于包含 If-modified-since、If-unmodified-since、If-match、If-None-Match 或 If-Range 头部字段。条件 GET 方法请求可以在满足特定条件的情况下完成。这种方法用于减少网络使用,以便在未修改的情况下利用缓存实体来满足请求,从而避免不必要的传输数据。

条件 GET 的工作原理



当客户端向服务器请求 html 页面时,代理服务器会在其缓存中检查请求的页面。它会检查头部中的 last-modified 日期条目。



如果确定缓存条目中的请求页面已过期,代理服务器会向主服务器请求更新的页面。然后,主服务器会响应该请求,并将页面的更新发送到代理服务器;这些更新将被转发到客户端,并存储在代理服务器缓存中。

HTTPS 是 HTTP 的安全版本。它表示应使用端口 443 而不是端口 80。它被广泛使用,既在电子商务等安全关注领域,也在犯罪预防领域,试图确保最终用户实际上正在获取他们正在寻找的网站。协议标识符 HTTPS 指示用户代理用户正在寻找安全通道。

HTTPS 遵循一个步骤来在网络中建立安全连接。安全连接是自动完成的。步骤如下:

  1. 客户端使用服务器的数字证书验证服务器。
  2. 客户端和服务器协商它们将用于连接的密码套件(一组安全协议)。
  3. 客户端和服务器生成用于加密和解密数据的会话密钥。
  4. 客户端和服务器建立安全加密连接。

当客户端或服务器无法协商密码套件时,HTTPS 会结束其会话。密码套件可以基于以下任何一种:

  1. 基于摘要 -
    • 消息摘要 5 (MD5)
    • 安全哈希算法 1 (SHA-1)
  2. 基于公钥 -
    • Rivest-Shamir-Adelman (RSA) 加密/解密。
    • 数字签名算法 (DSA)
    • Diffie-Hellman 密钥交换/密钥生成。
  3. X.509 数字证书。

本章包含 HTTP,以及网络世界是如何运作的。它详细介绍了在 TCP 连接中用于传输网络世界中数据的各种方法。它包含有关请求和响应方法的详细信息。它还包含用户身份验证方法,例如身份验证和 Cookie。对 Cookie 部分进行了详细解释。还介绍了 HTTP 中的各种连接,例如非持久连接和持久连接。我们还提到了代理服务器及其工作原理。最后,介绍了 HTTP 的安全版本,即 HTTPS。

华夏公益教科书