一次http请求中间都经历了什么

1,446 阅读2分钟

一次http请求中间都经历了什么

在我们从浏览器打出一串域名的时候,首先客户端获取URL信息,通过DNS解析域名,建立Tcp连接(网络会层层向下解析,从应用层到物理层最终变成信号向服务端传递),服务端接收到请求,会处理请求,返回响应,浏览器解析渲染页面,Tcp断开连接

1 概要

一个看似简单的过程,却包含着大量知识点。当用户在浏览器输入域名开始,到Web页面加载完毕,其中发生了许多事情,需要我们了解网络的基础知识,Web程序的相关知识。

2 流程

  • 当输入URL地址后,客户端会获取地址,进行DNS解析
  • 然后找到对应的服务IP端口访问反向代理服务器(可以无该步骤)
  • 访问对应的Web服务器
  • 浏览器渲染页面

3 详细介绍

  1. 首先输入URL

  2. 浏览器解析

    比如 URL:www.github.com/z

    浏览器会解析出 协议是https 、域名是www.github.com、资源是/z

  3. 浏览器与ISP(互联网提供商)通信 ,经过DNS解析

    DNS解析

    • 首先搜索浏览器自身缓存

    • 然后搜索hosts文件和操作系统缓存

    • 域名解析服务器发送请求

      首先发送到根服务器,根据域名查找对应的子服务器,经过层层递归解析,或得最终的IP地址

    • 一步一步向上返回到浏览器

  4. 浏览器获得IP地址会将原来的URL替换为https://192.168.12.1:443

    (http默认端口80,https默认443)

  5. 浏览器发起网络请求

    网络会将应用层协议层层向下转化(应用层-传输层-网络层-数据链路层-无物理层)成物理层的数据信号

  6. 服务端接收到浏览器的请求,建立起Tcp连接

  7. 访问到Nginx反向代理服务器,通过负载均衡访问Web服务器(Tomcat)

  8. Tomcat 会接收并处理对应的请求

    • 将请求携带的数据处理访问到对应的controller
    • controller 会将参数处理访问对应的service
    • service 处理对应的业务逻辑,需要时调用dao获取数据库持久化的数据;微服务项目可能会向其它服务发起新的RPC调用或者Http调用
    • dao层访问数据库
    • 层层向上返回结果 controller将返回结果放入http响应中
  9. 然后请求携带着响应数据层层返回到浏览器

  10. 浏览器从响应加载数据或者页面,一次请求结束Tcp断开连接