当前位置: 首页 > article >正文

从输入网址到网页显示期间发生了什么?

1. 浏览器解析 url

      当你在浏览器的导航栏输入网址后,浏览器会对输入的 url 进行解析,从而发送给 web 服务器的请求信息。

2. 生成对应的 http 请求后,浏览器就会通过 DNS 去查询 web 服务器的真实 IP 地址

DNS 解析流程:(以www.baidu.com为例)

  1. 首先客户端 (浏览器) 会向本地 DNS 发送一条消息询问 web 服务器的地址,如果本地缓存表中有则直接返回
  2. 如果本地没有,本地 DNS 则会请求顶级 DNS(只指路不带路) ,询问是否有该域名信息
  3. 根 DNS 接受来自本地的请求后,根据对应的后缀(.com)将请求转发送给对应的顶级域名服务器
  4. 本地域名服务器收然后就会顺着根 DNS 给指明的道路来到顶级 DNS
  5. 顶级域名服务器又根据后缀(baidu.com)将请求转发给权威 DNS
  6. 本地 DNS 这是就会来到权威 DNS 询问该域名对应的 IP 地址
  7. 权威 DNS 查询后将查询结果告知本地 DNS
  8. 本地 DNS 再将 IP 地址返回客户端,客户端和目标建立连接
3. 浏览器通过本地 DNS 的一系列请求后拿到具体的 IP 地址,然后就会进行远程定位,通过 TCP 协议和远程服务器进行连接

TCP 建立连接的过程:(三次握手)

  • 刚开始客户端和服务器端都是 closed 状态
  • 服务器端主动监听某一端口处于 listening 状态。
  • 客户端主动发起连接 SYN,之后处于 syn-sent 状态。
  • 服务器端接收到发起的连接请求,返回 SYN ,并且返回客户端 SYN 的 ACK,然后处于 SYV-RCVD 状态
  • 客户端收到服务器端的 SYN 和 ACK 之后,就会发送对服务器端 SYN 的 ACK,之后处于 ESTABLISHED 状态
  • 服务器端收到自身 ACK 的 ACK 之后,处于ESTABLISHED 状态,至此,三次握手完成。
4. 进行 url 解析之后,浏览器就确定了具体的服务器地址和文件名,接下来就是根据这些信息来生成对应的 http 请求
5. 服务器接受到 http 请求后会解析这个请求,然后生成一个具体的响应头和响应内容。响应头就是服务器告诉浏览器的一些必要信息,响应内容就是请求对应的具体内容
6. 浏览器根据响应内容进行 HTML 的渲染,一部分一部分的显示,知道完全解析完毕
7. 当浏览器解析完服务器传来的全部内容后就会进行 TCP 四次挥手和服务器断开连接

四次挥手:

  • 客户端打算关闭连接,此时会发送一个 TCP 首部 FIN 标志位被置为 1 的报文,也即 FIN 报文,之后客户端进入 FIN_WAIT_1 状态。
  • 服务端收到该报文后,就向客户端发送 ACK 应答报文,接着服务端进入 CLOSE_WAIT 状态。
  • 客户端收到服务端的 ACK 应答报文后,之后进入 FIN_WAIT_2 状态。
  • 等待服务端处理完数据后,也向客户端发送 FIN 报文,之后服务端进入 LAST_ACK 状态。
  • 客户端收到服务端的 FIN 报文后,回一个 ACK 应答报文,之后进入 TIME_WAIT 状态
  • 服务端收到了 ACK 应答报文后,就进入了 CLOSE 状态,至此服务端已经完成连接的关闭。
  • 客户端在经过 2MSL 一段时间后,自动进入 CLOSE 状态,至此客户端也完成连接的关闭。

http://www.kler.cn/a/541470.html

相关文章:

  • C++ Primer 类型转换
  • 第四十八章:黄山之行:与小一的奇妙冒险
  • 大语言模型需要的可观测性数据的关联方式
  • 软件模拟I2C案例(寄存器实现)
  • go-elasticsearch创建ik索引并进行查询操作
  • 激活函数篇 04 —— softmax函数
  • Redis中的某一热点数据缓存过期了,此时有大量请求访问怎么办?
  • 自动化xpath定位元素(附几款浏览器xpath插件)
  • ffmpeg -muxers
  • ARM RFEIA指令作用
  • 力扣 零钱兑换
  • DeepSeek全球第二,R1生态扩展,华为荣耀接入,OpenAI推出深度研究,谷歌Gemini 2.0发布!AI Weekly 2.3-2.9
  • ASP.NET Core SignalR案例:导入英汉词典
  • CNN-LSTM卷积神经网络长短期记忆神经网络多变量多步预测,光伏功率预测
  • 【Rust中级教程】1.3. 内存 Pt.1:各类概念的定义及变量的高级模型和低级模型
  • Node.js调用DeepSeek Api 实现本地智能聊天的简单应用
  • 访问修饰符(C#)
  • DeepSeek接口联调(postman版)
  • 在 C++ 中使用 Protocol Buffers(protobuf)
  • ESLint 如何处理 ES6+ 语法
  • excel LOOKUP
  • Git 分布式版本控制工具使用教程
  • 第四节 docker基础之---dockerfile部署JDK
  • javaEE-11.javaScript入门
  • Oracle的学习心得和知识总结(三十三)|Oracle数据库数据库的SQL ID的底层计算原理分析
  • 神经网络常见激活函数 7-ELU函数