侧边栏壁纸
  • 累计撰写 244 篇文章
  • 累计创建 16 个标签
  • 累计收到 0 条评论
隐藏侧边栏

Web 服务器概述与基本工作流程

kaixindeken
2021-04-23 / 0 评论 / 0 点赞 / 92 阅读 / 1,514 字

对于客户端浏览器发起 HTTP 请求想必你已经比较熟悉,那么请求到达服务器之后是怎么被处理的呢,服务器如果根据请求报文根据指定 URL 返回对应的资源呢,针对静态资源和动态资源又是如何区别处理的呢,服务器在应对大量涌入的请求为了提高性能又做了哪些事情来优化呢。

Web 服务器概述

简单来说,Web 服务器就是可以接收 HTTP 请求,然后将响应返回给客户端的软件或设备。Web 服务器实现了 HTTP 协议、管理着 Web 资源,并负责提供 Web 服务器的管理功能(配置、控制、扩展等),由于 Web 服务器主要与 HTTP 通信打交道,所以有时候我们也将其称作 HTTP 服务器,对应的,客户端浏览器可以称作 HTTP 客户端。

Web 服务器与操作系统共同管理 TCP 连接(HTTP 通信基于 TCP 连接),再往下,底层操作系统负责管理计算机网络的硬件设备(比如网卡),以便提供 TCP/IP 网络支持,此外,操作系统还维护着装载 Web 资源的文件系统以及控制计算机活动的进程管理功能。

Web 服务器通常以软件形式呈现(也有集成 Web 服务器软件的硬件设备),当下比较常见的 Web 服务器有 Apache、IIS、Tomcat、Nginx、Lighttpd 等,一个功能完备的 Web 服务器至少需要支持 HTTP/1.1 的各种特性,还要支持丰富的资源类型(MIME)、虚拟主机、访问控制、日志记录、配置、监控和高性能(能支持同时与多个客户端建立连接)等功能。

Web 服务器基本工作流程
通过上面这个简单的示例,我们可以看到 Web 服务器的基本工作流程如下:

  • 建立连接:由于 HTTP 通信是基于 TCP 协议的,所以需要先建立连接才能开始通信,这也是为什么我们在实现 Web 服务器的时候要指定 IP 和端口的原因,客户端可以根据这个 IP 地址和端口号与服务器建立连接(TCP 的三次握手);
  • 接收请求:一旦服务器与客户端建立连接后,服务器就可以接收从客户端发过来的请求报文,第一次请求时先建立连接,对于 HTTP/1.1 来说,默认支持持续连接,所以后续请求都可以在这个连接上进行,不需要额外建立连接;
  • 处理请求:服务器收到请求报文并解析完成后(主要是请求首部),会对请求进行处理,比如 POST 请求需要包含请求实体,判断是否有访问权限,指定路径是否存在,返回缓存还是原始资源,如果是静态资源的话(比如 HTML、图片、CSS 文件等)直接从文件系统获取并返回即可,如果是动态资源的话,还需要通过 CGI 网关请求后端应用程序接口(PHP、Java、Python 等编写的应用程序),如果配置了负载均衡,还要将请求进行转发;
  • 访问资源:服务器根据请求处理结果去指定位置获取资源,如果资源存储在缓存中从缓存获取,存储在文件系统中从文件系统获取,存储在 CDN 中从 CDN 处获取,存储在数据库中则从数据库获取等;
  • 构建响应:请求处理完成并获取到对应的资源后,服务器开始构建响应报文,响应首部和响应实体的设置需要遵循 HTTP 协议规范;
  • 返回响应:响应报文构建完成后,会沿着请求来路将其返回给客户端,如果当前 HTTP 连接是持久连接的话,需要保持连接打开状态,否则会关闭连接,此时,需要注意的是对持久连接而言,响应头中必须包含 Content-Length 首部字段,否则客户端不知道什么时候响应实体结束;
  • 记录日志:当一个 HTTP 事务(请求响应)结束后,Web 服务器通常会在日志中记录该事务。

以上就是 Web 服务器的基本工作流程。

0

评论区