web服务器

1.web服务器的任务

#1:建立连接:与希望的客户端建立连接;

#2:接受请求:接受http请求报文;

#3:处理请求:解析报文,并执行相应操作;

#4:访问资源:访问报文中指定的资源;

#5:构建响应:创建含有正确首部的http响应报文;

#6:发送响应:回送响应报文到客户端;

#7:记录事务处理过程:将已完成事务相关的内容记录在一个日志文件中。

2.建立连接

2.1.新的连接

#1:一旦新的连接建立起来并被接受,服务器会将新的连接添加到现存的连接列表中,做好监视连接上数据传输的准备;

#2:服务器可以随意拒绝或立即关闭任意一条连接。

2.2.通过ident确认客户端用户


客户端支持ident协议的前提下,步骤:

step-1:客户端与服务器打开http连接;

step-2:服务器建立与客户端113端口的ident连接,发送请求报文,询问与新连接对应的用户名;

step-3:客户端返回ident响应;

step-4:服务器解析ident响应。

ident不能很好工作的原因:

#1:很多客户端没有运行ident识别协议守护进程的软件;

#2:ident协议会使http事务处理产生严重的时延;

#3:很多防火墙不允许ident流量进入;

#4:ident协议不安全,容易伪造;

#5:ident协议不支持虚拟ip地址;

#6:暴露客户端用户名涉及私隐。

3.接收请求报文

解析报文:

#1:解析请求行,查找请求方法、指定的资源标识符以及版本号,各项之间用空格分隔,并以一个回车换行(CRLF或LF)序列作为行的结束;

#2:读取以CRLF或LF结尾的报文首部;

#3:检测以CRLF或LF结尾的、标识首部结束的空行;

#4:如果存在首部Content-Length,根据该首部读取主体。

3.1.报文内在表示法

部分服务器会以报文操作的内部数据结构来存储请求报文。


3.2.连接的输入/输出处理结构

#1:单线程Web服务器:一次只处理一个请求,直到其完成为止。只适用于低负荷服务器,易于实现,性能低下。

#2:多进程及多线程Web服务器:多条线程/进程同时对请求进行处理。注意对线程/进程数进行限制,否则会大量消耗系统资源。

#3:复用I/O的服务器:同时监视所有连接上的活动,只有有事情可处理时才对连接进行处理,在空闲的连接上等到的时候不会绑定线程/进程。

#4:复用的多线程Web服务器:结合多线程/进程与复用I/O。


4.处理请求

服务器收到请求,根据方法、资源、首部和可选的主体来对请求进行处理。

5.资源映射及访问

5.1.document root或docroot

#1:虚拟托管的docroot

当请求报文A到达时,服务器会获取文件/docs/joe/index.html

当请求报文B到达时,服务器会获取文件/docs/mary/index.html

#Apache Web 服务器虚拟主机的docroot配置
<virtualHost www.joes-hardware.com>
       ServerName www.joes-hardware.com
       DocumentRoot /docs/joe
       TransferLog /logs/joe.access_log
       ErrorLog /logs/joes.error_log
</virtualHost>
<virtualHost www.marys-antiques.com>
       ServerName www.marys-antiques.com
       DocumentRoot /docs/mary
       TransferLog /logs/mary.access_log
       ErrorLog /logs/mary.error_log
</virtualHost>
...

#2:用户的主目录docroot


Web服务器上为人们提供私有的Web站点,通常(/~)开始,后面跟着用户名的URI映射为此用户的私有文档根目录。

5.2.目录列表

Web服务器可以接收对目录URL的请求,其路径可以解析为一个目录,而不是文件。

5.3.动态内容资源的映射

Web服务器可以映射到按需动态生成内容的程序上去。

6.构建响应

6.1.响应实体

若事务处理产生了响应主体,就会将内容放在响应报文中回送过去。

有响应主体的报文通常包括:

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

#2:实际报文的主体内容。

6.2.MIME类型

#1:MIME类型


Web服务器可以用文件的扩展名来说明MIME类型。

#2:魔法分类

Web服务器可以扫描每个资源的内容,并与一个已知模式表(称作为魔法文件)进行匹配,以决定每个文件的MIME类型。很慢,但对于文件没有标准扩展名的时候很便利。

#3:显式分类

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

#4:类型协商

有些服务器经过配置,可以以多种文档格式来存储资源。

6.3.重定向

用于下列情况:

#1:永久删除的资源

资源可能已经被移动到了新的位置,或者被重新命名,有了一个新的URL

#2:临时删除的资源

如果资源被临时移走或重命名了,服务器可能希望将客户端重定向到新的位置上去,由于重命名是临时,所以服务器希望客户端将来会回头使用老的URL

#3:URL增强

客户端跟随重定向信息,重新发起请求,但这次的请求会包含完整的经过状态增强的URL。状态码303、307用于此类重定向。

#4:负载均衡

超载的服务器收到请求,会将客户端重定向到一个负载不太重的服务器上去。状态码303、307用于此类重定向。

#5:服务器关联

服务器可能含有用户的本地信息,重定向到拥有该客户端信息的服务器上去。状态码303、307用于此类重定向。

#6:规范目录名称

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值