【HTTP】Web服务器工作流程小结--从建立连接到日志记录

参考:《HTTP权威指南》

Web服务器可以用来表示Web服务器的软件,也可以用来表示提供Web页面特定设备或计算机。Web服务器实现了HTTP和相关的TCP连接处理。负责管理Web服务器提供的资源,以及对Web服务器的配置、控制及扩展方面的管理。Web服务器有各种不同的形式:


通用软件Web服务器

运行在标准的、有网络功能的计算机系统上。可以选择开源软件(Apache或W3C的Jigsaw)或者商业软件(比如微软和iPlanet的Web服务器)。


嵌入式Web服务器

PerlWeb服务器


Web服务器会做些什么:

一、建立连接

接受一个客户端连接,客户端请求一条到Web服务器的TCP连接时,Web服务器会建立连接,判断连接的另一端是哪个客户端,从TCP连接中将IP地址解析出来。一旦新连接建立起来并接受,服务器就会将新连接添加到其现存Web服务器连接列表中,做好监视连接上数据传输的准备。Web服务器可以随意拒绝或立即关闭任意一条连接。可以用“反向DNS”对大部分Web服务器进行配置,以便将客户端IP地址转换乘客户端主机名。Web服务器可以将客户端主机名用于详细访问控制和日志记录。有些服务器还支持IETF的ident协议。


二、接收请求报文

Web服务器会从网络连接中读取数据,并将请求报文中的内容解析出来。

解析请求行,查找请求方法、指定的资源标识符(URI)以及版本号。解析请求报文时,Web服务器会不定期地从网络上接收输入数据。网络连接可能随时都会出现延迟。Web服务器需要从网络中读取数据,将部分报文数据临时存储在内存中,知道收到足以进行解析的数据并理解其意义为止。

1报文内部表示法

有些Web服务器还会用便于进行报文操作的内部数据来存储请求报文。比如,数据结构中可能包含有指向请求报文中各个片段的指针及其长度,这样就可以将这些首部存放在一个快速查询表中,以便快速访问特定首部的具体值了。

2连接的输入/输出处理结构

请求可能会任意时刻到达,所有Web服务器会不停 地观察有无新的Web请求。不同的Web服务器结构会以不同的方式为请求服务。有如下分类:

1)单线程Web服务器

单线程的Webb服务器一次只处理一个请求,指导其完成为止。一个事务处理结束之后 ,才去处理下一条连接。适用于低负荷服务器以及type-o-serve这样的诊断工具 。

2)多进程及多线程Web

用于多个进程或更搞笑的线程同时对请求进行处理。可以更具需要创建,或者预先创建一些线程/进程。很多多线程Web服务器都会对线程/进程的最大数量进行了限制。

3)复用I/O的服务器

在复用结构中,要同时监听所有连接 上的活动。当连接的状态发生变化时,就对那些连接进行少量的处理;处理结束之后,将连接返回到开放列表中,等待下一次状态变化。只有在有事情可做时才会对连接进行处理;在空闲连接上等待的时候并不会绑定线程和进程。

4)复用的多线程Web服务器

将多线程和复用功能结合在一起,利用计算机平台上多个CPU。多个线程中的每一个都在唉观察打开的连接,并对每条连接执行少量任务。


三、处理请求


四、对资源的映射及访问

在Web服务器将内容传送给客户端之前,要将请求报文中的URI映射为Web服务器上适当的内容或内容生成器,以识别出内容的源头。Web服务器支持各种不同类型的资源映射,最简单的资源映射形式就是用请求URI作为名字来访问服务器文件系统中的文件。

1docroot

Web服务器的文件系统中会有一个特殊的文件夹专门用于存放Web内容,这个文件夹称为文档的根目录。Web服务器从请求报文中获取URI,并将其附加在文档根目录后面。在配置httpd.conf中添加一个DocumentRoot行就可以为ApacheWeb服务器设置文档的根目录了。需要注意的是,不能让相对URL退到docroot之外。

1)虚拟托管docroot

虚拟托管的Web服务器会在同一台Web服务器上提供多个Web站点,每个站点在服务器上都有自己独有的根目录。虚拟托管Web服务器会根据URI或Host首部的IP地址或主机名来识别要使用的正确文档根目录。

2)用户的主目录docroot

Document的另一种常见应用是在Web服务器上为人们提供私有的Web站点。通常会把那些以斜杠和波浪号(/~),后面跟着用户名的URI映射为此用户的私有文档根目录。私有docroot通常是用户主目录下那个名为public_html的目录。

2目录列表

