web服务器请求和响应,图解HTTP权威指南(三)| Web服务器对HTTP请求的处理和响应...

本文详细介绍了Web服务器如何处理HTTP请求和响应的过程,包括接受客户端链接、解析请求报文、资源映射与访问、构建响应、发送响应及记录日志等步骤。同时讨论了不同类型的Web服务器架构,如单线程、多线程、复用I/O等,并涉及了虚拟托管、MIME类型、重定向和日志记录等方面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

做者简介

李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷。喜欢钻研底层技术,认为底层基础才是王道。一切新技术都离不开操做系统(CPU、内存、磁盘)、网络等。坚持输入输出,记录本身学习的点滴,在平凡中坚持前行,总有一天会碰见不同的本身。公众号:运维汪(ID:Leeeee_Li)。

1460000038794215

1、问题

解释Web服务器是如何处理HTTP事务的html

2、Web服务器

Web服务器会对HTTP请求进行处理并提供响应。Web服务器请求的七大步骤:浏览器

1)接受客户端链接服务器

2)接收请求报文网络

3)处理请求多线程

4)资源映射及访问负载均衡

5)构建响应运维

6)发送响应ide

7)记录日志性能

1460000038794214

一、接受客户端链接学习

1)处理新链接

客户端请求一条到Web服务器的TCP链接时,Web服务器会创建链接,判断链接的另外一端是哪一个客户端,从TCP链接中将IP地址解析出来。一旦新链接创建起来并接受,服务器就会将新链接添加到其现存Web服务器链接列表中,作好监视链接上数据传输的准备。Web服务器能够随意拒绝或当即关闭任意一条链接。有些Web服务器会由于客户端IP地址或主机名是未认证的,或者由于它是已知的恶意客户端而关闭链接。Web服务器也可使用其余技术识别。

2)客户端主机名识别

能够用”反向DNS“对大部分Web服务器进行配置,以便将客户端IP地址转换成客户端主机名。Web服务器能够将客户端主机名用于详细的访问控制和日志记录。须要注意的是,主机名查找可能会花费很长的时间,这样会下降Web事务处理的速度。不少大容量的Web服务器会禁止主机名解析,或者只容许对特定内容进行解析。

能够用配置指令Hostnamelookups启用Apache的主机查找功能。如只打开HTML和CGI资源的主机名解析功能。

HostnameLookups off

HostnameLookups on

3)经过ident肯定客户端用户

服务器能够经过ident协议找到发起HTTP链接的用户名。这些信息对Web服务器的日志记录特别有用,流行的通用日志格式的第二个字段就包含了每条HTTP请求的ident用户名。

1460000038794216

1)客户端打开一条HTTP链接

2)服务器打开本身到客户端ident服务113端口的链接

3)服务器发送一条简单的请求,询问与新链接相对应的用户名,把那个从客户端解析出包含用户名的响应

Apache的IdentityCheck on指令告知Apache Web服务器使用ident查找功能,若是没有ident信息可用,Apache会用连字符(-)来填充ident日志字段。若是没有ident信息可用,在使用通用日志格式的日志文件中,第二个字段一般都是连字符。

二、接收请求报文

当链接上有数据到达时,Web服务器会从网络链接中读取数据,并将请求报文中的内容解析出来。

1460000038794212

1)解析请求报文时,Web服务器的工做

一、解析请求行,查找请求方法、指定的资源标识符(URI)以及版本号,各项之间有一个空格隔开,并以一个回车换行(CRLF)序列做为行的结束;

二、读取以CRLF结尾的报文首部;

三、检测到以CRLF结尾的、标识首部结束的空行;

四、读取请求主体

2)报文的内部表示法

1460000038794218

三、链接的输入/输出处理结构

高性能的Web服务器可以同时支持数千条链接,每一个客户端都向服务器打开了一条或多条链接。不一样的Web服务器会以不一样的方式为请求服务。

单线程Web服务器:单线程的Web服务器一次只处理一个请求,直到其完成为止。一个事务处理结束以后,才去处理下一条链接。

多进程及多线程Web服务器:多进程和多线程Web服务器用多个进程,或更高效的线程同时对请求进行处理。

复用I/O的服务器:在复用结构中,要同时监视全部链接上的活动。当链接的状态发生变化时,就对那条链接进行处理,处理结束后,将链接返回到开放的链接列表中,等待下一次的状态变化。只有在有事情能够作时才会对链接进行处理,在空闲链接上等待的时候并不会绑定线程和进程。

复用的多线程Web服务器:将多线程和复用功能结合在一块儿,利用计算机的多个CPU。多个线程中(一般是一个物理处理器)的每个都在观察打开的链接,并对每条链接(或打开链接中的一个子集)执行任务。

1460000038794210

三、处理请求

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

四、对资源的映射及访问

1)docroot(文档的根目录)

Web服务器的文件系统中有一个专门存放Web内容的目录,称为文档的根目录(document root,或docroot)。当一个Web服务器的根目录为/usr/local/httpd/files,而且有一条/special/s.gif的请求到达时,他的访问如图

