《HTTP权威指南》-第5章 Web服务器
5.1 各种形状和尺寸的Web目ll务器
5.1.1 Web服务器的实现
5.1 .2 通用软件Web服务器
- apcahe
- iis
- ……
5.1.3 Webf服务器设备
5.1 .4 嵌入式Web服务器
5.2 最小的Perl Web服务器
5.3 实际的Web服务器会做些什么
(1)建立连接-一接受一个客户端连接,或者如果不希望与这个客户端建立连接,就将其关闭。
(2)接收请求一一从网络中读取一条HTTP 请求报文。
(3)处理请求一一对请求报文进行解释,并采取行动。
(4)访问资源一一访问报文中指定的资源.
(5)构建响应一一创建带有正确首部的HTTP 响应报文。
(6)发送响应一一将响应回送给客户端。
(7)记录事务处理过程一一将与已完成事务有关的内容记录在一个日志文件中。
5.4 第一步----接受害户端连接
5.4.1 处理新连接
5.4.2 客户端主机名识别
利用”反向DNS“
5.4.3 通过ident确定客户端用户
5.5 第二步----接收请求报文
5.5.1 报文的内部表示法
5 .5.2 连接的输入/输出处理结构
- 单线程Web 服务器
- 多进程及多线程Web 服务器
- 复用I0 的服务器
- 复用的多线程Web 服务器
5.6 第三步—-处理请求
5.7 第四步—-对资源的映射及访问
5. 7 .1 docroot
- 虚拟托管的docroot
虚拟托管的Web 服务器会在罔一台Web 服务器上提供多个Web 站点,每个站点在服务楼上都有自己独有的文挡根目录。虚拟于E管Web 服务器会根据URI 或Host 首部的IP地址或主机名来识别要使用的正确文档根目录。
- 用户的主目录docroot
Docroot 的另一种常见应用是在Web 服务器上为人们提供私有的Web 站点。通常会把那些以斜杠和浊浪号(/~)开始,后面跟着用户名的URI 映射为此用户的私有文档根目录。私有docroot 通常都是用户主目录下那个名为public_htn让的目录,但也可将其配置为其他值。
5.7.2 目录列表
- 返回一个错误。
- 不返回目录,返回一个特殊的默认“索引文件”。
- 扫描目录,返回一个包含目录内容的HTML 页面。
5.7.3 动态内容资源的映射
Web 服务器还可以将URI 映射为动态资源一一也就是说,映射到按需动态生成内容的程序上去。
5.7.4 服务器端包含项
很多Web 服务器还提供了对服务器端包含项( SSI) 的支持。如果某个资源被标识为存在服务器端包含项,服务器就会在将其发送给客户端之前对资摞内容进行处理。
要对内容进行扫描,以查找(通常包含在特定HTML 注释中的)特定的模板,这些模板可以是变量名.也可以是嵌入式脚本。可以用变量的值或可执行脚本的输出来取代特定的模板。这是创建动态内容的一种简便方式。
5.7.5 访问控制
Web 服务器还可以为特定资源进行访问控制。
5.8 第五步—-构建晌应
5.8.1 响应实体
- Content - Type
- content -Length
- 实际报文的主体内容。
5.8.2 MIME类型
- MIME 类型( mime.types)
- 魔法分类(Magic typing)
扫描内容 - 显示分类(Explicit typing)
配置实现 - 类型协商
多种类型,与用户协商
5.8.3 重定向
- 永久删除的资源:
301 - 临时删除的资源:
303、307 - URL 增强:
服务器通常用重定向来重写URL ,往往用于嵌入上下文。当请求到达肘,服务器会生成一个新的包含了嵌入式状态信息的URL,并将用户重定向到这个新的URL 上去。303,307. - 负载均衡:
303、307 - 服务器关联:
Web 服务器上可能会有某些用户的本地信息,服务器可以将客户端重定向到包含了那个客户端信息的服务器上去。303、307。 - 规范目录名称:
客户端请求的URI是一个不带尾部斜线的目录名时,大多数Web 服务器都会将客户端重定向到一个加了斜线的URI 上,这样相对链接就可以正常工作了。
5.9 第六步----发送响应
服务器要记录连接的状态,还要特别注意对持久连接的处理。对非持久连接而言,服务器应该在发送了整条报文之后,关闭自己这一端的连接。
对持久连接来说,连接可能仍保持打开状态,在这种情况下,服务器要特别小心,要正确地计算content - Length 首部,不然客户端就无法知道响应什么时候结束了。