[SSP]HTTP权威指南——Web服务器初探

本文深入探讨了web服务器执行的四个基本任务:建立连接、接收请求、访问资源及构建响应,并介绍了接受客户端连接的过程及ident协议的作用。文章还详细阐述了web服务器如何解析请求报文、工作流程及其结构,包括单线程服务器、多进程服务器、I/O服务器和多线程服务器的工作原理。

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

web服务器会执行的基本任务

  1. 建立连接——接受一个客户端连接,或者如果不希望与这个客户端建立连接,将其关闭
  2. 接收请求——从网络中读取一条HTTP请求报文
  3. 处理请求——对请求报文进行解释,并采取行动
  4. 访问资源——访问报文中指定的资源
  5. 构建响应——创建带有正确首部的HTTP响应报文
  6. 发送响应——将响应回送给客户端
  7. 记录事务处理过程——将与已完成事务有关的内容记录在一个日志文件中


接受客户端连接

当客户端发起一个到服务器的TCP连接时,服务器会建立连接,并从TCP连接中将IP地址解析出来。一旦新的连接建立并被接受,服务器就会将新连接添加到其现存web服务器连接列表中,做好监视连接上的数据传输的准备。当然,web服务器还可以随意拒绝或立即关闭任意一条连接。
有些web服务器支持IETF(I nternet Engineering Task Force)的ident协议,下面是wiki中关于IDENT协议的一段
The  Ident Protocol  ( Identification Protocol IDENT ), specified in  RFC 1413 , is an  Internet   protocol  that helps identify the user of a particular  TCP  connection. One popular  daemon program  for providing the ident service is  identd .
The Ident Protocol is designed to work as a server  daemon , on a  user 's computer, where it receives requests to a specified  port , generally 113. In a query, a client specifies a pair of  ports  (a local and a remote port). The server will then send a specially designed response that identifies the username of the user who runs the program that uses the specified pair of ports.
完整内容请访问wiki中关于Ident_protocol的解释
简单来说 ident协议就是一个运行在客户端的一个程序,会在特定端口上监听ident请求,一般是服务器向客户端发送ident请求,然后ident程序就会然后客户端的ident用户名给服务器。服务器拿到发情HTTP连接的用户名,对服务器的日志记录很有用,在通用日志格式(Common Log Format)中,第二个字段中就包含了每条HTTP请求的ident用户名。
下图是服务器向客户端请求ident用户名的示意图

接收请求报文

解析请求报文时,web服务器会:
  • 解析请求行,查找请求方法、指定的资源标识符以及版本号,各项之间由一个空格分隔,并以一个回车换行(CRLF:Carriage-Return Line-Feed)序列作为行的结束
  • 读取以CRLF结尾的报文首部
  • 监测以CRLF结尾的、标识首部结束的空行(如果有的话)
  • 如果有的话(长度由content-length首部指定),读取请求主体
有些web服务器为了后面便于对报文进行操作,会将解析后的报文重新用内部数据结构来存储。例如

下面是四种不痛的web服务器的结构

分别是单线程服务器、多进程服务器、I/O服用服务器以及服用的多线程服务器
其中,I/O服用服务器是这样工作的:同时监听所有连接上的活动,当连接的状态发生变化时(比如,有数据可用,或者出现错误),就对那条连接进行少量处理,处理结束后,将数据返回到开放连接列表中,等待下一次状态变化。只有在有事情可做的时候才对连接进行处理,在空闲连接上等待的时候并不会绑定线程和进程。

服务器其他的一些操作,本章介绍的内容都比较简单,所以没什么好说的,等到后面有详细说明的时候再写。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值