从浏览器地址栏输入url到请求返回发生了什么
当我们在浏览器地址栏输入 url(统一资源定位符),例如: https://example.com, 浏览器会执行以下步骤:
1. URL 解析
浏览器会解析你输入的 URL,提取出协议(HTTP/HTTPS)、主机名(例如 www.example.com)、路径(例如/path/to/resource)等信息。
2. DNS 解析
如果主机名是一个域名而不是 IP 地址,浏览器会执行 DNS 解析,将域名解析为对应的 IP 地址。这通常涉及向 DNS 服务器发送查询请求,获取到对应的 IP 地址。
DNS 是什么
DNS(Domain Name System,域名系统)是互联网中用于将域名(如 example.com)转换为相应 IP 地址的分布式命名系统。它充当了互联网上域名和 IP 地址之间的映射关系数据库。
DNS 解析
DNS 解析是指将域名解析成相应的 IP 地址的过程。当你在浏览器中输入一个域名时,例如 www.example.com,浏览器首先需要将这个域名解析为对应的 IP 地址,才能向服务器发送请求。DNS 解析的过程如下:
1. 浏览器缓存
浏览器会首先检查自己的 DNS 缓存,看是否已经解析过这个域名。如果之前已经解析过,并且缓存未过期,浏览器会直接使用缓存中的 IP 地址,无需进行 DNS 查询。
2. 操作系统缓存
如果浏览器缓存中没有找到对应的记录,浏览器会检查操作系统的 DNS 缓存。操作系统也会缓存之前解析过的域名和 IP 地址,以提高解析效率。
3. 本地 DNS 解析器
如果在操作系统缓存中也没有找到对应的记录,浏览器会向本地 DNS 解析器发起查询请求。通常,本地 DNS 解析器由你的 ISP(互联网服务提供商)或者其他网络服务提供商提供。本地 DNS 解析器会首先查看自己的缓存,如果有相应的记录,则返回 IP 地址;否则,它会向根域名服务器发起查询请求。
4. 递归查询
如果本地 DNS 解析器在缓存中没有找到对应的记录,它会向根域名服务器发送递归查询请求。根域名服务器复杂存储顶级域名服务器(如.com、.org、.net 等)的 IP 地址。根域名服务器会返回顶级域名服务器的 IP 地址给本地 DNS 解析器。
5. 迭代查询
本地 DNS 解析器收到顶级域名服务器的 IP 地址后,会向顶级域名服务器发起迭代查询请求,询问下一级域名服务器的 IP 地址。例如,如果要解析的域名是www.example.com,那么顶级域名服务器会返回.com域的权威域名服务器的IP地址。
6. 权威域名服务器查询
本地 DNS 解析器收到权威域名服务器的 IP 地址后,会向权威域名服务器发起查询请求,获取要解析域名的具体 IP 地址。例如,权威域名服务器会返回 www.example.com 的 IP 地址给本地 DNS 解析器。
7. 返回解析结果
本地 DNS 解析器收到 IP 地址后,会将结果返回给浏览器,浏览器会将这个 IP 地址用于建立 TCP 连接,并向服务器发送请求。
3. 建立 TCP 连接
浏览器通过 IP 地址和端口号(默认 HTTP 的端口是 80,HTTPS 的端口是 443)与服务器建立 TCP 连接。这个过程中会进行三次握手以确立连接。
4. 发起 HTTP 请求
一旦建立了 TCP 连接,浏览器就会发送一个 HTTP 请求到服务器。这个请求包含了之前解析得到的 URL 中的信息,例如主机名、路径等,以及其他的请求头部信息(如用户代理、cookie 等)。
5. 服务器处理请求
服务器收到请求后,会根据请求的内容进行处理,可能会访问数据库、执行后端代码等操作,然后生成一个 HTTP 响应。
6. 返回 HTTP 响应
服务器会将生成的 HTTP 响应发送回浏览器。这个响应包括一个状态码(例如 200 表示成功,404 表示未找到资源等)、响应头部(包含内容类型、内容长度等信息),以及响应体(实际的内容)。
7. 浏览器处理响应
浏览器收到响应后,会根据响应的内容进行相应的处理。这可能涉及渲染 HTML、执行 JavaScript、应用 CSS 样式等操作。
浏览器会根据响应头部中的内容类型(Content-Type)来确定如何处理响应体。常见的内容类型包括:
- text/html:HTML 文档。
- text/css:CSS 样式表。
- application/javascript:JavaScript 文件。
- image/png、image/jpeg:图片文件等。
如果是 HTML 文档,浏览器会将其解析成 DOM 树,并开始渲染页面;如果是 CSS 文件,浏览器会应用样式;如果是 JavaScript 文件,浏览器会执行其中的脚本代码等等。
一旦浏览器解析了 HTML 文档并构建了 DOM 树,它会开始渲染页面。这个过程包括:
- 根据 DOM 树和 CSS 样式计算每个元素的大小、位置等属性。
- 将元素布局到页面上的正确位置。
- 将元素绘制到屏幕上
在渲染过程中,浏览器还会处理 JavaScript 代码的执行、事件绑定等操作。
8. 显示页面
最后,浏览器会根据响应的内容将页面呈现给用户,在用户界面中显示网页内容。