web服务器
Posted 空方块
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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上,这样相对链接皆可以正常工作了。
以上是关于web服务器的主要内容,如果未能解决你的问题,请参考以下文章