百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

从输入URL地址到网页呈现,中间都经历了啥过程。

zhezhongyun 2024-12-08 20:01 23 浏览

当你在浏览器中输入一个 URL 地址到网页呈现出来,中间经历了以下复杂而精彩的过程:

一、用户输入 URL

用户在浏览器地址栏中输入 URL(Uniform Resource Locator,统一资源定位符),比如 “https://www.example.com”。

二、DNS 解析


  1. 浏览器首先检查自身的缓存中是否有该 URL 对应的 IP 地址。如果有,直接使用该 IP 地址进行后续步骤。
  2. 如果浏览器缓存中没有,浏览器会查询操作系统的缓存,看是否有该 URL 的 IP 地址记录。
  3. 若操作系统缓存中也没有,操作系统会向本地 DNS 服务器发起查询请求。本地 DNS 服务器通常由你的网络服务提供商(ISP)提供。
  4. 本地 DNS 服务器也可能没有该 URL 的 IP 地址记录,这时它会向根 DNS 服务器发起查询。根 DNS 服务器会告知本地 DNS 服务器负责该顶级域名(如 “.com”)的 DNS 服务器地址。
  5. 本地 DNS 服务器接着向顶级域名 DNS 服务器查询,顶级域名 DNS 服务器又会告知负责该二级域名(如 “example.com”)的 DNS 服务器地址。
  6. 本地 DNS 服务器继续向二级域名 DNS 服务器查询,最终获得该 URL 对应的 IP 地址,并将其返回给操作系统,操作系统再将 IP 地址返回给浏览器。

三、建立 TCP 连接(对于 HTTP/1.1 及以下版本通常需要建立连接,HTTP/2 和 HTTP/3 有所不同)

  1. 浏览器获得 IP 地址后,使用该 IP 地址和目标服务器的端口号(通常 HTTP 为 80 端口,HTTPS 为 443 端口)尝试建立 TCP 连接。
  2. 首先进行 “三次握手”:
    • 第一次握手:客户端(浏览器)向服务器发送一个带有 SYN(同步)标志的数据包,请求建立连接,并随机生成一个初始序列号(seq=x)。
    • 第二次握手:服务器接收到客户端的数据包后,向客户端发送一个带有 SYN 和 ACK(确认)标志的数据包,表示服务器同意建立连接,并确认收到了客户端的请求。服务器也随机生成一个初始序列号(seq=y),同时将客户端的序列号加 1 后作为确认号(ack=x+1)。
    • 第三次握手:客户端接收到服务器的数据包后,向服务器发送一个带有 ACK 标志的数据包,表示客户端确认收到了服务器的同意,并确认服务器的序列号。客户端将服务器的序列号加 1 后作为确认号(ack=y+1)。

四、发送 HTTP 请求

  1. TCP 连接建立成功后,浏览器向服务器发送 HTTP 请求报文。请求报文包含请求方法(如 GET、POST 等)、请求 URL、HTTP 版本号、请求头(包含各种元数据,如用户代理、接受的内容类型等)和请求体(如果有)。

五、服务器处理请求

  1. 服务器接收到 HTTP 请求后,根据请求的 URL 和方法进行相应的处理。
  2. 如果是静态资源请求(如 HTML 文件、图片、CSS 文件、JavaScript 文件等),服务器直接从文件系统中读取相应的文件,并将其返回给浏览器。
  3. 如果是动态资源请求(如 PHP、JSP、ASP.NET 等动态网页),服务器会执行相应的脚本或程序,生成动态内容,并将其返回给浏览器。在这个过程中,服务器可能会与数据库进行交互,获取数据并进行处理。

六、服务器返回 HTTP 响应

  1. 服务器处理完请求后,向浏览器发送 HTTP 响应报文。响应报文包含 HTTP 版本号、状态码(如 200 表示成功、404 表示未找到资源等)、响应头(包含各种元数据,如内容类型、内容长度等)和响应体(即请求的资源内容)。

七、浏览器解析渲染页面

  1. 浏览器接收到 HTTP 响应后,首先解析响应头,获取响应的内容类型、编码方式等信息。
  2. 如果响应的内容是 HTML 文件,浏览器会开始解析 HTML 文档:
    • 构建 DOM 树:浏览器逐行解析 HTML 代码,将标签转换为 DOM(Document Object Model,文档对象模型)节点,并构建成一棵 DOM 树。
    • 下载并解析 CSS:浏览器会发现 HTML 文档中引用的 CSS 文件,并发送请求下载这些文件。下载完成后,浏览器解析 CSS 代码,构建 CSSOM(CSS Object Model,CSS 对象模型)。
    • 构建渲染树:结合 DOM 树和 CSSOM,浏览器构建渲染树,渲染树只包含需要显示在页面上的节点和对应的样式信息。
    • 布局:浏览器根据渲染树进行布局计算,确定每个节点在屏幕上的位置和大小。
    • 绘制:最后,浏览器根据布局结果,将页面绘制到屏幕上。
  1. 如果响应的内容是图片、视频等其他资源,浏览器会根据资源的类型进行相应的处理,如显示图片、播放视频等。

