彻底吃透Web服务器,Web容器,Web应用程序服务器与反向代理
作者:网友投稿 时间:2019-05-14 16:58
我们知道,不同肤色的人外貌差别很大,而双胞胎的辨识很难。有意思的是 Web 服务器/Web 容器/Web 应用程序服务器/反向代理有点像四胞胎,在网络上经常一起出现。本文将对这四个概念进行区分。

Web 服务器概念与基本原理
Web 服务器的历史
1989 年,互联网之父 Berners-Lee 向其雇主 CERN 提出了一个新项目,目的是通过使用超文本系统来缓解科学家之间的信息交流。
该项目导致 Berners-Lee 在 1990 年编写了两个方案:
一个名为 World Wide Web 的浏览器。
世界上第一个网络服务器,后来被称为 CERN httpd,它运行在 NeXTSTEP 上在 1991 年至 1994 年期间,用于通过万维网冲浪和交换数据的早期技术的简单性和有效性有助于将其移植到许多不同的操作系统,并将其用于科学组织和大学,然后传播到行业。
1994 年,Berners-Lee 决定组建万维网联盟(W3C),通过标准化过程来管理涉及的许多技术(HTTP,HTML 等)的进一步发展。
就是这台服务器:

Web 服务器的主要功能是存储,处理和传递网页给客户。客户端和服务器之间的通信使用超文本传输协议(HTTP)进行。
交付的页面最常见的是 HTML 文档,除了文本内容之外,还可能包含图像,样式表和脚本。
一个用户代理,通常是 Web 浏览器或 Web 爬虫,通过发起一个 HTTP 请求以获取服务器资源,服务器根据请求返回该资源或由于某种原因响应错误消息。
该资源通常是服务器辅助存储上的真实文件,但这不一定是这种情况,取决于 Web 服务器的实现方式。

虽然主要功能是提供内容,但 HTTP 的完整实现还包括从客户端接收内容的方式。此功能用于提交 Web 表单,包括上传文件。
许多通用 Web 服务器还支持使用 Active Server Pages(ASP),PHP 或其他脚本语言的服务器端脚本。
这意味着 Web 服务器的行为可以在单独的文件中脚本化,而实际的服务器软件保持不变。
通常,此函数用于动态生成 HTML 文档(“即时”),而不是返回静态文档。前者主要用于从数据库检索或修改信息;后者通常快得多,并且更容易被缓存,但不能提供动态内容。
Web 服务器不仅用于为万维网服务。它们也可以被嵌入到诸如打印机,路由器,网络摄像机等设备中,并且仅服务于本地网络。
然后,Web 服务器可以用于监视或管理所讨论的设备的系统的一部分。
这通常意味着客户端计算机上不需要安装其他软件,因为只需要一个网络浏览器(现在大多数操作系统都包含在内)。
Web 服务器工作原理
HTTP 协议基于 TCP 协议上,是一个应用层协议,用于用户代理和 Web 服务器进行通信。
Web 服务器通常采用一问一答的方式进行工作:
在用户代理上用户发起资源请求,请求内容包括但不限于:指定资源的唯一标识 URI,指明动作类型(GET/POST/DELETE/PUT…)
用户代理解析用户输入 URI 并从中获取目标域名,交由 DNS 服务器解析。如果 URI 中指定某 IP 地址,就无需这步。
如果与服务器的会话还没建立,此时先建立 TCP 连接,并完成 HTTP 协商(确定双方均可接受的处理方式,包括协议版本,是否加密,内容格式等等)。
用户代理把请求内容封装成 HTTP 数据包向服务器发送。
服务器接收到资源请求并以之前协商好的方式解包并处理。
服务器请求的资源封装成 HTTP 数据包并返回给用户代理。
接下来重点说说服务器端的工作原理,如下图:

TCP 监听模块:服务器监听某个端口(一般默认是 8080 端口,用户可以设置其他端口),以建立和用户代理之间的连接。一旦建立连接,用户代理的后续 HTTP 请求将不用再进入监听模块。
预处理:此处主要做三件事,从 TCP 报文中获取 HTTP 请求报文,根据和用户代理的协商进行解密,解压,安全处理等等。根据服务器自身的配置进行安全处理,建立会话状态等等。



