HTTP本身不能作为应用程序协议运行。它需要以硬件和软件解决方案的形式提供基础设施,这些解决方案提供不同的服务,并使通过万维网的通信成为可能和有效的。
这是HTTP系列的第二部分。
在这里,您将了解更多信息:
- Web服务器
- 代理服务器
- 高速缓存
- 网关,隧道和中继
- 网络爬虫
这些是我们互联网生活中不可或缺的一部分,您将准确了解每一项的目的是什么,以及它是如何运作的。这些知识将帮助您连接第一篇文章中的点,并更好地了解HTTP通信的流程。
Web服务器
正如第一篇文章所解释的那样,Web服务器的主要功能是存储资源并在接收请求时为它们提供服务。您使用Web客户端(也称为Web浏览器)访问Web服务器,然后获取所请求的资源或更改现有资源的状态。使用Web爬虫也可以自动访问Web服务器,我们将在本文后面讨论。
一些最流行的Web服务器,你听说过的可能是Apache HTTP Server,Nginx,IIS等。
Web服务器可以从简单易用,到复杂和复杂的软件。现代Web服务器能够执行许多不同的任务。Web服务器应该能够执行的基本任务:
- 设置连接 - 接受或关闭客户端连接
- 接收请求 - 读取HTTP请求消息
- 处理请求 - 解释请求消息并采取措施
- 访问资源 - 访问消息中指定的资源
- 构造响应 - 创建HTTP响应消息
- 发送响应 -将响应 发送回客户端
- 日志事务 - 在日志文件中写入已完成的事务
我将在几个不同的阶段分解Web服务器的基本流程。这些阶段代表了Web服务器流程的一个非常简化的版本。
阶段1:设置连接
当Web客户端想要访问Web服务器时,它必须尝试打开新的TCP连接。另一方面,服务器尝试提取客户端的IP地址。之后,服务器决定打开或关闭与该客户端的TCP连接。
如果服务器接受连接,它会将其添加到现有连接列表中并监视该连接上的数据。
如果客户端未经授权或列入黑名单(恶意),它也可以关闭连接。
服务器还可以尝试使用“反向DNS”来识别客户端的主机名。记录消息时此信息可以提供帮助,但主机名查找可能需要一段时间,从而减慢了事务的速度。
阶段2:接收/处理请求
解析传入请求时,Web服务器会解析消息请求行,标题和正文(如果提供)中的信息。需要注意的一点是,连接可以随时暂停,在这种情况下,服务器必须临时存储信息,直到它收到其余数据。
高端Web服务器应该能够打开许多同时连接。这包括来自同一客户端的多个同时连接。典型的网页可以从服务器请求许多不同的资源。
阶段3:访问资源
由于Web服务器主要是资源提供者,因此他们有多种方式来映射和访问资源。
最简单的方法是映射资源是使用请求URI在Web服务器的文件系统中查找文件。通常,资源包含在服务器上的特殊文件夹中,名为docroot。例如,Windows服务器上的docroot可以位于F: WebResources 上。如果GET请求想要访问/images/codemazeblog.txt上的文件,服务器会将其转换为F: WebResources images codemazeblog.txt并在响应消息中返回该文件。当Web服务器上托管多个网站时,每个网站都可以拥有单独的docroot。
如果Web服务器收到对目录而不是文件的请求,它可以通过几种方式解决它。它可以返回错误消息,返回默认索引文件而不是目录,或扫描目录并返回包含内容的HTML文件。
服务器还可以将请求URI映射到动态资源 - 生成某些结果的软件应用程序。有一类称为应用程序服务器的服务器,其目的是将Web服务器连接到复杂的软件解决方案并提供动态内容。
阶段3:生成并发送响应
一旦服务器识别出它需要服务的资源,它就形成响应消息。响应消息包含状态代码,响应标头和响应正文(如果需要)。
如果正文存在于响应中,则消息通常包含描述正文大小的Content-Length标头和描述返回资源的MIME类型的Content-Type标头。
生成响应后,服务器会选择发送响应所需的客户端。对于非持久连接,服务器需要在发送整个响应消息时关闭连接。
阶段4:记录
事务完成后,服务器会将所有事务信息记录在文件中。许多服务器提供日志记录定制。