web服务器
因此,现在是时候让你了解一下那些著名的网络服务器是什么了。网络服务器只不过是在机器上运行的一个软件,它监听来自特定端口的请求。通常,这个端口是 80,但也可以是任何其他可用的端口。
它们如何工作
下图表示服务器端请求-响应的流程:

网络服务器的工作是将外部请求发送到正确的应用程序,以便对其进行处理。一旦应用程序返回响应,网络服务器就会将该响应发送给客户端。让我们仔细看看所有步骤:
-
客户端(即浏览器)发送请求。请求可以是任何类型—GET 或 POST,只要有效就可以包含任何内容。
-
服务器接收到指向端口的请求。如果该端口上有网络服务器在监听,网络服务器就会控制局面。
-
网络服务器决定哪个网络应用程序(通常是文件系统中的一个文件)需要处理该请求。为了做出决定,网络服务器通常会考虑 URL 的路径;例如, http://myserver.com/app1/hi 会尝试将请求传递给 app1 应用程序,无论它在文件系统中的哪个位置。然而,另一种情况是 http://app1.myserver.com/hi ,它也会转到同一个应用程序。这些规则非常灵活,如何设置取决于网络服务器和用户。
-
网络应用程序在收到网络服务器的请求后,会生成一个响应并将其发送给网络服务器。
-
网络服务器将响应发送到指定的端口。
-
响应最终到达客户端。
PHP 内置服务器
有一些功能强大的网络服务器可以支持高流量负载,如 Apache 或 Nginx,它们的安装和管理都相当简单。在本书中,我们将使用更简单的 PHP 内置服务器。使用它的原因是,你不需要额外的软件包安装、配置和令人头疼的问题,因为它是 PHP 自带的。只需一个命令,你就可以在机器上运行一个网络服务器。
生产 web 服务器 请注意,PHP 内置 Web 服务器可用于测试目的,但强烈建议不要将其用于生产环境。如果你必须建立一个需要公开的服务器,而且你的应用程序是用 PHP 编写的,我强烈建议你选择经典的 Apache (http://httpd.apache.org) 或 Nginx (https:// www.nginx.com)。这两种软件几乎可以在任何服务器上运行,免费且易于安装和配置,更重要的是,它们拥有一个庞大的社区,几乎可以为您遇到的任何问题提供支持。 |
最后,动手实践!让我们尝试使用内置服务器创建第一个网页。为此,请在工作区目录下创建一个 index.php
文件,例如 Documents/workspace/index.php
。该文件的内容应为:
<?php
echo 'hello world';
现在,打开命令行,进入 workspace
目录(可能是通过运行 cd Documents/workspace
命令),然后运行以下命令:
$ php -S localhost:8000
命令行会提示你一些信息,其中最重要的是正在监听什么,应该是指定的 localhost:8000,以及如何停止监听,通常按 Ctrl + C
即可。
现在,让我们打开浏览器,访问 http://localhost:8000。你应该会在一个白色页面上看到 hello world 消息。耶,成功了!如果你有兴趣,可以查看命令行,你会看到通过浏览器发送的每个请求的日志条目。
那么,它到底是如何工作的呢?好吧,如果你再看看前面的图,php -S
命令启动了一个网络服务器—在我们的例子中,监听的端口是 8000 而不是 80。此外,PHP 知道网络应用程序代码将位于启动网络服务器的同一目录:workspace
。还有更多具体选项,但默认情况下,PHP 会尝试执行工作区中的 index.php
文件。
把事情放在一起
让我们尝试将第一个项目(index.html
及其 CSS 和 JS 文件)作为内置服务器的一部分。为此,只需打开命令行并转到这些文件所在的目录,然后用 php -S localhost:8000
启动网络服务器。如果在浏览器中检查 localhost:8000
,就会看到我们的双链接页面。
现在,让我们将新的 index.php
文件移动到同一目录下。您不需要重启网络服务器;PHP 会自动知道这些更改。打开浏览器并刷新页面。现在你看到的应该是 hello world 消息,而不是链接。这里发生了什么?
如果不更改默认选项,PHP 将一直尝试在启动 Web 服务器的目录中查找 index.php
文件。如果找不到,PHP 将尝试查找 index.html
文件。以前,我们只有 index.html
文件,所以 PHP 找不到 index.php
。现在它能找到第一个选项 index.php
,就会加载它。
如果我们想从浏览器中看到 index.html
文件,可以在 URL 中指定它,如 http://localhost:8000/index.html 。如果网络服务器发现你试图访问一个特定的文件,它就会尝试加载它,而不是默认选项。
最后,如果我们试图访问文件系统中没有的文件,网络服务器将返回状态代码为 404 的响应,即未找到文件。如果我们打开浏览器的 "开发工具" 部分并转到 "网络" 部分,就能看到这段代码。
开发者工具是您的朋友 作为网络开发人员,您会发现很少有工具比浏览器的开发工具更有用。不同的浏览器会有不同的开发工具,但所有大牌浏览器,如 Chrome 浏览器或 Firefox 浏览器,都有开发工具。熟悉如何使用它非常重要,因为它可以让您从客户端调试应用程序。 在本书的学习过程中,我将向你介绍其中的一些工具。 |