一.问题
解释网络服务器如何处理超文本传输协议事务
第二,网络服务器
网络服务器处理HTTP请求并提供响应。网络服务器请求的七个步骤:
1)接受客户端连接
2)接收请求消息
3)处理请求
4)资源映射和访问
5)建立回应
6)发送回复
7)记录日志
1.接受客户端连接
1)处理新连接
当客户端请求到网络服务器的TCP连接时,网络服务器将建立连接,确定哪个客户端是连接的另一端,并从TCP连接中解析IP地址。一旦新连接建立并被接受,服务器会将新连接添加到其现有的Web服务器连接列表中,并准备好监控连接上的数据传输。网络服务器可以随意拒绝或关闭任何连接。一些网络服务器关闭连接,因为客户端的IP地址或主机名未经验证,或者因为它是已知的恶意客户端。还可以使用其他技术来识别网络服务器。
2)客户端主机名识别
您可以将大多数网络服务器配置为“反向域名系统”,将客户端IP地址转换为客户端主机名。网络服务器可以使用客户端主机名进行详细的访问控制和日志记录。需要注意的是,主机名查找可能需要很长时间,这会降低Web事务的速度。许多大容量的网络服务器禁止主机名解析,或者只允许解析特定的内容。
您可以使用主机名称查找配置指令来启用Apache的主机查找功能。比如只开启HTML和CGI资源的主机名解析功能。
主机名查找关闭
主机名查找在
3)通过身份确定客户用户
服务器可以找到通过ident协议发起HTTP连接的用户名。该信息对于网络服务器日志记录特别有用。流行的通用日志格式的第二个字段包含每个HTTP请求的识别用户名。
1)客户端打开一个HTTP连接
2)服务器打开它自己到客户端识别服务的端口113的连接
3)服务器发送一个简单的请求,询问新连接对应的用户名,解析来自客户端的包含用户名的响应
Apache的身份检查指令告诉Apache网络服务器使用身份搜索功能。如果识别信息不可用,Apache将用连字符(-)填充识别日志字段。如果识别信息不可用,第二个字段通常是使用常规日志格式的日志文件中的连字符。
2.接收请求消息
当数据到达连接时,网络服务器将从网络连接中读取数据,并解析请求消息的内容。
1)解析请求消息时网络服务器的工作
1.解析请求行,找到用空格分隔的请求方法、指定的资源标识符(URI)和版本号,并将CRLF序列作为行尾;
2.阅读以CRLF结尾的邮件标题;
3.检测到以CRLF结尾并标记报头结尾的空行;
4.阅读请求正文
2)消息的内部表示
3.连接输入/输出处理结构
高性能Web服务器可以同时支持数千个连接,每个客户端都打开了一个或多个到服务器的连接。不同的网络服务器以不同的方式服务请求。
单线程Web服务器:单线程Web服务器一次只处理一个请求,直到完成。一个事务完成后,处理下一个连接。
多进程多线程Web服务器:多进程多线程Web服务器使用多个进程或更高效的线程同时处理请求。
用于多路复用I/O的服务器:在多路复用结构中,应该同时监控所有连接上的活动。当连接状态改变时,连接被处理。处理后,连接返回到打开的连接列表,等待下一次状态更改。只有当有事情要做时才会处理连接,等待空闲连接时线程和进程不会绑定。
复用多线程Web服务器:结合多线程和复用功能,利用计算机的多个CPU。多个线程(通常是一个物理处理器)中的每一个都在观察开放连接,并在每个连接(或开放连接的子集)上执行任务。
3.处理请求
当网络服务器收到请求时,它根据方法、资源、头和可选的正文来处理请求。
4.资源的映射和访问
1)docroot(文档根目录)
在网络服务器的文件系统中,有一个专用于存储网络内容的目录,称为文档根(document root,或docroot)。当一个Web服务器的根目录是/usr/local/httpd/files,并且有一个/special/s.gif的请求到达时,他的访问权限如下图所示
在Apache中,在配置文件httpd.conf中添加DocumentRoot行来设置文档的根目录
document root/usr/local/httpd/files
2)虚拟托管文档根
虚拟托管Web服务器在同一台Web服务器上提供多个网站,每个网站在服务器上都有自己的文档根目录。虚拟托管网络服务器根据URI或主机头的IP或主机名来标识要使用的正确文档根目录。这样,及时请求的URIs是相同的,并且托管在同一个网络服务器上的两个网站可以有完全不同的记忆。
当请求进来时,获取服务器的/doc/aaa/index.html
b当请求进来时,获取服务器的/doc/bbb/index.html
在Apache中,它可以配置如下:
服务器名www.aaa.com
DocumentRoot /doc/aaa
transfer log/logs/AAA . access _ log
ErrorLog /1ogs/aaa.error_log
服务器名www.bbb.com
DocumentRoot /doc/bbb
transfer log/logs/BBB . access _ log
ErrorLog /1ogs/bbb.error_log
3)用户的主目录docroot
当Docroot提供一个私有网站时,它通常以斜杠和波浪符号(/~)开头,例如
收到请求时,获取服务器的/home/mary/index.html
当请求进来时,获取服务器的/home/ken/index.html
5.建立回应
一旦网络服务器识别了资源,它就执行请求方法中描述的操作,并返回响应消息。响应消息包含状态代码、响应头和响应体(如果生成)。
1)响应主题
如果事务生成响应正文,内容将在响应消息中发回。如果有响应主题,响应消息通常包括:
1)描述响应主体的MIME类型的内容类型报头;
描述响应主体长度的内容长度报头;
c)实际消息的主题内容
2)MIME类型
网络服务器负责确定响应正文的MIME类型。
a)根据扩展名确定MIME类型
网络服务器可以使用文件扩展名来描述MIME类型。网络服务器扫描包含每个资源的所有扩展名的MIME类型文件,以确定MIME类型。网络服务器使用MIME类型文件来设置资源输出的内容类型头。
b)魔法分类
Apache Web服务器扫描每个资源的内容,并将其与已知的模式表(魔法文件)进行匹配,以确定每个文件的MIME类型。
c)显示分类
网络服务器被配置为强制特定文件或目录内容具有MIME类型,而不管文件扩展名和内容如何。
d)类型谈判
通过配置Web服务器,它可以通过与用户协商来决定使用哪种格式和相关的MIME类型。
3)重定向
网络服务器有时会返回重定向响应,而不是成功的消息。网络服务器可以将浏览器重定向到另一个地方来执行请求。重定向响应码是3XX系列。位置响应头包含新地址的网址或内容的首选地址。
a)永久删除的资源
资源可能已被移动到新位置或用新的网址重命名。网络服务器可以告诉客户端资源已经被重命名,这样客户端就可以在从新地址获取资源之前更新书签等信息。状态代码301永久移动用于这种重定向。
b)临时删除的资源
资源已被临时移动或重命名。服务器可能希望将客户端重定向到新位置。但是因为重命名是暂时的,所以服务器希望客户端以后可以返回使用旧的URL,不要更新书签。参见其他状态代码303和临时重定向状态代码307用于这种重定向。
C)URL增强
服务器通常用重定向来重写URL,重定向常用于嵌入上下文。当请求到达时,服务器将生成一个包含嵌入状态信息的新网址,并将用户重定向到这个新网址。客户端将遵循此重定向信息并重新发起请求,但此请求将包含一个具有增强状态的完整URL。参见其他状态代码303和临时重定向状态代码307用于这种重定向。
负载平衡
过载的服务器接收请求,服务器可以将客户端重定向到负载较小的服务器。参见其他状态代码303和临时重定向状态代码307用于这种重定向。
e)服务器关联
Web服务器上可能有一些用户的本地信息,服务器可以将客户端重定向到包含该客户端信息的服务器。参见其他状态代码303和临时重定向状态代码307用于这种重定向。
f)规范目录名
当客户端请求的URL是不带尾随斜杠的目录名时,大多数Web服务器会将客户端重定向到带斜杠的URL,这样相对链接才能正常工作。
6.发送回复
Web服务器通过连接发送数据。发送数据可能与接收数据一样,与客户端有多个连接。有些是空闲的,有些是向服务器发送数据,有些是向客户端发送响应数据。为了记录连接状态,服务器还需要特别注意持久连接的处理。对于非持久连接,服务器应该在发送完整个消息后关闭自己的连接。
7.记录日志
当事务结束时,网络服务器将在日志文件中添加一个条目来描述执行的事务。
Copyright © 2017-2024 yunrg.cn All Rights Reserved. 山东云如故网络科技有限公司 版权所有 云如故 鲁ICP备19034752号