由于我知识有限,可能会有模糊或者错误的地方,欢迎讨论与指正.

1.浏览器发出http请求

  当用户访问一个url时,浏览器便会开始生成一个http请求.

  首先获取http请求中所需要的参数,如url,cookie,User-Agent等,然后请求操作系统发出http请求.

  操作系统接收到请求之后,接下来就是熟悉的OSI模型走一遍,生成最终在物理层传输的流,通过访问DNS服务器传递给请求的目标ip.

2.服务器接收到http请求

  当服务器接收到http请求之后,OSI模型再走一遍生成http报文传递给web容器.我们这里以tomcat,spring为例.

  首先来说一下tomcat接收到请求之后的行为:

  当tomcat接收到请求之后会根据其server.xml这个配置文件去匹配http请求的url对应的host(项目),如果匹配到则会匹配这个host中的servlet,查找处理该url的servlet,找到之后便会执行对应的doGet或者doPost等等.

  我们在部署一个web项目的时候,都会去配置web.xml,servlet就需要在这个文件中配置.我们使用spring的话,我们都会把DispatcherServlet这个类配置为servlet,而这个类的作用就是用于接收请求,并将请求分发给对应的的controller.

  接下来是具体的接收请求过程:

  ①当tomcat收到http请求之后,会根据请求内容生成HttpServletRequest对象和HttpServletResponse对象,然后根据server.xml中的配置,找到对应的host下对应url的servlet并将生成的两个对象传递过去,这个时候如果是有效的请求的话,则会匹配到DispatcherServlet,以上tomcat的传递请求任务就完成了.

  ②DispatcherServlet会根据具体的请求去匹配context中的controller(具体是从handlerMapping中查找对应的handler,然后对应的HanlderAdaptor执行hanler方法),最后返回一个controller会结果给DispatcherServlet.

  ③DispatcherServlet收到controller返回的结果之后会处理异常,渲染视图资源等,然后通过HttpServletResponse响应用户的请求,即向用户反馈http请求处理的结果以及相应资源.

从客户发送http请求到服务器返回http之间发生了什么的更多相关文章

  1. js - 使用jquery发送前台请求给服务器,并显示数据

    1.使用jquery发送前台请求给服务器,并显示数据 <%@ page contentType="text/html;charset=UTF-8" language=&quo ...

  2. axios发送post请求node服务器无法通过req.body获取参数

    问题: 项目前端使用Vue框架,后端使用node.js搭建本地服务器.前端通过 axios 方式请求后端数据的过程中,发现如果是 get 请求,服务器端能够通过 req.query 获取前端传递的参数 ...

  3. java内部发送http请求并取得返回结果,修改response的cookie

    public Object userLogin(HttpServletRequest request, HttpServletResponse response, String email, Stri ...

  4. socket编程-多个客户端向服务器发送人脸照片,服务器返回识别结果(服务器使用多线程)...

    recognition.py import numpy as np import face_recognition import os class recognition: def __init__( ...

  5. JMeter发送get请求并分析返回结果

    在实际工作的过程中,我们通常需要模拟接口,来进行接口测试,我们可以通过JMeter.postman等多种工具来进行接口测试,但是工具的如何使用对于我们来说并不是最重要的部分,最重要的是设计接口测试用例 ...

  6. jQuery的ajax请求express服务器返回数据

    html页面 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  7. Java发送Http请求并获取状态码

    通过Java发送url请求,查看该url是否有效,这时我们可以通过获取状态码来判断. try { URL u = new URL("http://10.1.2.8:8080/fqz/page ...

  8. JavaWeb 发送get请求

      JavaWeb 发送get请求 CreationTime--2018年6月20日15点27分 Author:Marydon 1.前提 通过HttpClient来实现 2.具体实现 客户端如何发送请 ...

  9. JavaWeb 发送post请求的2种方式(form、json)

      JavaWeb 发送post请求的2种方式(form.json) CreationTime--2018年6月20日10点15分 Author:Marydon 前提:通过HttpClient来实现 ...

随机推荐

  1. Qt QLabel加载图片

    QLabel加载图片 //在对应的控件中显示图片 void qm_img::DisplayImg(cv::Mat imgParam, QLabel *labelParam) { if (!imgPar ...

  2. 全面系统Python3入门+进阶-1-8 Python的前景

    语言的热度. python在开发效率上有优势 大数据.人工智能 结束

  3. SBX(Simulated binary crossover)模拟二进制交叉算子和DE(differential evolution)差分进化算子

    一起来学演化计算-SBX(Simulated binary crossover)模拟二进制交叉算子和DE(differential evolution)差分进化算子 觉得有用的话,欢迎一起讨论相互学习 ...

  4. 123457123456#2#----com.MCgame.ShuXueKoSuan98--前拼后广--儿童小学数学口算Game-mc22222

    com.MCgame.ShuXueKoSuan98--前拼后广--儿童小学数学口算Game-mc

  5. Intellij IDEA集成mybatis-generator插件自动生成数据库实体操作类

    Intellij IDEA集成mybatis-generator插件自动生成数据库实体操作类 转载至:https://blog.csdn.net/fishinhouse/article/details ...

  6. 异步I/O、事件驱动、单线程

    异步I/O.事件驱动.单线程 nodejs的特点总共有以下几点 异步I/O(非阻塞I/O) 事件驱动 单线程 擅长I/O密集型,不擅长CPU密集型 高并发 下面是一道很经典的面试题,描述了node的整 ...

  7. zookeeper的java api操作

    zookeeper的java api操作 创建会话: Zookeeper(String connectString,int sessionTimeout,Watcher watcher) Zookee ...

  8. transform-transition-animation(2)

    transform transform : none | <transform-function> [ <transform-function> ]* 也就是: transfo ...

  9. 20191108-从零搭建基于Linux的RobotFramework框架

    第一步:安装Centos7 64位操作系统 直接安装即可,不详述 第二步:yum下载wget yum update yum install wget 第三步:安装Python3 建议安装3.7,我在 ...

  10. 嵌入式Linux学习笔记之第二阶段---文件I/O

    1.文件IO的四个函数 一些术语: 不带缓冲的I/O: 每个read和write都调用内核中的一个系统调用. 文件描述符: 一个非负整数,对内核而言,所以打开的文件都通过文件描述符引用. ①打开或创建 ...