1460000038794211

在Apache中,对配置文件httpd.conf添加一行DocumentRoot行就可设置文档的根目录

DocumentRoot /usr/local/httpd/files

2)虚拟托管的docroot

虚拟托管的Web服务器会在同一台Web服务器上提供多个Web站点,每一个站点在服务器上都有本身都有的文档根目录。虚拟托管Web服务器会根据URI或Host首部的IP或主机名来识别要使用的正确的文档根目录。经过这种方式,及时请求的URI相同,托管在同一Web服务器上的两个Web站点也能够拥有彻底不一样的内存。

1460000038794209

A请求进来时,获取服务器的/doc/aaa/index.html

B请求进来时,获取服务器的/doc/bbb/index.html

3)用户的主目录docroot

Docroot提供私有的Web站点时,一般会以斜杠和波浪号(/~)开始,如

1460000038794217

A请求进来时,获取服务器的/home/mary/index.html

B请求进来时,获取服务器的/home/ken/index.html

在Apache的配置以下:

ServerName www.aaa.com

DocumentRoot /doc/aaa

TransferLog /logs/aaa.access_log

ErrorLog /1ogs/aaa.error_log

ServerName www.bbb.com

DocumentRoot /doc/bbb

TransferLog /logs/bbb.access_log

ErrorLog /1ogs/bbb.error_log

五、构建响应

一旦Web服务器识别出了资源、就执行请求方法中的描述的动做,并返回响应报文。响应报文中包含有状态码、响应首部、若是生成了响应主体的话,还包括响应主体。

1)响应主体

若是事务处理产生了响应主体,就将内容放在响应报文中回送过去。若是有响应主体的话,响应报文中一般包括:

a)描述了响应主体MIME类型的Content-Type首部;

b)描述了响应主体长度的Content-Length首部;

c)实际报文的主题内容

2)MIME类型

Web服务器要负责肯定响应主体的MIME类型。

1460000038794213

a)根据扩展名肯定MIME类型

Web服务器能够用文件的扩展名来讲明MIME类型。Web服务器会为每一个资源扫描一个包含了全部扩展名的MIME类型的文件,以肯定MIME类型。Web服务器用MIME类型文件来设置资源输出的Content-type首部。

b)魔法分类

Apache Web服务器扫描每一个资源的内容,并与一个已知模式表(魔法文件)进行匹配,决定每一个文件的MIME类型。

c)显示分类

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

d)类型协商

经过配置Web服务器,使其能够经过与用户的协商来决定使用哪一种格式以及相关的MIME类型。

3)重定向

Web服务器有时会返回重定向响应而不是成功的报文。Web服务器能够将浏览器重定向到其余地方来执行请求。重定向响应码为3XX系列。Location响应首部包含了内容的新地址或优选地址的URL。

a)永久删除的资源

资源可能已经被移动到了新的位置,或者被从新命名,有了一个新的URL。Web服务器能够告诉客户端资源已经被从新命名了,这样客户端就能够在重新地址获取资源以前,更新书签之类的信息了。状态码301 Moved Permanently用于此类重定向。

b)临时删除的资源

资源被临时移走了或重命名了。服务器可能但愿将客户端重定向到新的位置上去。但因为重命名是临时的,因此服务器但愿客户端未来还能够回头使用老的URL,不要对书签进行更新。状态吗303 See Other以及状态码307 Temporary Redirect用于此类重定向。

c)URL加强

服务器一般用重定向来重写URL,每每用于嵌入上下文。当请求到达时,服务器会生成一个新的包含了嵌入式状态信息的URL,并将用户重定向到这个新的URL上。客户端会跟随这个重定向信息,从新发起请求,但此次的请求会包含完整的、通过状态加强的URL。状态吗303 See Other以及状态码307 Temporary Redirect用于此类重定向。

d)负载均衡

一个超载的服务器收到一条请求,服务器能够将客户端重定向到一个负载不过重的服务器上去。状态吗303 See Other以及状态码307 Temporary Redirect用于此类重定向。

e)服务器关联

Web服务器上可能会有某些用户的本地信息,服务器能够将客户端重定向到包含了那个客户端信息的服务器上去。状态吗303 See Other以及状态码307 Temporary Redirect用于此类重定向。

f)规范目录名称

客户端请求的URL是一个不带尾部斜线的目录名时,大多数Web服务器都会将客户端重定向到一个加了斜线的URL上,这样相对连接就能够正常工做了。

六、发送响应

Web服务器经过链接发送数据,发送数据与接收数据同样可能有多条到客户端的链接,有些是空闲的,有些在向服务器发送数据,还有一些在向客户端回送响应数据。服务器要记录链接的状态,还须要特别注意持久链接的处理。对于非持久链接,服务器应该在发送了整条报文以后,关闭本身这一端的链接。

七、记录日志

当事务结束时,Web服务器会在日志文件中添加一个条目,来描述已执行的事务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值