zdq0394.github.com

Tech study and research.

Follow me on GitHub

Web服务器

接受客户端连接

  • 客户端请求一条到Web服务器的TCP连接时,Web服务器会建立连接,判断连接的另一端是哪个客户端,从TCP连接中将IP地址解析出来。
  • Web服务器可以随意拒绝或者立即关闭任意一条连接。

    接收请求报文

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

解析请求报文时,Web服务器会:

  • 解析请求行,查找请求方法、指定的资源标识符(URI)以及版本号,各项之间由一个空格分隔,并以一个回车换行(CRLF)序列作为行的结束。
  • 读取以CRLF结尾的报文首部。
  • 检测到以CRLF结尾的、标识首部结束的空行(如果有的话)。
  • 如果有的话(长度由Content-Length首部指定),读取请求主体。

服务器处理连接有大概4种类型:

  • 单线程Web服务器
  • 多进程及多线程Web服务器
  • 复用I/O的服务器
  • 复用的多线程Web服务器

处理请求

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

对资源的映射及访问

Web服务器是资源服务器。

构建响应

一旦服务器识别出了资源,就执行请求方法中描述的动作,并返回响应报文。

响应报文中包含有响应状态码、响应首部,如果生成了响应主体的话,还包括响应主体。

发送响应

Web服务器通过连接将响应数据发回客户端。