Web服务器可以接收对目录URL请求,其路径可以解析为一个目录,而不是文件。大多数Web服务器都会去查找目录中一个 名为index.html或index.htm的文件来代表此目录。如果用户请求目录URI时,没有提供默认的索引文件,而且没有禁止使用目录索引,很多Web服务器会自动返回一个HTML文件,此文件中会列出那个目录里的文件名,以及每个文件大小和修改日期,还包括每个问价的URI链接。

通过Apache指定禁止: Options -Indexes

3动态内容的映射

映射到按需动态生成内容的程序上去。Apache允许用户将URI路径名组件映射为可执行文件目录。服务器收到一条带有可执行路径组件的对URI的请求时,会试着去执行相应服务器目录中的程序。Apache还允许用户用一个特殊的文件扩展名来标识可执行文件,通过这种方式可以将可执行脚本放在任意目录中。

4服务器端包含项

很多Web服务器还提供了对服务器端包含项(SSI)的支持。如果某个资源被标识为存在服务器端包含项,服务器就会自将其发送给客户端之前对资源内容进行处理。

5访问控制

可以为特定资源进行访问控制,有请求到达,要访问受控资源时,Web服务器可以根据客户端IP地址进行访问控制,也可以要求输入密码来访问资源。


五、构建响应

一旦Web服务器识别出了资源,就执行请求方法中描述的动作,并返回响应报文。响应报文中包含有响应状态码,响应首部,如果生成了响应主体的话,还包括响应主体。

1响应主体

响应报文通常包括

1)描述响应主体MIME类型的Content-Type首部

2)描述了响应主体长度的Content-Length首部

3)实际报文的主体内容

2MIME类型

1)魔法分类(Magic typeing)

Apache服务器可以扫描每个资源的内容,并将其于一个已知模式表(被称魔法文件)进行匹配,以决定每个文件的MIME类型。这样做比较慢,但很方便。

2)显式分类(Explicity typing)

可以对Web服务器进行配置,使其不考虑文件的扩展名或内容,强制特定文件或目录内容拥有某个MIME类型。

3)类型协商

有的Web服务器可以以多种文档格式存储资源,在这种情况下,可以配置Web服务器,使其可以通过 用户协商来决定使用哪种格式最好。也可以通过配置Web服务器,将特定的文件与MIME类型相关联

3重定向

Web服务器有时会返回重定向 效应而不是成功的报文。Web服务器可以将浏览器重定向到其他地方来执行请求。重定向由返回码3xx说明。Location响应首部包含了内容的新地址或优选地址的URI。

1)永久搬离的资源

资源可能已经被移动到了新的位置,或者被重新命名,有了一个新的URL。Web服务器可以告诉客户端资源已经被重命名了。这样客户端就可以从新的地址获取资源之前,更新书签之类的信息。状态码301 Moved Permanently就用于此类重定向。

2)临时搬离的资源

如果资源临时移走到了新的位置,或者被重新命名,有了一个新的URL。Web服务器可以告诉客户端资源已经被重命名了,所以服务器希望客户端将来还可以回头去使用老的URL,不要对书签进行更新。状态码303 See Other以及状态码307 Temporary Rediirect就用于此类重定向。

3)URL增强

服务器通常用重定向来重写URL,往往用于嵌入上下文。当请求到达时,服务器会生成一个新的包含嵌入式状态信息的URL,并将用户重定向到这个新的URL上。客户端会跟随这个重定向信息,重新发起请求,但这次请求会包含完整的、经过状态增强的URL。状态码303 See Other以及状态码307 Temporary Rediirect就用于此类重定向。

4)负载均衡

如果一个超载的服务器收到一条请求,服务器可以将客户端重定向到一个负载不太重的服务器上,状态码303 See Other以及状态码307 Temporary Rediirect就用于此类重定向。

5)服务器关联

Web服务器上可能有某些 用户本地的信息,服务器可以将客户端重定向到包含了那个客户端信息的服务器上。状态码303 See Other以及状态码307 Temporary Rediirect就用于此类重定向。

6)规范目录名称

客户端请求的URI是一个不带尾部斜线的目录名时,大多数Web服务器都会 将客户端重定向到一个加了斜线的URI上,这样相对连接就可以正常工作了。


六、发送响应

服务器要记录连接的状态,还要特别注意对持久连接的处理。对非持久连接而言,服务器应该发送整条报文之后,关闭自己这一端的连接。对持久化连接来说,连接可能保持打开状态,在这种情况下,服务器要特别小心,要正确地计算Content-Length首部,不然客户端就无法知道响应什么时候结束了。


七、记录日志

最后,当事务结束时,Web服务器会日志文件添加一个条目,来描述已执行的事务。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值