<HTTP权威指南>读书笔记 ---- Web服务器

阅读:391 2019-03-19 14:43:37 来源:新网

web服务器会对http请求进行处理并提供响应。术语"web服务器"可以用来表示web服务器的软件,也可以用来表示提供web页面的特定设备或计算机。

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服务器的日志记录特别有用——流行的通用日志格式(commonlogformat)的第二个字段中就包含了每条http请求的ident用户名。如果客户端支持ident协议,就在tcp端口113上监听ident请求。

ident在组织内部可以很好地工作,但出于多种原因,在公共因特网上并不能很好地工作,原因包括:

连接上有数据到达时,web服务器会从网络连接中读取数据,并将请求报文中的内容解析出来。解析请求报文时,web服务器会不定期地从网络上接收输入数据。网络连接可能随时都会出现延迟。web服务器需要从网络中读取数据,将部分报文数据临时存储在内存中,直到收到足以进行解析的数据并理解其意义为止。

解析请求报文时,web服务器会:

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

高性能的web服务器能够同时支持数千条连接。这些连接使得服务器可以与世界各地的客户端进行通信,每个客户端都向服务器打开了一条或多条连接。某些连接可能在快速地向web服务器发送请求,而其他一些连接则可能在慢慢发送,或者不经常发送请求,还有一些可能是空闲的,安静地等待着将来可能出现的动作。因为请求可能会在任意时刻到达,所以web服务器会不停地观察有无新的web请求。不同的web服务器结构会以不同的方式为请求服务。

一旦web服务器收到了请求,就可以根据方法、资源、首部和可选的主体部分来对请求进行处理了。有些方法(比如post)要求请求报文中必须带有实体主体部分的数据。其他一些方法(比如options)允许有请求的主体部分,也允许没有。少数方法(比如get)禁止在请求报文中包含实体的主体数据。

web服务器是资源服务器。它们负责发送预先创建好的内容(比如html页面或jpeg图片),以及运行在服务器上的资源生成程序所产生的动态内容。在web服务器将内容传送给客户端之前,要将请求报文中的uri映射为web服务器上适当的内容或内容生成器,以识别出内容的源头。

web服务器支持各种不同类型的资源映射,但最简单的资源映射形式就是用请求uri作为名字来访问web服务器文件系统中的文件。通常,web服务器的文件系统中会有一个特殊的文件夹专门用于存放web内容。这个文件夹被称为文档的根目录(documentroot)。web服务器从请求报文中获取uri,并将其附加在文档根目录的后面。

web服务器可以接收对目录url的请求,其路径可以解析为一个目录,而不是文件。我们可以对大多数web服务器进行配置,使其在客户端请求目录url时采取不同的动作。大多数web服务器都会去查找目录中一个名为"index.html"或"index.htm"的文件来代表此目录。如果用户请求的是一个目录的url,而且这个目录中有一个名为"index.html"或"index.htm"的文件,服务器就会返回那个文件的内容。

web服务器还可以将uri映射为动态资源——也就是说,映射到按需动态生成内容的程序上去。实际上,有一大类名为应用程序服务器的web服务器会将web服务器连接到复杂的后端应用程序上去。web服务器要能够分辨出资源什么时候是动态的,动态内容生成程序位于何处,以及如何运行那个程序。大多数web服务器都提供了一些基本的机制以识别和映射动态资源。cgi是早期出现的一种简单、流行的服务端应用程序执行接口。现代的应用程序服务器都有更强大更有效的服务端动态内容支持机制,包括asp(activeserverpage)和javaservlet。

很多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首部,不然客户端就无法知道响应什么时候结束了

相关文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感兴趣
推荐阅读 更多>
推荐商标

{{ v.name }}

{{ v.cls }}类

立即购买 联系客服