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

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

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

当你在浏览器中输入一个 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. 如果响应的内容是图片、视频等其他资源,浏览器会根据资源的类型进行相应的处理,如显示图片、播放视频等。

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

相关推荐

HarmonyOS NEXT仓颉开发语言实战案例:健身App

各位好,今日分享一个健身app的首页:这个页面看起比之前的案例要稍微复杂一些,主要在于顶部部分,有重叠的背景,还有偏移的部分。重叠布局可以使用Stack容器实现,超出容器范围的偏移可以使用负数间距来实...

如果使用vue3.0实现一个modal,你会怎么设计?

这是个很好的问题!设计一个Vue3.0Modal时,我建议按照可复用、高扩展、简洁的原则来实现。下面我给你一个清晰的设计思路,涵盖组件拆分、使用方式以及Vue3中特性(如Telepor...

在进行APP切图的前,我们需要做什么?

切图是个技术活,小伙伴们千万不能忽视切图的重要性噢,前文介绍了设计的七大元素,那么我们现在来看看在切图之前,我们需要做什么呢?。1、和客户端的技术沟通好用不同的框架来实现的时候,图会有不一样的切法。...

独立开发问题记录-margin塌陷(独立提出历史问题)

一、概述往事如风,一周就过去了。上周在Figma里指点江山,这周在前端代码里卑微搬砖。回想上周,在Figma中排列组合,并且精确到1像素。每设计出一个页面,成就感就蹭蹭往上涨。没想到还没沾沾自喜多久,...

循序渐进Vue+Element 前端应用开发(8)—树列表组件的使用

在我前面随笔《循序渐进VUE+Element前端应用开发(6)---常规Element界面组件的使用》里面曾经介绍过一些常规的界面组件的处理,主要介绍到单文本输入框、多文本框、下拉列表,以及按钮...

CDN加速导致CLS升高图片托管服务器的3个选择标准!

许多网站为了提升加载速度,会采用CDN加速服务分发图片等静态资源这样做可能导致CLS(累积布局偏移)指标升高,拖累SEO评分。这一问题通常源于CDN的异步加载机制或图片尺寸未预定义,使得页面布局在渲染...

滚动条隐藏及美化(如何显示滚动条的显示与隐藏)

1、滚动条隐藏背景/场景:在移动端,滑动的时候,会显示默认滚动条,如图1://隐藏代码:/*隐藏滚轮*/.ul-scrool-box::-webkit-scrollbar,.ul-scrool...

JS如何判断文字被ellipsis了?(js判断字符串是否有中文)

原文来源于:程序员成长指北;作者:嘉琪coder如有侵权,联系删除前言如果想要文本超出宽度后用省略号省略,只需要加上以下的css就行了。ellipsis{overflow:hidden;...

鸿蒙Next仓颉语言开发实战教程:懒加载

今天要分享的是仓颉开发语言中的懒加载。先和初学者朋友们解释一下什么是懒加载。懒加载在代码中叫做LazyForEach,看到名字你一定能猜到它和ForEach的功能类似。只不过和ForEach的一次性加...

从Rax+DX到React,一次跨端组件重写的AI提效探索

一、背景最近在进行M站(WAP)首页项目重构时,遇到了一个颇为头疼的问题:需要将原有的Rax框架工厂推荐瀑布流组件迁移到新的React框架项目中,同时还要把原本用DX框架实现的FactoryCard组...

天冷不吃啥时候吃?(天气冷不吃饭会怎样)

2015年即将过去,但是在接近翻篇的最后几个月,喜欢尝鲜的魔都上海依然让我们惊喜,新开餐厅更是多到让你惊讶,我们采访了近期新开大热餐厅,周末嗨起来!一坐一忘坐下来忘记时间创始于2006年的一坐一忘丽江...

鸿蒙Next仓颉语言开发实战教程:订单列表

大家上午好,最近不断有友友反馈仓颉语言和ArkTs很像,所以要注意不要混淆。今天要分享的是仓颉语言开发商城应用的订单列表页。首先来分析一下这个页面,它分为三大部分,分别是导航栏、订单类型和订单列表部分...

计算属性computed和侦听属性watch有什么区别?你会使用它们吗?

做过vue开发的都知道,有两个很重要的概念就是计算属性和侦听属性,我们在平时开发当中会经常用到它们,以至于我们在面试的时候也会经常被问到这两个之间的区别。可能我们经常听到或者知道的答案就是:compu...

HarmonyOS NEXT仓颉开发语言实战案例:小而美的旅行App

大家周末好,本文分享一个小而美的旅行app首页,效果图如下:很显然这个页面还是使用List容器,页面两侧有统一的边距,我们可以在List容器统一设置:List(space:20){}.paddin...

给织梦栏目增加链接属性rel、nofollow和target

摘要:为了方便管理,直接在织梦后台栏目里自由把控每个栏目对应的链接属性,我们来给织梦栏目增加链接属性rel="nofllow"rel="external"rel=&...