从客户发送http请求到服务器返回http之间发生了什么
由于我知识有限,可能会有模糊或者错误的地方,欢迎讨论与指正.
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之间发生了什么的更多相关文章
- js - 使用jquery发送前台请求给服务器,并显示数据
1.使用jquery发送前台请求给服务器,并显示数据 <%@ page contentType="text/html;charset=UTF-8" language=&quo ...
- axios发送post请求node服务器无法通过req.body获取参数
问题: 项目前端使用Vue框架,后端使用node.js搭建本地服务器.前端通过 axios 方式请求后端数据的过程中,发现如果是 get 请求,服务器端能够通过 req.query 获取前端传递的参数 ...
- java内部发送http请求并取得返回结果,修改response的cookie
public Object userLogin(HttpServletRequest request, HttpServletResponse response, String email, Stri ...
- socket编程-多个客户端向服务器发送人脸照片,服务器返回识别结果(服务器使用多线程)...
recognition.py import numpy as np import face_recognition import os class recognition: def __init__( ...
- JMeter发送get请求并分析返回结果
在实际工作的过程中,我们通常需要模拟接口,来进行接口测试,我们可以通过JMeter.postman等多种工具来进行接口测试,但是工具的如何使用对于我们来说并不是最重要的部分,最重要的是设计接口测试用例 ...
- jQuery的ajax请求express服务器返回数据
html页面 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- Java发送Http请求并获取状态码
通过Java发送url请求,查看该url是否有效,这时我们可以通过获取状态码来判断. try { URL u = new URL("http://10.1.2.8:8080/fqz/page ...
- JavaWeb 发送get请求
JavaWeb 发送get请求 CreationTime--2018年6月20日15点27分 Author:Marydon 1.前提 通过HttpClient来实现 2.具体实现 客户端如何发送请 ...
- JavaWeb 发送post请求的2种方式(form、json)
JavaWeb 发送post请求的2种方式(form.json) CreationTime--2018年6月20日10点15分 Author:Marydon 前提:通过HttpClient来实现 ...
随机推荐
- Fiddler抓包显示请求时延
两种方式:配置和加代码.配置只是将隐藏的时延字段显现了出来,格式没法改:加代码就随你写了,格式自己说了算. 先说配置的,在左边框顶部字段名称右击鼠标 -> 点击Customize colums. ...
- 零基础学Python-第二章 :Python基础语法-06.变量的定义和常用操作
网络带宽计算器的原理 输出的内容用print 引入变量,在前面写一个变量,是一个有意义的单词.把123这个数值赋值给变量a 下面的代码可读性 要比上面高很多. 变量其他需要掌握的知识点 一般这样是用做 ...
- sqoop import mysql to hive table:GC overhead limit exceeded
1. Scenario description when I use sqoop to import mysql table into hive, I got the following error: ...
- BladeX部署说明(win7)
一:安装jdk-8u221-windows-x64 二:安装Nacos,解压nacos-server-1.0.0,运行bin目录下的startup.cmd,成功可以用浏览器访问:localhost:8 ...
- DBGridEh中根据单价和数量如何计算金额?
单价和数量输入完后,在数量单元格往任何方向移动(上下左右),金额都能自动计算.如何实现? 不要在UI元素的事件中计算字段,你可以在单价字段和数量字段的OnChange事件中进行计算.假设数据集名称为D ...
- 一份 Tomcat 和 JVM 的性能调优经验总结!拿走不谢
Tomcat性能调优 找到Tomcat根目录下的conf目录,修改server.xml文件的内容.对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创建 ...
- 使用JSQLParser解析SQL中涉及到的表
首先添加Maven依赖: <dependency> <groupId>com.github.jsqlparser</groupId> <artifactId& ...
- 【Leetcode_easy】917. Reverse Only Letters
problem 917. Reverse Only Letters solution: class Solution { public: string reverseOnlyLetters(strin ...
- Deepin升级Linux5.0内核(目前最新5.3-rc7)
copy from:https://bbs.deepin.org/forum.php?mod=viewthread&tid=175411&extra=&mobile=no 以下 ...
- LeetCode 112. 路径总和(Path Sum) 10
112. 路径总和 112. Path Sum 题目描述 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和. 说明: 叶子节点是指没有子节点的节 ...