浏览器地址栏输入URL,按下回车后发生了什么

本文深入解析了从在浏览器中输入URL到页面完全加载的全过程,包括DNS解析、TCP三次握手、HTTP请求、服务器响应及页面渲染等关键步骤,揭示了网页加载背后的复杂机制。

在地址栏输入URL后

  1. 输入URL,按回车
  2. dns解析(浏览器是不能识别url地址的,需解析成ip地址),
  3. 建立tcp连接,(tcp三次握手)
  4. 发送Http请求,
  5. 服务器进行处理并返回Http报文,
  6. 浏览器渲染页面,
  7. 断开连接(tcp四次挥手)

  1. URL

    URL(Uniform Resource Locator),统一资源定位符,用于定位互联网上资源,俗称网址。

  2. 域名解析解析 (DNS解析url对应的ip)

    域名解析:DNS 协议提供通过域名查找 IP 地址,或逆向从 IP 地址反查域名的服务。DNS 是一个网络服务器,我们的域名解析简单来说就是在 DNS 上记录一条信息记录。
    在浏览器中输入URL后,首先要进行DNS解析,DNS解析的顺序为:

    1、浏览器缓存
    2、本地hosts文件
    3、系统缓存
    4、路由器缓存
    5、DNS服务器迭代查询

    分析:域名解析实际上是将域名解析为ip地址的过程。
    首先,浏览器会检查本地hosts文件中是否有此url的映射关系,如果有就调用这个ip地址映射,完成域名解析。
    如果没有,则会查找本地DNS解析器缓存,如果查找到则返回。
    如果还是没有,则会查找本地DNS服务器,如果查找到则返回。
    最后迭代查询,按根域服务器 ->顶级域(.com)->第二层域(yeahfei.com) ->子域(admin.yeahfei.com)的顺序找到IP地址。

  3. tcp三次握手

    1.目的:同步客户端和服务端的序列号和确认号,并交换TCP窗口大小信息。防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。
    通过DNS得到目标的IP地址后,通过TCP协议向服务器发送请求即三次握手。
    在这里插入图片描述
    分析:通过第3阶段已经拿到了服务器的ip地址,在获取到IP地址后,便会开始建立一次连接,这是由TCP协议完成的,主要通过三次握手进行连接。

第一次握手: 建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;

第二次握手: 服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手: 客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成

  1. 发送Http请求

    建立连接:服务器允许客户端建立连接
    接受请求:从网络中读取HTTP报文交给Nginx或者Apache进行规则匹配
    处理请求:根据方法,资源,首部和可选的主体部分对请求进行处理
    访问资源:寻找存储对象,访问报文中指定的资源
    构建响应报文:创建有正确首部的HTTP响应报文

    此处需要图来说明

  2. 服务器处理请求并返回HTTP报文

    服务器处理请求并返回HTTP报文

  3. 解析渲染页面

    解析渲染页面
    浏览器得到页面后会进行展示,如果还包含其他外部资源如图片、视频等等则继续请求其他资源。
    分析:如果说响应的内容是HTML文档的话,就需要浏览器进行解析渲染呈现给用户。整个过程涉及两个方面:解析和渲染。在渲染页面之前,需要构建DOM树和CSSOM树。

    在浏览器还没接收到完整的 HTML 文件时,它就开始渲染页面了,在遇到外部链入的脚本标签或样式标签或图片时,会再次发送 HTTP 请求重复上述的步骤。在收到 CSS 文件后会对已经渲染的页面重新渲染,加入它们应有的样式,图片文件加载完立刻显示在相的应位置。在这一过程中可能会触发页面的重绘或重排。

    1.概念:
    重绘:某个元素的背景颜色,文字颜色等,不影响元素周围或内部布局的属性,将只会引起浏览器的重绘。
    回流:某个元素的尺寸发生了变化,则需重新计算渲染树,重新渲染。

    2.步骤:
    根据 HTML 解析出 DOM 树
    根据 CSS 解析生成 CSS 规则树
    结合 DOM 树和 CSS 规则树,生成渲染树
    根据渲染树计算每一个节点的信息

  4. 断开连接

    数据传送完,需断开tcp连接,此时发起tcp四次挥手。

### 浏览器地址栏输入URL和参数后回车的整个处理流程 当用户在浏览器地址栏输入一个URL和参数并按下回车时,浏览器会经历一系列复杂的操作来完成从请求到页面展示的全过程。以下是详细解析: #### 1. **DNS 解析** - 浏览器首先会检查是否需要进行域名解析。如果输入的是IP地址,则跳过此步骤。 - 浏览器会按照以下顺序查找DNS缓存: - 检查 **浏览器缓存** 中是否有该域名对应的IP地址[^2]。 - 如果未命中,浏览器会查询 **操作系统缓存**[^2]。 - 接着,浏览器会检查 **路由器缓存** 和 **ISP服务器缓存**。 - 如果以上均未找到,浏览器将向本地DNS服务器发起递归查询[^5]。递归查询会依次经过根域名服务器、顶级域名服务器和权限域名服务器,最终获取目标域名对应的IP地址。 #### 2. **建立TCP连接** - 获取到目标服务器的IP地址后,浏览器会通过三次握手与目标服务器建立TCP连接[^3]。 - 如果使用的是HTTPS协议,还需要进行SSL/TLS握手以确保通信安全[^3]。 #### 3. **发送HTTP/HTTPS请求** - TCP连接建立完成后,浏览器会根据输入URL和参数构造HTTP请求,并将其发送至目标服务器。 - 请求中包含方法(如GET或POST)、URL、头部信息以及可能的请求体数据。 #### 4. **处理重定向(如果存在)** - 如果服务器返回的状态码为301或302,表示需要重定向到其他URL[^1]。 - 浏览器会从响应头中的`Location`字段读取新的URL地址,并重新发起请求。 #### 5. **接收HTTP响应** - 服务器处理完请求后,会返回一个HTTP响应,其中包含状态码、响应头和响应体[^3]。 - 响应体通常是一个HTML文档,也可能包含其他资源(如CSS、JavaScript、图片等)的链接。 #### 6. **构建DOM树** - 浏览器接收到HTML文档后,开始解析HTML结构并将其转换为DOM树[^4]。 - 在构建DOM树的过程中,浏览器可能会遇到外部资源(如CSS、JavaScript文件),此时会发起额外的网络请求下载这些资源。 #### 7. **渲染页面** - DOM树构建完成后,浏览器会结合CSS样式生成渲染树[^4]。 - 渲染树中的每个节点都包含了可见元素的位置和尺寸信息。 - 浏览器随后会执行布局计算和绘制操作,将页面内容呈现给用户。 #### 8. **执行JavaScript** - 如果HTML文档中包含JavaScript代码,浏览器会在适当的时间点执行这些脚本。 - JavaScript可能会动态修改DOM树或触发额外的网络请求。 #### 9. **加载次级资源** - 页面中的图片、字体、视频等资源会被逐一加载。 - 浏览器会为每个资源发起独立的HTTP请求,并将其插入到页面中。 --- ### 示例代码:模拟HTTP请求 以下是一个简单的Python代码示例,用于模拟浏览器发送HTTP请求的过程: ```python import requests url = "https://example.com" response = requests.get(url) # 输出响应状态码和内容 print(f"Status Code: {response.status_code}") print(f"Response Body: {response.text}") ``` --- ### 总结 从输入URL到页面完全加载,浏览器经历了DNS解析、TCP连接建立、HTTP请求发送、响应接收、DOM树构建、页面渲染等多个阶段。每个阶段都可能涉及复杂的逻辑和网络交互。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值