HTTP02 HTTP请求处理过程的七个步骤

 
 

1、web服务处理步骤

web服务的处理过程可总结为七个步骤:

 
1)发起请求:客户端向服务器端发起连接请求,建立”三次握手“;
2)接收请求:服务器端接收用户请求,请求的数量可能是一个到很多个
3)处理请求:服务器端:根据客户端请求中命令来决定如何处理请求(get、search...)
4)访问资源:服务器收到请求,代理客户端去访问后端实际资源(mysql、磁盘文件)
5)构建响应报文:对HTTP报文首部进行封装,构建响应报文
6)发送响应报文:将封装的报文首部发回个客户端
7)记录日志:记录客户端的请求过程,如记录客户访问的记录到/var/log/access_log
2、一次完整的HTTP请求处理过程
 
1)建立请求:接收或拒绝连接请求
2)接收请求:接收客户端请求报文中对某资源的一次请求的过程
访问响应模型
 
单进程IO模型:启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行响应
多进程IO模型:并行启动多个进程,每个进程响应一个连接请求,Apache默认采用的模型。
复用的IO模型:启动一个进程,同时响应N个连接请求
  实现方法:多线程模型和事件驱动
    多线程模型:一个进程生成N个线程,每线程响应一个连接请求
    事件驱动:一个进程处理N个请求(nginx采用此种模型)
复用的多线程IO结构:启动M个进程,每个进程响应N个连接请求,同时接收M*N个请求

IO模型总结:
单进程IO模型:理想化的,基本不存在的,一次只为一个用户处理,多了就需要排队处理
多进程IO模型:同时开10个进程,则处理10个用户请求,其他数量以此类推(Apahe默认采用的模型)
复用IO模型:一个进程可以响应多个用户的请求
 
3)处理请求:服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选的主体部分对请求进行处理
 
 
  

元数据:请求报文首部格式
<method> <URL> <VERSION>
HEADERS 格式 name:value
<request body>
 
示例:
Host: www.magedu.com 请求的主机名称
Server: Apache/2.4.7
 
HTTP常用请求方式:
Method、GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS
 
 
 
4)访问资源:服务器获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源
  
 
   资源放置于本地文件系统特定的路径:DocRoot
 
 

DocRoot -> /var/www/html
/var/www/html/images/logo.jpg

https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1529513023946&di=ca1b401de17ce063addc19d938cdfd05&imgtype=0&src=http%3A%2F%2Fupload.17u.net%2Fuploadpicbase%2Fimage%2F201405090325321529.jpg

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

(a) docroot
(b) alias
(c) 虚拟主机docroot
(d) 用户家目录docroot
 
 
 
 

5)构建响应报文:一旦Web服务器识别除了资源,就执行请求方法中描述的动作,并返回响应报文。响应报文中 包含有响应状态码、响应首部,如果生成了响应主体的话,还包括响应主体
 
①、响应实体:如果事务处理产生了响应主体,就将内容放在响应报文中回送过去。响应报文
中通常包括:
描述了响应主体MIME类型的Content-Type首部
描述了响应主体长度的Content-Length
实际报文的主体内容
 
 
② URL重定向:web服务构建的响应并非客户端请求的资源,而是资源另外一个访问路径
永久重定向:http://www.360buy.com
临时重定向:http://www.taobao.com
 
 
③MIME类型:
Web服务器要负责确定响应主体的MIME类型。多种配置服务器的方法可将MIME类型与资源管理起来
魔法分类:Apache web服务器可以扫描每个资源的内容,并将其与一个已知模式表(被称为魔法文件)进行匹配,以决定每个文件的MIME类型。
      这样做可能比较慢,但很方便,尤其是文件没有标准扩展名时
 
显式分类:可以对Web服务器进行配置,使其不考虑文件的扩展名或内容,强制特定文件或目录内容拥有某个MIME类型
 
类型协商: 有些Web服务器经过配置,可以以多种文档格式来存储资源。在这种情况下,可以配置Web服务器,使其可以通过与用户的协商来决定使用哪种格式(及相关的MIME类型)"最好"
 
 
 
 
 
6)发送响应报文:Web服务器通过连接发送数据时也会面临与接收数据一样的问题。服务器可能有很多条到各个客户端的连接,有些是空闲的,
          有些在向服务器发送数据,还有一些在向客户端回送响应数据。服务器要记录连接的状态,还要特别注意对持久连接的处理。
          对非持久连接而言,服务器应该在发送了整条报文之后,关闭自己这一端的连接。对持久连接来说,连接可能仍保持打开状态,
          在这种情况下,服务器要正确地计算Content-Length首部,不然客户端就无法知道响应什么时候结束了
 
7)记录日志:最后,当事务结束时,Web服务器会在日志文件中添加一个条目,来描述已执行的事务
 
 
 
 
 
 
 

