什么是 web 服务器?
在这篇文章中我们会重温什么是 web 服务器,它们如何工作,以及为什么它们很重要。
前提: | 你应该已经知道互联网是怎么工作的,并且了解网页、网站、web 服务器和搜索引擎的区别是什么。 |
---|---|
目标: | 了解 web 服务器,明白它大概的工作原理 |
概述
web 服务器一词可以代指硬件或软件,或者是它们协同工作的整体。
- 硬件部分,web 服务器是一台存储了 web 服务器软件以及网站的组成文件(比如,HTML 文档、图片、CSS 样式表和 JavaScript 文件)的计算机。它接入到互联网并且支持与其他连接到互联网的设备进行物理数据的交互。
- 软件部分,web 服务器包括控制网络用户如何访问托管文件的几个部分,至少是一台 HTTP 服务器。一台 HTTP 服务器是一种能够理解 URL(网络地址)和 HTTP(浏览器用来查看网页的协议)的软件。一个 HTTP 服务器可以通过它所存储的网站域名进行访问,并将这些托管网站的内容传递给最终用户的设备。
基本上,当浏览器需要一个托管在网络服务器上的文件的时候,浏览器通过 HTTP 请求这个文件。当这个请求到达正确的 web 服务器(硬件)时,HTTP 服务器(软件)收到这个请求,找到这个被请求的文档(如果这个文档不存在,那么将返回一个 404 响应),并把这个文档通过 HTTP 发送给浏览器。
要发布一个网站,你需要一个静态或动态的服务器。
静态 web 服务器(static web server)由一个计算机(硬件)和一个 HTTP 服务器(软件)组成。我们称它为“静态”是因为这个服务器把它托管文件的“保持原样”地传送到你的浏览器。
动态 web 服务器(dynamic web server)由一个静态的网络服务器加上额外的软件组成,最普遍的是一个应用服务器和一个数据库。我们称它为“动态”是因为这个应用服务器会在通过 HTTP 服务器把托管文件传送到你的浏览器之前会对这些托管文件进行更新。
举个例子,要生成你在浏览器中看到的最终网页,应用服务器或许会用一个数据库中的内容填充一个 HTML 模板。像 MDN 或维基百科这样的网站有成千上万的网页。通常情况下,这类网站只由几个 HTML 模板和一个巨大的数据库组成,而不是成千上万的静态 HTML 文档。这种设置使得维护和提供内容更加容易。
深入探索
回顾一下:要获取一个网页,你的浏览器会向网络服务器发送一个请求,服务器会在自己的存储空间中搜索所请求的文件。找到文件后,服务器读取文件,根据需要进行处理,并将其发送给浏览器。让我们更详细地了解一下这些步骤。
托管文件
一个网络服务器首先需要存储这个网站的文件,也就是说所有的 HTML 文档和它们的相关资源,包括图片、CSS 样式表、JavaScript 文件、字体以及视频。
严格来说,你可以在你自己的计算机上托管所有的这些文件,但是在一个专用的 web 服务器上存储它们会方便得多,因为它
- 专用 web 服务器可用性更强(会一直启动和运行)
- 除去停机时间和系统故障,专用 web 服务器总是连接到互联网。
- 专用 web 服务器可以一直拥有一样的 IP 地址,这也称为专有 IP 地址(不是所有的 ISP 都会为家庭线提供一个固定的 IP 地址)
- 专用 web 服务器往往由第三方提供者维护
因为所有的这些原因,寻找一个优秀的托管提供者是建立你的网站的一个重要部分。比较不同公司提供的服务并选择一个适合你的需求和预算的服务(服务的价格从免费到每月上万美金不等)。你可以在这篇文章中找到更多的细节。
一旦你设置好一个网络托管解决方案,你必须上传你的文件到你的 web 服务器。
通过 HTTP 交流
其次,web 服务器提供了 HTTP(Hypertext Transfer Protocol,超文本传输协议)支持。正如它的名字暗示,HTTP 明确提出了如何在两台计算机间传输超文本(链接的 web 文档)。
协议是一套为了在两台计算机间交流而制定的规则。HTTP 是一个文本化的(textual),无状态的(stateless)协议。
- 文本化
-
所有的命令都是纯文本(plain-text)且人类可读(human-readable)的。
- 无状态
-
无论是服务器还是客户都不会记住之前的交流。举个例子,仅依靠 HTTP,服务器不能记住你输入的密码或者你正处于业务中的哪一步。你需要一个应用服务器来进行这样的工作。(我们会在其他文章中涵盖这类的技术。)
HTTP 为客户和服务器间的如何沟通提供清晰的规则。我们会在日后的一篇技术文章中覆盖 HTTP 本身。就目前而言,只需要知道这几点:
- 通常只有客户端可以发送 HTTP 请求,只会发送到服务器。服务器通常只能响应客户端的 HTTP 请求。服务器也可以通过一种叫做服务器推送的机制,在客户请求之前,将数据填充到客户的缓存中。
- 当通过 HTTP 请求一个文件时,客户端必须提供这个文件的 URL。
- 网络服务器必须应答每一个 HTTP 请求,至少也要回复一个错误信息。
在 web 服务器上,HTTP 服务器负责处理和响应传入的请求。
- 当收到一个请求时,HTTP 服务器首先要检查所请求的 URL 是否与一个存在的文件相匹配。
- 如果是,网络服务器会传送文件内容回到浏览器。如果不是,服务器会检查是否应该动态生成请求所需的文件(参见静态和动态内容)。
- 如果两种处理都不可能,网络服务器会返回一个错误信息到浏览器,最常见的是
404 Not Found
。404 错误太常见以至于很多网页设计者花费许多时间去设计 404 错误页面。
静态和动态内容
粗略地说,一个服务器可以提供静态或者动态的内容。静态意味着“保持原样地提供”。静态的网站是最容易建立的,所以我们建议你制作一个静态的网站作为你的第一个网站。
“动态”意味着服务器会处理内容甚至实时地从一个数据库中产生它。这个方法提供了更多的灵活性,但技术栈更加复杂,使得建立一个网站的挑战大大增加。
不可能建议一个通用的应用服务器适用于所有可能的用例。一些应用服务器设计用于托管和管理博客、知识库或电子商务解决方案,而其他一些则更通用。如果你正在构建一个动态网站,请花时间研究你的需求,并找到最适合你需求的技术。
大多数网站开发者不需要从头开始创建应用服务器,因为有很多现成的解决方案,其中许多都可以高度配置。但是,如果你确实需要创建自己的服务器,那么你可能需要使用服务器框架,利用其现有的代码和库,并仅扩展你需要的部分以满足你的用例。只有相对较少的开发者需要完全从头开始开发服务器:例如,为了满足嵌入式系统上紧张的资源限制。如果你想尝试构建一个服务器,请浏览服务器端网站编程学习路径中的资源。
下一步
现在你已经熟悉了什么是 web 服务器,你可以:
- 钻研在 web 上做某些事情要花费多少
- 学习关于创建一个网页所需要的各种软件
- 移步到某些实用的东西,像是如何上传文件到一个 web 服务器。