从客户发送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来实现 ...
随机推荐
- 前端速查手册——Note
目录 自定义弹框(模块框) HTML5新增标签 HTML5新增属性 自定义弹框(模块框) HTML <div style="display:none" id="mo ...
- python多线程中join()的理解
在 Python 的多线程编程中,经常碰到 thread.join()这样的代码.那么今天咱们用实际代码来解释一下 join 函数的作用. 第一,当一个进程启动之后,会默认产生一个主线程,因为线程是程 ...
- MySQL数据库双机热备------主-主备份配置
MySQL数据库双机热备------主-主备份配置 实验环境: 主1数据库 192.168.1.1 centos6.5 x86_64 +MySQL5.5.35 主2数据库192.168.1.2 Wi ...
- docker镜像的导入导出
docker save > nginx.tar nginx:latest docker load < nginx.tar
- RabbitMQ 入门教程(PHP版) 第五部分:通过主题进行消息分发(Topics)
对于 Message 的 routing_key 字符串格式是有限制的:以点号"."分割的字符表,如php.laravel,并且长度不能超过 255 个字节. 对于 routing ...
- 生成有目录的pdf
生成有目录的pdf 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 https://jingyan.baidu.com/article/ff411625c2153512e48237a ...
- mysql遇见Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre的问题
问题出现的原因: MySQL 5.7.5及以上功能依赖检测功能.如果启用了ONLY_FULL_GROUP_BY SQL模式(默认情况下),MySQL将拒绝选择列表,HAVING条件或ORDER BY列 ...
- LODOP带空格和不带空格的字体对齐
有时候需要用到字体上下对齐,有些需要的文字较多,较少的文字需要加部分空格才能向上面的文字对齐.本文实际测试了一下字体对齐需要的空格.代码是在editplus里写的,该编辑软件里的字体首选项设置的是Co ...
- Python离线环境
一.应用场景 比如:对于数据安全要求比较严格的机房,服务器是不允许上网的.那么我现在开发了一套python程序,需要一些模块,怎么运行? 二.离线包制作 有2个解决方案: 1. 使用requireme ...
- python解析本地HTML文件
Python使用爬虫技术时,每运行一次,本地都会访问一次主机.为避免完成程序前调试时多次访问主机增加主机负荷,我们可以在编写程序前将网页源代码存在本地,调试时访问本地文件即可.现在我来分享一下爬取资料 ...