一次完整的http请求处理过程

一次完整的http请求处理过程:

https://images2017.cnblogs.com/blog/1216496/201710/1216496-20171019104632287-239294179.png

(1) 建立或处理连接:接收请求或拒绝请求;

并行连接:通过多条TCP 连接发起并发的HTTP 请求;

持久连接:keep-alive,长连接,重用TCP连接,以消除连接和关闭的时延,以事务个数和时间来决定是否关闭连接

管道化连接:通过共享TCP 连接发起并发的HTTP 请求

复用的连接:交替传送请求和响应报文(实验阶段,还未实现)

① 串行连接

https://images2017.cnblogs.com/blog/1216496/201710/1216496-20171019104629959-1287113072.png

② 并行连接

https://images2017.cnblogs.com/blog/1216496/201710/1216496-20171019104630443-1599479514.png

③ 持久连接

https://images2017.cnblogs.com/blog/1216496/201710/1216496-20171019104630802-318657196.png

④ 管道化连接

https://images2017.cnblogs.com/blog/1216496/201710/1216496-20171019104631131-157055098.png

 

(2) 接收请求:接收来自于网络上的主机请求报文中对某特定资源的一次请求的过程;

接收请求的模型:

并发访问响应模型:

1、单进程I/O模型:启动一个进程处理用户请求;这意味着,一次只能处理一个请求,多个请求被串行响应;

2、多进程I/O结构:并行启动多个进程,每个进程响应一个请求;

3、复用的I/O结构:一个进程响应n个请求;

多线程模式:一个进程生成n个线程,一个线程处理一个请求;

事件驱动(event-driven):一个进程直接n个请求;

4、复用的多进程I/O结构:启动多个(m)个进程,每个进程生成(n)个线程;

响应的请求的数量:m*n

https://images2017.cnblogs.com/blog/1216496/201710/1216496-20171019104632677-940409956.png

(3) 处理请求:对请求报文进行解析,获取客户端请求的资源及请求方法等相关信息;

处理请求:分析请求报文的http请求报文首部

http协议:

http请求报文首部

http响应报文首部

请求报文首部的格式:

<method> <URL> <VERSION>

HEADERS: (name: value)

<request body>

https://images2017.cnblogs.com/blog/1216496/201710/1216496-20171019105646209-720350204.png

示例:

Host: www.magedu.com 请求的主机名称

Server: Apache/2.4.7

HTTP 常用请求方式,Method:

GET 、POST 、HEAD 、PUT 、DELETE 、TRACE 、OPTIONS

 

(4) 访问资源:获取请求报文中请求的资源;

web服务器,即存放了web资源的主机,负责向请求者提供对方请求的静态资源,或动态资源运行生成的结果;这些资源通常应该放置于本地文件系统某路径下;此路径称为DocRoot;

https://images2017.cnblogs.com/blog/1216496/201710/1216496-20171019104632927-1750967326.png

/var/www/html/:

images/logo.jgp

http://www.magedu.com/images/logo.jpg

web服务器的资源路径映射方式:

(a) docroot

(b) alias

(c) 虚拟主机的docroot

(d) 用户家目录的docroot

(5) 构建响应报文:

1)响应实体:如果事务处理产生了响应主体,就将内容放在响应报文中回送过去。响应报文中通常包括:

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

描述了响应主体长度大小的Content-Length

实际报文的主体内容

2)URL 重定向:web 服务构建的响应并非客户端请求的资源,而是资源另外一个访问路径

永久重定向:http://www.360buy.com —> http://www.jd.com

临时重定向:http://www.taobao.com —> https://www.taobao.com

3)MIME 类型:多媒体的邮件扩展

Web 服务器要负责确定响应主体的MIME 类型。有很多配置服务器的方法可以将MIME 类型与资源管理起来

魔法分类(扫描首部信息):Apache web 服务器可以扫描每个资源的内容,并将其与一个已知模式表,首部( 被称为魔法文件) 进行匹配,以决定每个文件的MIME 类型。这样做可能比较慢,但很方便,尤其是文件没有标准扩展名的时候

显式分类:可以对Web 服务器进行配置,使其不考虑文件的扩展名或内容,强制特定文件或目录内容拥有某个MIME 类型,例如:php,Apache不识别,强制识别

类型协商: 有些Web 服务器经过配置,可以以多种文档格式来存储资源。在这种情况下,可以配置Web 服务器,使其可以通过与用户的协商来决定使用哪种格式( 及相关的MIME 类型)” 最好;

(6) 发送响应报文:

Web 服务器通过连接发送数据时也会面临与接收数据一样的问题。服务器可能有很多条到各个客户端的连接,有些是空闲的,有些在向服务器发送数据,还有一些在向客户端回送响应数据。服务器 要记录连接的状态,还要特别注意对持久连接的处理。对非持久连接而言,服务器应该在发送了整条报文之后,关闭自己这一端的连接。对持久连接来说,连接可能仍保持打开状态,在这种情况下,服务器要 正确地计算Content-Length首部,不然客户端就无法知道响应什么时候结束了

https://images2017.cnblogs.com/blog/1216496/201710/1216496-20171019104629099-1292854977.png

 

(7) 记录日志:

日志类型:

访问日志:现在愈发重要,大数据的时代

错误日志:排错使用

参考资料:

马哥Linux运维教程为本篇文章的主要参考资料

图片源于网络