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. 怎样用Python的Scikit-Learn库实现线性回归?

    来源商业新知号网,原标题:用Python的Scikit-Learn库实现线性回归 回归和分类是两种 监督 机器 学习算法, 前者预测连续值输出,而后者预测离散输出. 例如,用美元预测房屋的价格是回归问 ...

  2. SpringBoot之Swagger2

    SpringBoot利用Swagger2只需配置少量的注解信息便能方便地构建强大的API文档. 1.添加maven依赖 2.创建Swagger2配置类 3.在API添加文档内容 4.访问http:// ...

  3. Java8内置的函数式接口

    JDK 1.8 API 包含了很多内置的函数式接口.其中就包括我们在老版本中经常见到的 Comparator 和 Runnable,Java 8 为他们都添加了 @FunctionalInterfac ...

  4. Jmeter固定定时器(Constant Timer)

    如上图,Constant Timer是jmeter固定定时器元件 一般用来设置延时的,放在某个请求下,表示Constant Timer配置的指定时间后,再开始发起这个请求操作(单位:毫秒) 根据Con ...

  5. CodeWarrior 10 配置Jlint初始化文件

    新建一个项目之后,飞思卡尔的仿真器的配置不如德州仪器那么简单.他需要一些配置. 当我们新建一个工程后,可以采取如下步骤配置Jlint: 1.右击工程名,选择属性. 2.在Run/Debug Setti ...

  6. mysql in 子查询 效率慢,对比

    desc SELECT id,detail,groupId from hs_knowledge_point where groupId in ( UNION all ) UNION ALL SELEC ...

  7. mysql表理解

    4.1 索引组织表 1.在innodb存储引擎中,每张表都有个主键,如果在创建表时没有显式地定义主键,则innodb存储引擎会按如下方式选择或创建主键: ①:首先判断表中是否有非空的唯一索引,如果有, ...

  8. Centos7关闭防火墙

    CentOS 7.0默认使用的是firewall作为防火墙 systemctl stop firewalld.service #停止firewall systemctl disable firewal ...

  9. 【redis 学习系列】API的理解与使用(二)

    3.哈希 几乎所有的语言都支持了哈希(hash)类型.在Redis中,哈希类型是指键值本身又是一个键值对结构,形如:value = {{field, value} ... {field, value} ...

  10. 关于HTML5中的sessionStorage的会话级缓存使用

    sessionStorage作为HTML5的Web Storage的两种存储方式之一.    用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数 ...