HTTP二、HTTP请求处理过程的七个步骤的更多相关文章

  1. 基础知识系列☞各版本下IIS请求处理过程区别

    转载地址→http://www.cnblogs.com/fsjohnhuang/articles/2332074.html ASP.NET是一个非常强大的构建Web应用的平台, 它提供了极大的灵活性和 ...

  2. Hadoop Mapreduce分区、分组、二次排序过程详解[转]

    原文地址:Hadoop Mapreduce分区.分组.二次排序过程详解[转]作者: 徐海蛟 教学用途 1.MapReduce中数据流动   (1)最简单的过程:  map - reduce   (2) ...

  3. 【转】各版本IIS下ASP.net请求处理过程区别

    原文地址:http://www.cnblogs.com/fsjohnhuang/articles/2332074.html ASP.NET是一个非常强大的构建Web应用的平台,它提供了极大的灵活性和能 ...

  4. ASP.NET请求处理过程

    当请求一个*.aspx文件的时候,这个请求会被inetinfo.exe进程截获,它判断文件的后缀(aspx)之后,将这个请求转交给Aspnet_isapi.dll,aspnet_isapi.dll会通 ...

  5. http服务详解(1)——一次完整的http服务请求处理过程

    前言:要熟练掌握一个服务,首先需要非常了解这个服务的工作过程,这篇就详细解释了http服务的请求处理过程. 一次完整的http请求处理过程 (1)流程图 (2)过程详解 0.DNS域名解析:递归查询. ...

  6. (转)Java回收对象的标记 和 对象的二次标记过程

    Java回收对象的标记 和 对象的二次标记过程 二次标记 针对这个问题,虚拟机的做法是进行两次标记,即第一次标记不在“关系网”中的对象.第二次的话就要先判断该对象有没有实现finalize()方法了, ...

  7. MVC的HTTP请求处理过程(IIS应用程序池、CLR线程池)

    主要内容 本文讲解的是:服务器接受Http Request请求之后,是如何进入.Net CLR,从而进一步操作的. 我们大家都知道,IIS必须先接受请求,然后才能有机会进入CLR,但对请求(reque ...

  8. 004-spring cloud gateway-网关请求处理过程

    一.网关请求处理过程 客户端向Spring Cloud Gateway发出请求.如果网关处理程序映射确定请求与路由匹配,则将其发送到网关Web处理程序.此处理程序运行通过特定于请求的过滤器链发送请求. ...

  9. asp.net的HTTP请求处理过程

    1.asp.net的HTTP请求处理过程 说明: (1).客户端浏览器向服务器发出一个http请求,此请求会被inetinfo.exe进程截获,然后转交给aspnet_isapi.dll进程,接着它又 ...

随机推荐

  1. [转载]EF或LINQ 查询时使用IN并且根据列表自定义排序方法

    原文地址:EF或LINQ 查询时使用IN并且根据列表自定义排序方法作者:李明川 EF和LINQ改变了原有的手写SQL时期的一些编码方法,并且增强了各数据库之间的移植性简化了开发时的代码量和难度,由于很 ...

  2. IDEA连接数据库自动生成实体类

    1.连接数据库   (1)按下图 ,  点击view-----选择tool windows----------选择database并点击   (2)弹出Database窗口,点击加号--------- ...

  3. boss推荐文章

    20170216 --- 谁是你的下一个客户?国内 B2B Predictive Marketing 公司浅探(中)https://zhuanlan.zhihu.com/p/25257243?refe ...

  4. linux查看Java线程

    一.查看Java进程pid的方式 1. ps命令 ps -ef | grep java 2. jvm自带的 jps 工具 3. 当然还有其他命令也可以显示 netstat ,top 二.查看Java线 ...

  5. MySQL添加用户并授权

    一. 创建用户 命令: CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 说明: username:你将创建的用户名 host:指定该用户 ...

  6. 需要重写URL但请求的目录不存在报404

    用的是asp.net webform,在global.asax的application_beginrequest中写的代码 很简单的一个需求,在url中输入http://www.test.com/lc ...

  7. VirtualBox 休眠恢复后无法联网解决办法

    环境:lubuntu 首先ifconfig查看网卡名,我这里是enp0s3. 接着: sudo ifconfig enp0s3 down sudo ifconfig enp0s3 up sudo dh ...

  8. 《Orange‘s》 Bochs环境配置

    安装配置bochs之前先写一个简单的引导扇区用来测试: org 07c00h mov ax,cs mov ds,ax mov es,ax call DispStr jmp $ DispStr: mov ...

  9. python--第十九天总结(Django)

    1.静态资源导入 {#在顶部load 一个staticfiles#} {% load staticfiles %} {#在底部使用#} <script src='{% static " ...

  10. js 加减乘除以及四舍五入 新写法

    1 四舍五入 eg: (1.23).round() = 1.2 (1.2456).round(3) = 1.246 Number.prototype.round = function (count) ...