Web服务器会对HTTP请求进行处理并提供响应。术语"Web服务器"能够用来表示Web服务器的软件,也能够用来表示提供Web页面的特定设备或计算机。
html
Web服务器实现了HTTP和相关的TCP链接处理。负责管理Web服务器提供的资源,以及对Web服务器的配置、控制及扩展方面的管理。Web服务器逻辑实现了HTTP协议、管理着Web 资源,并负责提供We 服务器的管理功能。Web服务器逻辑和操做系统共同负责管理TCP链接。底层操做系统负责管理底层计算机系统的硬件细节,并提供了TCP/IP网络支持、负责装载Web资源的文件系统以及控制当前计算活动的进程管理功能。
后端
Web 服务器有各类不一样的形式。
浏览器
若是客户端已经打开了一条到服务器的持久链接,可使用那条链接来发送它的请求。不然,客户端须要打开一条新的到服务器的链接。
安全
客户端请求一条到Web服务器的TCP链接时,Web服务器会创建链接,判断链接的另外一端是哪一个客户端,从TCP链接中将IP地址解析出来。一旦新链接创建起来并被接受,服务器就会将新链接添加到其现存Web服务器链接列表中,作好监视链接上数据传输的准备。Web服务器能够随意拒绝或当即关闭任意一条链接。有些Web服务器会由于客户端IP地址或主机名是未认证的,或者由于它是已知的恶意客户端而关闭链接。Web服务器也可使用其余识别技术。
服务器
能够用"反向域名解析"对大部分Web服务器进行配置,以便将客户端IP地址转换成客户端主机名。Web服务器能够将客户端主机名用于详细的访问控制和日志记录。但要注意的是,主机名查找可能会花费很长时间,这样会下降Web事务处理的速度。不少大容量Web服务器要么会禁止主机名解析,要么只容许对特定内容进行解析。
网络
有些Web服务器还支持IETF的ident协议。服务器能够经过ident协议找到发起HTTP链接的用户名。这些信息对Web服务器的日志记录特别有用——流行的通用日志格式(Common Log Format)的第二个字段中就包含了每条HTTP请求的ident用户名。若是客户端支持ident协议,就在TCP端口113上监听ident请求。
数据结构
ident在组织内部能够很好地工做,但出于多种缘由,在公共因特网上并不能很好地工做,缘由包括:
多线程
链接上有数据到达时,Web服务器会从网络链接中读取数据,并将请求报文中的内容解析出来。解析请求报文时,Web服务器会不按期地从网络上接收输入数据。网络链接可能随时都会出现延迟。Web服务器须要从网络中读取数据,将部分报文数据临时存储在内存中,直到收到足以进行解析的数据并理解其意义为止。
负载均衡
解析请求报文时,Web服务器会:
ide
有些Web服务器还会用便于进行报文操做的内部数据结构来存储请求报文。好比,数据结构中可能包含有指向请求报文中各个片断的指针及其长度,这样就能够将这些首部存放在一个快速查询表中,以便快速访问特定首部的具体值了
高性能的Web服务器可以同时支持数千条链接。这些链接使得服务器能够与世界各地的客户端进行通讯,每一个客户端都向服务器打开了一条或多条链接。某些链接可能在快速地向Web服务器发送请求,而其余一些链接则可能在慢慢发送,或者不常常发送请求,还有一些多是空闲的,安静地等待着未来可能出现的动做。由于请求可能会在任意时刻到达,因此Web服务器会不停地观察有无新的Web请求。不一样的Web服务器结构会以不一样的方式为请求服务。
一旦Web服务器收到了请求,就能够根据方法、资源、首部和可选的主体部分来对请求进行处理了。有些方法(好比POST)要求请求报文中必须带有实体主体部分的数据。其余一些方法(好比OPTIONS)容许有请求的主体部分,也容许没有。少数方法(好比GET)禁止在请求报文中包含实体的主体数据。
Web服务器是资源服务器。它们负责发送预先建立好的内容(好比HTML页面或JPEG图片),以及运行在服务器上的资源生成程序所产生的动态内容。在Web服务器将内容传送给客户端以前,要将请求报文中的URI映射为Web服务 器上适当的内容或内容生成器,以识别出内容的源头。
Web服务器支持各类不一样类型的资源映射,但最简单的资源映射形式就是用请求URI做为名字来访问Web服务器文件系统中的文件。一般,Web服务器的文件系统中会有一个特殊的文件夹专门用于存放Web内容。这个文件夹被称为文档的根目录(document root)。Web服务器从请求报文中获取URI,并将其附加在文档根目录的后面。
Web服务器能够接收对目录URL的请求,其路径能够解析为一个目录,而不是文件。咱们能够对大多数Web服务器进行配置,使其在客户端请求目录URL时采起不一样的动做。大多数Web服务器都会去查找目录中一个名为"index.html"或"index.htm"的文件来表明此目录。若是用户请求的是一个目录的URL,并且这个目录中有一个名为"index.html"或"index.htm"的文件,服务器就会返回那个文件的内容。
Web服务器还能够将URI映射为动态资源——也就是说,映射到按需动态生成内容的程序上去。实际上,有一大类名为应用程序服务器的Web服务器会将Web服务器链接到复杂的后端应用程序上去。Web服务器要可以分辨出资源何时是动态的,动态内容生成程序位于何处,以及如何运行那个程序。大多数Web服务器都提供了一些基本的机制以识别和映射动态资源。
CGI是早期出现的一种简单、流行的服务端应用程序执行接口。现代的应用程序服务器都有更强大更有效的服务端动态内容支持机制,包括ASP(Active Server Page)和Java servlet。
不少Web服务器还提供了对服务器端包含项(SSI)的支持。若是某个资源被标识为存在服务器端包含项,服务器就会在将其发送给客户端以前对资源内容进行处理。要对内容进行扫描,以查找(一般包含在特定HTML注释中的)特定的模板,这些模板能够是变量名,也能够是嵌入式脚本。能够用变量的值或可执行脚本的输出来取代特定的模板。这是建立动态内容的一种简便方式。
Web服务器还能够为特定资源进行访问控制。有请求到达,要访问受控资源时,Web服务器能够根据客户端的IP地址进行访问控制,也能够要求输入密码来访问资源。
一旦Web服务器识别出了资源,就执行请求方法中描述的动做,并返回响应报文。响应报文中包含有响应状态码、响应首部,若是生成了响应主体的话,还包括响应主体。
若是事务处理产生了响应主体,就将内容放在响应报文中回送过去。
若是有响应主体的话,响应报文中一般包括:
Web服务器要负责肯定响应主体的MIME类型。有不少配置服务器的方法能够将MIME类型与资源关联起来。Web服务器能够用文件的扩展名来讲明MIME类型。Web服务器会为每一个资源扫描一个包含了全部扩展名的MIME类型的文件,以肯定其MIME类型。还能够经过配置Web服务器,将特定的文件与MIME类型相关联。
Web服务器有时会返回重定向响应而不是成功的报文。Web服务器能够将浏览器重定向到其余地方来执行请求。重定向响应由返回码3XX说明。Location响应首部包含了内容的新地址或优选地址的URI。
重定向可用于下列状况。
Web服务器经过链接发送数据时也会面临与接收数据同样的问题。服务器可能有不少条到各个客户端的链接,有些是空闲的,有些在向服务器发送数据,还有一些在向客户端回送响应数据。服务器要记录链接的状态,还要特别注意对持久链接的处理。对非持久链接而言,服务器应该在发送了整条报文以后,关闭本身这一端的链接。对持久链接来讲,链接可能仍保持打开状态,在这种状况下,服务器要特别当心,要正确地计算Content-Length首部,否则客户端就没法知道响应何时结束了。
最后,当事务结束时,Web服务器会在日志文件中添加一个条目,来描述已执行的事务。