一次http请求中间都经历了什么
在我们从浏览器打出一串域名的时候,首先客户端获取URL信息,通过DNS解析域名,建立Tcp连接(网络会层层向下解析,从应用层到物理层最终变成信号向服务端传递),服务端接收到请求,会处理请求,返回响应,浏览器解析渲染页面,Tcp断开连接
1 概要
一个看似简单的过程,却包含着大量知识点。当用户在浏览器输入域名开始,到Web页面加载完毕,其中发生了许多事情,需要我们了解网络的基础知识,Web程序的相关知识。
2 流程
- 当输入URL地址后,客户端会获取地址,进行DNS解析
- 然后找到对应的服务IP端口访问反向代理服务器(可以无该步骤)
- 访问对应的Web服务器
- 浏览器渲染页面
3 详细介绍
-
首先输入URL
-
浏览器解析
比如 URL:www.github.com/z
浏览器会解析出 协议是https 、域名是www.github.com、资源是/z
-
浏览器与ISP(互联网提供商)通信 ,经过DNS解析
DNS解析
-
首先搜索浏览器自身缓存
-
然后搜索hosts文件和操作系统缓存
-
域名解析服务器发送请求
首先发送到根服务器,根据域名查找对应的子服务器,经过层层递归解析,或得最终的IP地址
-
一步一步向上返回到浏览器
-
-
浏览器获得IP地址会将原来的URL替换为https://192.168.12.1:443
(http默认端口80,https默认443)
-
浏览器发起网络请求
网络会将应用层协议层层向下转化(应用层-传输层-网络层-数据链路层-无物理层)成物理层的数据信号
-
服务端接收到浏览器的请求,建立起Tcp连接
-
访问到Nginx反向代理服务器,通过负载均衡访问Web服务器(Tomcat)
-
Tomcat 会接收并处理对应的请求
- 将请求携带的数据处理访问到对应的controller
- controller 会将参数处理访问对应的service
- service 处理对应的业务逻辑,需要时调用dao获取数据库持久化的数据;微服务项目可能会向其它服务发起新的RPC调用或者Http调用
- dao层访问数据库
- 层层向上返回结果 controller将返回结果放入http响应中
-
然后请求携带着响应数据层层返回到浏览器
-
浏览器从响应加载数据或者页面,一次请求结束Tcp断开连接