现在的位置: 首页 > 综合 > 正文

http web服务器

2018年05月11日 ⁄ 综合 ⁄ 共 1445字 ⁄ 字号 评论关闭

1、一般web服务器做的事情

建立连接 - 接受客户端连接,或是断开连接

客户端请求到web服务器的tcp连接,web服务器会建立连接,判断连接的另一端是哪个客户端,从tcp连接中将ip地址解析出来。一旦新连接建立起来并被接受,服务器将会把新连接添加到现存的web服务器连接列表中,做好监视连接上数据传输的准备。
web服务器可以随意拒绝或关闭任意一条连接。

反向dns将客户端ip地址转换和才呢过客户端主机名,web服务器可以将客户端主机名用于详细的访问控制和日志记录,只是比较耗费时间。

。接收请求 - 读取一条http请求报文

解析请求报文时,web服务器:会解析请求行,查找请求方法,指定的资源标识符以及版本号,各项之间又空格分隔,并以一个回车换行作为结束;读取以crlf结尾的报文首部;检测到以crlf结尾的、标示首部结束的空行,读取请求主体。

不同的web服务器结构会以不同的方式处理请求:单线程web服务器、多线程web服务器、复用的i/o服务器、复用的多线程i/o服务器

。处理请求 - 对请求报文进行解释

。访问资源 - 访问报文中指定的资源

。构建响应 - 创建带有正确首部的http响应报文

如果有响应主体的话,响应报文中一般包含:描述响应主体mime类型的content-type首部;描述响应主体长度的content-length首部;响应报文的内容。
web服务器可以用文件的扩展名来说明MIME类型,web服务器为每个资源扫描一个包含了所有扩展名的MIME类型的文件,以确定其MIME类型。

。发送响应 - 将响应发送给客户端

。记录日志 - 将操作的记录记录在日志文件中

缓存服务器

http有一些简单的机制可以在不要求服务器记住有哪些缓存拥有文档副本的情况下保持已缓存数据与服务器之间的一致性。包括:
文档过期:通过特殊的cache-control首部或expires首部,http让原始服务器向每个文档附加一个过期时间。在过期之前,缓存不用与服务器联系核实。
服务器用http1.0的expires首部或http1.1的cache-control响应首部来指定过期日期,本质上是一样的,不同的是expires是绝对时间,cache-control是相对时间。

服务器再验证:如果再验证显示内容发生变化,缓存会获取一份新的文档副本,并将其存储在旧文档的位置上,然后将文档发送给客户端;如果没有变化,缓存只需要获取新的首部,包含了新的过期时间,并对缓存中的首部进行更新就可以了。

条件方法进行再验证:向原始服务器发送条件GET,请求服务器只有在文档与缓存中现有的副本不同时,才回送对象主体。这样,将新鲜度检查和对象获取结合在了单个get方法中。

no-Store与no-Cache:限制对象缓存,或限制提供已缓存对象的方式,维持对象的新鲜度。
no-Store:禁止缓存对响应进行复制,就是不存储缓存;
no-Cache:缓存是可以被存储的,只是在与原始服务器进行新鲜度再验证前,缓存将不能提供给客户端使用。
 pragma是针对http1.0+的

max-age:表示的是从服务器将文档传来之时起,认为此文档处于新鲜状态的秒数。例:Cache-Control:max-age=3600

expires:以实际的过期日期而不是秒数来判断过期,不推荐使用。expires:0是永远过期。

must-revalidate:缓存在事先没有跟原始服务器进行再验证的情况下,不能提供对这个对象的旧的副本。这在性能上会比直接提供旧的对象要低一些。

抱歉!评论已关闭.