第二部分. Web 服务器简介
简介¶
HTTP协议¶
HTTP (HyperText Transfer Protocol,超文本传输协议) 自1990年以来一直是互联网上使用最广泛的协议。
该协议允许在浏览器(客户端)和Web服务器(在UNIX机器上称为httpd
)之间,通过一个称为URL的字符串来传输文件(主要是HTML格式,但也包括CSS、JS、AVI等)。
HTTP是一种在TCP (Transmission Control Protocol,传输控制协议) 之上运行的“请求-响应”协议。
- 客户端打开与服务器的TCP连接并发送一个请求。
- 服务器根据其配置分析请求并作出响应。
HTTP协议是“无状态的”:它不会保留从一个请求到下一个请求的客户端状态的任何信息。PHP、Python或Java等动态语言会在内存中存储客户端会话信息(例如在电子商务网站上)。
当前的HTTP协议有广泛使用的1.1版本,以及正在被采纳的2和3版本。
HTTP响应是服务器发送给浏览器的一组行。它包括:
-
状态行:使用代码和解释性文本指定协议版本和请求的处理状态。该行包含三个由空格分隔的元素:
- 使用的协议版本
- 状态码
- 代码的含义
-
响应头字段:这些可选行提供了关于响应和/或服务器的附加信息。每行由一个限定头部类型的名称组成,后跟一个冒号(:)和头部值。
-
响应体:包含所请求的文档。
下面是一个HTTP响应的例子
$ curl --head --location https://docs.rocky-linux.cn
HTTP/2 200
accept-ranges: bytes
access-control-allow-origin: *
age: 109725
cache-control: public, max-age=0, must-revalidate
content-disposition: inline
content-type: text/html; charset=utf-8
date: Fri, 21 Jun 2024 12:05:24 GMT
etag: "cba6b533f892339d3818dc59c3a5a69a"
server: Vercel
strict-transport-security: max-age=63072000
x-vercel-cache: HIT
x-vercel-id: cdg1::pdqbh-1718971524213-4892bf82d7b2
content-length: 154696
注意
学习如何使用curl
命令将对您将来的服务器故障排除非常有帮助。
Web服务器的作用是将URL转换为本地资源。访问https://docs.rocky-linux.cn/页面就像向该机器发送一个HTTP请求。DNS服务起着至关重要的作用。
URL¶
URL (Uniform Resource Locator,统一资源定位符) 是一个用于在Internet上标识资源的ASCII字符串。它通常被称为Web地址。
URL有三个部分:
<protocol>://<host>:<port>/<path>
-
协议名称:这是用于在网络上通信的语言,例如HTTP、HTTPS、FTP等。使用最广泛的协议是HTTP(超文本传输协议)及其安全版本HTTPS,用于交换HTML格式的网页。
-
登录名和密码:此选项允许您指定访问安全服务器的参数。不推荐这样做,因为密码在URL中是可见的(出于安全原因)。
-
主机:这是托管所请求资源的计算机的名称。请注意,也可以使用服务器的IP地址,但这会降低URL的可读性。
-
端口号:这与一项服务相关联,该服务使服务器能够知道所请求资源的类型。HTTP协议的默认端口是80,HTTPS是443。因此,当协议是HTTP或HTTPS时,端口号是可选的。
-
资源路径:这部分让服务器知道资源的具体位置。通常,它是所请求文件的位置(目录)和文件名。如果地址中没有指定位置,则表示是主机的首页。否则,它表示要显示的页面的路径。
端口¶
HTTP请求将到达运行在主机上的服务器的80端口(HTTP的默认端口)。但是,管理员可以自由选择服务器的监听端口。
HTTP协议有一个安全版本:HTTPS协议(端口443)。使用mod_ssl
模块实现此加密协议。
也可以使用其他端口,例如8080
端口(Java EE应用服务器)。
Apache和Nginx¶
Linux上最常见的两个Web服务器是Apache和Nginx。我们将在接下来的章节中讨论它们。
作者:Antoine Le Morvan
贡献者:Steven Spencer, Ganna Zhyrnova