至此,网页就完整地呈现在用户面前了。

相关推荐

字体缩放(方式一)(字体缩放150%怎么做)

通过元素宽度和字数计算得到缩放简单实现如下:/***字体最大为视觉要求大小(maxFontSize);超出缩小字体显示,最小为minFontSize;最小字体时超出部分使用圆点(...);*p...

网页世界隐藏的神秘代码语言,竟能这样改变布局

CSS基础:选择器与属性CSS(CascadingStyleSheets)是用于控制网页外观的一门样式表语言。它通过定义HTML元素的显示方式来增强网页的表现力。CSS的选择器允许开发者精确地定位...

CSS属性值计算过程详解(css属性用来定义元素计算)

在CSS中,即使某些属性没有显式声明,浏览器也会通过**属性值计算过程**为每个元素的所有属性赋予最终值。这一过程分为四个关键步骤,以下将逐一解析。1.确定声明值浏览器首先检查所有**直接应用**到...

软网推荐:找回调整Windows 10字号功能

之前的系统,从WindowsXP到早期版本的Windows10,均有字体大小调整功能,但从创意者版Windows10以来,取消了之前的设置选项,取而代之的是自定义缩放比例设置。使用这个功能调整过...

Excel中如何设置文本框属性,实例代码讲解

Excel不仅可以对数据进行处理,而且也可以图形化数据,直观显示数据表达的内容。本节介绍一个很重要的对象,Characters,字符对象,使用Characters对象可修改包含在全文本字符串中的任...

CSS 字体样式(css中字体)

本节我们来讲字体样式,之前我们学习HTML的时候学过一些用于字体加粗、倾斜的标签,但是使用标签来实现的效果肯定没有我们通过CSS中的样式来的方便。接下来我们会给大家介绍下面这几个属性的使用:通...

PC网站建设必备代码知识:HTML基础与应用技巧

在PC网站建设的相关课程里,代码扮演着至关重要的角色。只有熟练运用正确的代码,我们才能打造出功能完善、用户体验出色的PC网站。接下来,我会详细讲解在PC网站建设环节中必须了解的代码知识。HTML基础代...

让你大跌眼镜的疯狂 HTML 和 CSS 技巧

今天,分享一个让你大开眼界的技巧。通过使用这个技巧,你可以将整个网页变成一个CSS编辑器。没错,你从未见过这种方法。当我第一次尝试时,我完全被震惊到了。现在,让我们开始吧!步骤1首先,创建一个基础的...

jQuery EasyUI使用教程:创建一个链接按钮

jQueryEasyUI最新版下载>本教程主要为大家展示如何使用jQueryEasyUI创建一个链接按钮。通常情况下,使用“button/”元素来创建一个按钮;使用“a/”元素来创建链接按钮...

React 19 有哪些新特性?(react100)

如果你对React18还不熟悉,欢迎阅读之前的文章《React18全览[1]》最近React发布了V19RC版本,按照惯例,我们对React19的新特性进行一次深度的体验学习...

Java注解探秘:为什么@PostConstruct能解决你的初始化难题?

你是否在Spring项目中遇到过这样的困扰:明明依赖注入已经完成,但某些配置就是无法正常加载?手动调用初始化方法又容易引发空指针异常?这就是@PostConstruct注解大显身手的时候了!@Post...

AI驱动的表单自动填写(ai置入表格)

我们都同意,填写表格是一项枯燥且耗时的任务。如果我们可以创建一个可以为我们填写表格的AI助手,让我们将时间投入到更有建设性的任务中,那会怎样?AI助手将能够通过调用以表单字段为参数的函数来填写表...

从零到一:小程序设计新手如何快速上手?

开发环境搭建对于小程序设计新手而言,搭建合适的开发环境是首要任务。以小程序为例,其官方提供了功能强大的开发工具——开发者工具。首先,新手需前往官方开发者平台,在页面中找到“工具下载”板块,根据...

JavaSwingGUI从小白到大神-6(续)(java从小白到大牛怎么样)

接上一篇《JavaSwingGUI从小白到大神-6》,因本篇文章3万多字,头条一篇发不完,只能分开发。同事查询面板:CompanyFind.javapublicclassCompanyFind{...

C# winform界面假死(c#程序假死)

针对C#WinForm界面假死问题,以下是分步解决方案:1.使用异步编程(async/await)将耗时操作移至后台线程,保持UI线程响应。步骤:将事件处理函数标记为async。使用Task....