MDN wants to learn about developers like you: https://qsurvey.mozilla.com/s3/MDN-dev-survey

在这篇文章中我们会重温什么是网络服务器,它们如何工作,以及为什么它们很重要。

前提: 您应该已经知道 互联网是怎么工作的,并且了解网页,网站,网络服务器和搜索引擎的区别是什么
目标: 了解网络服务器,明白它大概的工作原理

概述

“网络服务器(Web server)”可以代指硬件或软件,然而它们都是协同工作的。

  1. 在硬件部分,一个网络服务器是一个用来存储网站的组成文件(比如说 HTML 文档,图片,CSS 样式表,和 JavaScript 文件)以及交付它们到终端用户的设备的计算机。它跟互联网连接并可以通过域名像 mozilla.org 来被访问。
  2. 在软件部分,一个网络服务器包括几个控制网络用户如何访问托管文件的部分,至少是一个 HTTP 服务器 [HTTP server]。一个 HTTP 服务器是一个能理解URLs (网络地址) 和 HTTP (你的浏览器查看网页时所用的协议) 的软件。

在最基础的层次,每当一个浏览器需要一个网络服务器上的托管文件时,浏览器会通过 HTTP 请求这个文件。当这个请求到达了正确的网络服务器(硬件),这个 HTTP 服务器(软件)返回所请求的文档,同样通过 HTTP。

Basic representation of a client/server connection through HTTP

要发布一个网站,你需要一个静态或动态的服务器。

静态网络服务器(static web server),或者堆栈,由一个计算机(硬件)和一个 HTTP 服务器(软件)组成。我们称它为 “静态” 因为这个服务器把它的托管文件 “保持原样” 地传送到你的浏览器。

动态网络服务器(dynamic web server 由一个静态的网络服务器加上额外的软件组成,最普遍的是一个应用服务器 [application server] 和一个数据库 [database]。我们称它为 “动态” 因为这个应用服务器会在通过 HTTP 服务器传送托管文件到你的浏览器前,对这些托管文件进行更新。

举个例子,要生成你在浏览器中看到的最终网页,应用服务器或许会用一个数据库中的内容填充一个 HTML 模板。网站像 MDN 或者维基百科 [Wikipedia] 有成千上万的网页,但是它们不是真正的 HTML 文档,它们只是少数的 HTML 模板以及一个巨大的数据库。这样的设置让它更快更简单地维护以及交付内容。

自主学习

还没有可用的资料。请考虑为此投稿 [Please, consider contributing]。

深入探索

要取得一个网页,如同我们已经说过的那样,你的浏览器会传送一个请求到网络服务器,而这个网络服务器会进而在它自己的存储空间中搜索所请求的文件。当找到这文件时,这个服务器会读取它,按需处理它,并且把它传送回浏览器。让我们更仔细地观察这些步骤。

托管文件

一个网络服务器首先需要存储这个网站的文件,也就是说所有的 HTML 文档和它们的相关资源 [related assets],包括图片,CSS 样式表,JavaScript 文件,字形 [fonts] 以及影像。

严格来说,你可以在你自己的计算机上托管所有的这些文件,但是在一个专用的网络服务器上存储它们会方便得多,因为它

  • 会一直启动和运行
  • 会一直与互联网连接
  • 会一直拥有一样的 IP 地址(不是所有的 ISPs 都会为家庭线提供一个固定的 IP 地址)
  • 由一个第三方提供者维护

因为所有的这些原因,寻找一个优秀的托管提供者是建立你的网站的一个重要部分。比较不同服务公司的提议并选择一个适合你的需求和预算的提议(服务的价格从免费到每月上万美金不等)。你可以在这篇文章 [article] 中找到更多的细节。

一旦你设置好一个网络托管解决方案,你只需要去上传你的文件到你的网络服务器 [upload your files to your web server]。

通过HTTP交流

第二点,一个网络服务器提供了 HTTP(超文本传输协议)支持。正如它的名字暗示,HTTP 明确提出了如何在两台计算机间传输超文本(比如说链接的网络文档 [linked web documents])。

一个协议 [protocol] 是一套为了在两台计算机间交流而制定的规则。 HTTP 是一个文本化的 [textual],无状态的 [stateless] 协议。

文本化
所有的命令都是纯文本的 [plain-text] 和人类可读的 [human-readable]。
无状态
无论是服务器还是客户都不会记住之前的交流。举个例子,仅依靠 HTTP,一个服务器不能记住你输入的密码或者你正处于业务中的哪一步。你需要一个应用服务器来进行这样的工作。(我们会在日后的文章中涵盖这类的技术。)

HTTP 为客户和服务器间的如何沟通提供清晰的规则。我们会在日后的一篇技术文章 [technical article] 中覆盖 HTTP 本身。就目前而言,只需要知道这几点:

  • 只有用户可以制定 HTTP 请求,然后只会送到服务器。服务器只可以回复一个客户的 HTTP 请求。
  • 当通过 HTTP 请求一个文件时,客户必须提供这个文件的 URL
  • 网络服务器必须应答每一个 HTTP 请求,至少也要回复一个错误信息。

The MDN 404 page as an example of such error page在一个网络服务器上,HTTP 服务器要为处理和应答到来的请求负责任。

  1. 当收到一个请求时,一个 HTTP 服务器首先要检查所请求的 URL 是否与一个存在的文件相匹配。
  2. 如果是,网络服务器会传送文件内容回到浏览器。如果不是,一个应用服务器会建立必要的文件。
  3. 如果两种处理都不可能,网络服务器会返回一个错误信息到浏览器,最常见的是 “404 未找到” ["404 Not Found"]。(这错误太常见以至于很多网页设计者花费多数时间去设计 404 错误页面 [404 error pages]。)

静态和动态内容

粗略地说,一个服务器可以提供静态或者动态的内容。“静态” 意味着 “保持原样地提供”。静态的网站是最容易设立的,所以我们建议你制作一个静态的网站作为你的第一个网站。

“动态” 意味着服务器会处理内容甚至实时地从一个数据库中产生它。这个解决方案提供了更多的灵活性,但是技术堆栈变得更难去处理,让建立网站更显著地复杂。

以你正在阅读的页面为例子。在正在托管它的网络服务器里,有一个应用服务器会从数据库提取文章内容,安排它的布局,把它放置在一些 HTML 模板中,然后为你传输结果。在这里,这个应用服务器叫做 Kuma 并且是由 Python (使用 Django 构架) 构建的。Mozilla 团队为了 MDN 的特殊要求开发 Kuma,但是这里有很多相似的建立在很多其他技术之上的应用。

这里有太多的应用服务器,所以提供一个具体的服务器是挺难的。有些应用服务器迎合具体的网站类别,像是博客,百科或者电子商店;其他的应用服务器,叫做 CMSs(内容管理系统 [content management systems]),则更加通用。如果你正在开发一个动态网站,花一些时间去选择适合你需求的工具。除非你想要学习一些网络服务器编程 [web server programming](而这本身就是一个令人兴奋的领域!),你不需要去创建你自己的应用服务器。这只是在重新创造轮子。

下一步

现在您已熟悉了网络服务器,您可以

文档标签和贡献者

 此页面的贡献者: BarryLiu1995, GHLgh, ziyunfei, wth
 最后编辑者: BarryLiu1995,