1. 地址栏输入后的本地操作
当我们在浏览器的地址栏中,输入xxx内容后,浏览器的进程首先会判断输入的内容:
- 如果是普通的字符,那浏览器会使用默认的搜索引擎去对于输入的xxx生成URL。
- 如若输入的是网址,那浏览器会拼接协议名形成完整的URL。
当按下回车后,浏览器进程会将生成的完整URL发送到网络进程:
当网络进程收到传过来的URL后,首先并不会直接发出网络请求,而是会先查询本地缓存:
2. 到达后端服务器之前的操作
3. 到达后端服务器之后的操作
4. 服务器的响应操作
5. 总结
①用户在地址栏输入内容,浏览器判断后生成相应的URL并传给网络进程。
②网络进程先查询本地缓存,没有则解析URL并向DNS发送请求,得到IP。
③网络进程先与目标服务器进行TCP、TLS多次握手,建立TCP、TLS安全连接。
④紧接着组装请求报文,并由各个分层对数据进行封装,最终转为0、1格式。
⑤基于建立好的连接,利用物理介质传输数据,通过路由器控制数据的传输方向。
⑥请求会先去到CDN查询是否有缓存的内容,如果没有则继续向下请求。
⑦请求来到LVS后被转发到Nginx,再由Nginx转发到Gateway网关。
⑧Gateway网关根据配置好的API分发规则,将请求分发到具体服务。
⑨紧接着再从Nacos注册中心内,查询出该服务的具体服务实例IP。
⑩请求来到具体的服务器后,先通过端口号找到具体的WEB服务进程Tomcat。
⑪Tomcat基于SpringMVC的工作流程为请求定位到具体的Java后端方法。
⑫线程执行Java方法时,先去Redis中查询是否有数据,没有则查询MySQL。
⑬查询DB前先通过MyBatis生成SQL语句,然后再通过DB连接执行SQL。
⑭请求根据已配置的数据源地址,来到MySQL并执行SQL语句,从而获得数据。
⑮经过报文组装、数据封装、请求转发等操作,向客户端响应数据(原路返回)。
⑯应答报文经物理介质传输后,最终抵达客户端网络进程(可能会将数据加入缓存)。
⑰网络进程将数据交给浏览器之后,根据情况准备做TCP四次挥手,断开连接。
⑱浏览器创建渲染子进程,然后根据数据生成渲染树,最后绘制并显示页面。