(每日一问)计算机网络:浏览器输入一个地址到跳出网页这个过程中发生了哪些事情?(废话少说版)

(每日一问)计算机网络:浏览器输入一个地址到跳出网页这个过程中发生了哪些事情?(废话少说版)

在现代Web浏览器中,当你输入一个网址并按下回车键后,浏览器开始从服务器获取数据,直到完整呈现网页,这一过程涉及到多个步骤和技术。这也是面试中常问的内容,但现有的关于它的解释,一些博客讲解过于繁琐,没有重点且不便记忆为了解决这个问题,我特地原创了一篇简短精炼便于直接背诵的面经


从输入网址到网页显示,浏览器经历了DNS解析、建立TCP连接、发送HTTP请求、接收并渲染页面、以及处理后续资源加载等步骤。本文尽可能详略得当的介绍了这些步骤的原理,并通过代码示例和图示帮助读者更好地理解浏览器背后的工作机制。

文章目录

  • (每日一问)计算机网络:浏览器输入一个地址到跳出网页这个过程中发生了哪些事情?(废话少说版)
    • 一、DNS 解析:从域名到IP地址
      • 1.1 输入网址与域名系统的作用
      • 1.2 DNS 解析过程
    • 二、建立连接:TCP 三次握手
      • 2.1 什么是TCP三次握手?
      • 2.2 TCP 三次握手的步骤
    • 三、发送请求:HTTP/HTTPS 请求的处理
      • 3.1 浏览器发送HTTP/HTTPS请求
      • 3.2 HTTP请求的内容
    • 四、服务器处理请求并返回响应
      • 4.1 服务器如何处理请求?
      • 4.2 HTTP响应的内容
    • 五、浏览器渲染页面:从HTML到最终显示
      • 5.1 浏览器接收并解析HTML
      • 5.2 构建渲染树并布局
      • 5.3 绘制页面并显示
    • 六、持续加载与交互
      • 6.1 异步加载资源
      • 6.2 用户交互与新请求
    • 七、 关闭连接
    • 八、总结(可以直接跳过看总结)

一、DNS 解析:从域名到IP地址

1.1 输入网址与域名系统的作用

当你在浏览器中输入一个网址(例如www.example.com)并按下回车,首先发生的是DNS(域名系统)解析。DNS的作用是将用户输入的域名转换为服务器的IP地址,这是因为浏览器和服务器之间的通信是通过IP地址进行的。

1.2 DNS 解析过程

  • 浏览器检查本地缓存、操作系统缓存,甚至是路由器和 ISP 的缓存中是否已有该域名对应的 IP 地址。
  • 如果没有找到,浏览器会向 DNS 服务器(域名系统服务器)发送一个请求,询问www.example.com对应的 IP 地址是什么。
  • DNS 服务器返回域名对应的 IP 地址(例如192.0.2.1),该地址唯一标识了你要访问的服务器。

示例代码:通过Java代码演示如何获取域名的IP地址。

import java.net.InetAddress;  // 导入用于IP地址操作的类public class DNSLookup {public static void main(String[] args) {try {// 获取域名的IP地址InetAddress address = InetAddress.getByName("www.example.com");  System.out.println("IP Address: " + address.getHostAddress());  // 打印出IP地址} catch (Exception e) {e.printStackTrace();  // 如果解析失败,则输出错误信息}}
}

解释:这个代码示例展示了如何使用Java获取一个域名的IP地址。InetAddress.getByName("www.example.com") 方法将域名转换为IP地址,模拟了浏览器的DNS解析过程。

二、建立连接:TCP 三次握手

2.1 什么是TCP三次握手?

获得IP地址后,浏览器需要与服务器建立连接,这通常通过TCP协议完成。TCP协议保证了数据传输的可靠性。在正式发送数据之前,浏览器和服务器之间需要通过三次握手来确认彼此的连接。

2.2 TCP 三次握手的步骤

  1. 第一次握手:浏览器向服务器发送一个SYN(同步)包,表示请求建立连接。
  2. 第二次握手:服务器收到SYN包后,返回一个SYN-ACK包,表示同意建立连接。
  3. 第三次握手:浏览器收到SYN-ACK包后,发送一个ACK(确认)包,连接正式建立。
Browser Server SYN (建立连接) SYN-ACK (确认) ACK (建立连接确认) Browser Server

解释:这个图示展示了TCP三次握手的过程,从浏览器发送请求到服务器确认连接建立的过程。

三、发送请求:HTTP/HTTPS 请求的处理

3.1 浏览器发送HTTP/HTTPS请求

连接建立后,浏览器将发送HTTP请求获取网页数据。如果是HTTPS请求,则会在发送请求前通过TLS/SSL进行加密通信,确保数据的安全性。

引申:HTTP 与 HTTPS 的区别

3.2 HTTP请求的内容

HTTP请求包括请求方法(如GET、POST)、请求头、以及可选的请求体。请求头包含了用户代理、可接受的响应类型、cookies等信息。

引申:GET请求和POST请求的区别

示例代码:发送一个简单的HTTP GET请求。

import java.net.HttpURLConnection;  // 导入用于HTTP连接的类
import java.net.URL;  // 导入用于处理URL的类public class HttpGetRequest {public static void main(String[] args) {try {// 创建URL对象URL url = new URL("http://www.example.com");// 打开HTTP连接HttpURLConnection connection = (HttpURLConnection) url.openConnection();  // 设置请求方法为GETconnection.setRequestMethod("GET");  // 获取响应码int responseCode = connection.getResponseCode();  System.out.println("Response Code: " + responseCode);  // 打印响应码} catch (Exception e) {e.printStackTrace();  // 如果请求失败,则输出错误信息}}
}

解释:这个代码示例演示了如何通过Java发送一个HTTP GET请求并获取服务器的响应状态码。类似地,浏览器在用户输入网址后,也会向服务器发送类似的请求来获取网页数据。

四、服务器处理请求并返回响应

4.1 服务器如何处理请求?

服务器收到浏览器的请求后,会根据请求的内容执行相应的操作,如访问数据库、调用应用程序、读取文件等。服务器处理完成后,将生成的响应(包括HTML、CSS、JavaScript等资源)发送回浏览器。

4.2 HTTP响应的内容

HTTP响应通常包括状态码(如200表示成功),响应头,以及响应体(实际的数据内容,如HTML文档)。

五、浏览器渲染页面:从HTML到最终显示

接收HTML
解析HTML
构建DOM树
解析CSS
构建CSSOM树
构建渲染树
布局计算
绘制并显示页面

5.1 浏览器接收并解析HTML

浏览器接收到服务器返回的HTML后,开始解析HTML文档,并构建DOM树(Document Object Model)。同时,浏览器会解析并下载HTML文档中引用的CSS样式表、JavaScript文件、图片等资源。

5.2 构建渲染树并布局

浏览器根据DOM树和CSSOM树(CSS对象模型)构建渲染树(Render Tree),然后计算每个元素的布局,确定其在页面中的位置和大小。

5.3 绘制页面并显示

最后,浏览器根据渲染树绘制页面内容,并将其显示在屏幕上。

解释:这幅图展示了浏览器如何从接收HTML开始,经过一系列的解析和计算步骤,最终将网页内容绘制到屏幕上的过程。

六、持续加载与交互

6.1 异步加载资源

在页面显示后,浏览器还可能会继续加载其他资源,如通过JavaScript的异步请求(AJAX,Asynchronous Javascript And XML(异步JavaScript和XML))来动态获取数据并更新页面内容。

6.2 用户交互与新请求

用户可以与网页进行交互,如点击按钮、提交表单等,这些操作可能会触发新的HTTP请求,重新经历之前的流程。

七、 关闭连接

TCP 四次挥手:当浏览器和服务器都确认不会再发送数据时,TCP 连接会通过四次挥手关闭。下面是TCP四次挥手的信令图:

Browser Server FIN (第一次挥手,浏览器发送 FIN 包,表示数据发送完毕,不再发送数据) ACK (第二次挥手,服务器收到 FIN 包后,发送 ACK 包,确认收到) FIN (第三次挥手,服务器发送 FIN 包,表示服务器的数据也发送完毕) ACK (第四次挥手,浏览器收到服务器的 FIN 包后,发送 ACK 包确认,至此连接关闭) Browser Server

解释

  • 第一次挥手:浏览器向服务器发送FIN包,表示数据发送完毕,不再发送数据。
  • 第二次挥手:服务器收到FIN包后,向浏览器发送ACK包,表示确认收到。
  • 第三次挥手:服务器也发送一个FIN包,表示服务器的数据也发送完毕。
  • 第四次挥手:浏览器收到服务器的FIN包后,发送ACK包确认,至此连接关闭。

通过这个信令图,可以直观地看到TCP四次挥手的过程是如何关闭一个TCP连接的。

八、总结(可以直接跳过看总结)

在从浏览器输入网址到最终呈现网页的过程中,涉及到多个关键步骤,概括如下:

  1. DNS解析:将用户输入的域名转换为服务器的IP地址,以便浏览器能够找到目标服务器。

  2. 建立连接:通过TCP三次握手建立可靠的通信连接,确保数据能够稳定传输。

  3. 发送请求:浏览器通过HTTP或HTTPS协议向服务器发送请求,以获取网页所需的资源和数据。

  4. 服务器处理并响应:服务器处理请求,生成并返回HTML、CSS、JavaScript等内容,供浏览器渲染。

  5. 浏览器渲染页面:浏览器解析并构建DOM树、CSSOM树和渲染树,最终将网页内容绘制到用户的屏幕上。

  6. 持续加载与交互:页面渲染完成后,浏览器可能会继续加载其他资源,并响应用户的交互操作。

  7. 关闭连接:通过TCP四次挥手,浏览器和服务器之间的连接在数据传输完毕后被关闭。

✨ 我是专业牛,一个渴望成为大牛🏆的985硕士🎓,热衷于分享知识📚,帮助他人解决问题💡,为大家提供科研、竞赛等方面的建议和指导🎯。无论是科研项目🛠️、竞赛🏅,还是图像🖼️、通信📡、计算机💻领域的论文辅导📑,我都以诚信为本🛡️,质量为先!🤝 如果你觉得这篇文章对你有所帮助,别忘了点赞👍、收藏📌和关注🔔哦!你的支持是我继续分享知识的动力🚀!✨ 如果你有任何问题或需要帮助,随时留言📬或私信📲,我都会乐意解答!😊

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/412316.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何恢复删除的微信好友?不留遗憾,这5招教你找回

在社交生活中,微信成为了我们日常沟通的重要工具之一。然而,偶尔因一时冲动或误操作删除了重要好友,当我们想找回好友时是否也在懊悔呢?如何恢复删除的微信好友就成为了我们必须学会的技能。那么,今天我们就来分享5种高…

10、ollama启动LLama_Factory微调大模型(llama.cpp)

在前面章节中介绍了如何使用LLama_Factory微调大模型,并将微调后的模型文件合并导出,本节我们我们看下如何使用ollama进行调用。 1、llama.cpp LLama_Factory训练好的模型,ollama不能直接使用,需要转换一下格式,我们…

STM32G474之TIM1更新中断

STM32G474之TIM1能产生如下的中断: 1、捕获比较1个事件(Capture compare 1 event) 用来获取“捕获输入脉冲的时间”,其次用来输出“比较输出波形”; 2、捕获比较2个事件(Capture compare 2 event&#x…

【HTML源码】上传即可使用的在线叫号系统源码

这个叫号系统的过程是这样的 接了一个任务,某学校要对学生进行逐个面试,希望能有类似医院门诊那种叫号系统。 条件:首先说硬件,就是教室里边一台笔记本电脑,同屏到教室外面的电视机。 需求:软件需求是可…

如何解决U盘无法压缩卷或删除卷的问题

U盘在日常使用中,偶尔会遇到无法压缩卷或删除卷的情况。出现这些问题通常与U盘的磁盘状态或文件系统有关。本文将介绍一种有效的解决方法,通过使用Windows自带的磁盘管理工具diskpart来解决这些问题。 一、问题原因 U盘无法压缩卷或删除卷的常见原因包…

扩博智能× Milvus:图像检索助力零售商品图像高效标注

大家好,我是上海扩博智能技术有限公司的Frank,负责算法工程相关的工作。很高兴能在 Milvus 社区和大家分享我们在图像检索方面的经验。 01 扩博智能公司简介 扩博智能 Clobotics 成立于 2016 年,总部位于上海长宁。我们聚焦计算机视觉和机器学…

el-table 合并单元格后 hover错乱

hover后的效果图: 1:在el-table上加入这三个属性 :row-class-name"rowClassName" cell-mouse-enter"handleMouseEnter" cell-mouse-leave"handleMouseLeave" 2:data里声明一个变量 hoverRowLike:-1 3:copy到…

自动化测试:Monkey工具实践应用~

在移动应用的自动化测试中,意外的用户操作和各种不可预见的场景往往是导致应用崩溃的主要原因。如何有效地模拟这些复杂场景,成为了测试工程师的一大挑战。而在这一过程中,Monkey工具凭借其随机化测试的独特优势,成为了许多团队的…

29 猜丁壳游戏

猜丁壳游戏 猜丁壳游戏是一个简单的石头、剪刀、布游戏,玩家与计算机进行对战。以下是游戏的详细说明和使用指南。 游戏界面 游戏界面分为几个部分: 标题栏:显示游戏名称“猜丁壳”。选择区域:玩家可以选择石头、剪刀或布。控制…

Python简易IDE工作界面制作

、 休闲一下,学习编程还是要学习一些界面编程,能够根据需要制作图形操作界面,这样我们开发的程序才能方便操作和使用,同时获得更友好的人机交互体验。下面是一个用PyQt5制作的简易界面,供大学参考。如下图所示&a…

【vscode】vscode+cmake+llvm+ninja开发环境的搭建(draft)

文章目录 前言1 软件、工具和插件安装1.1 vscode安装1.2 cmake安装1.3 安装LLVM1.4 安装Ninja1.5 vscode插件安装 2 工具链和CMakeLists2.1 工具链(toolchain.cmake)2.2 CMakeLists.txt2.3 基本语法注释 前言 本文是一个使用vscode的小白扫盲贴。 所谓工…

一个php快速项目搭建框架源码,带一键CURD等功能

介绍: 框架易于功能扩展,代码维护,方便二次开发,帮助开发者简单高效降低二次开发成本,满足专注业务深度开发的需求。 百度网盘下载 图片:

从Python转向MicroPython使用详解

概要 随着物联网(IoT)设备的普及和嵌入式系统的广泛应用,MicroPython逐渐成为Python开发者们探索嵌入式编程的重要工具。MicroPython是一种精简版的Python,专为资源受限的设备而设计,能够在微控制器和其他嵌入式设备上运行。对于习惯使用Python的开发者而言,转向MicroPy…

海大集团的可观测平台建设实践

海大集团介绍 海大集团是以科技为主导的中国农业龙头企业,1998年成立于广东广州,目前业务涵盖饲料、种苗、动保疫苗、智慧养殖、食品加工等现代农牧全产业链,在全球拥有分子公司逾600家、员工达4万人,位列2023中国企业500强第238…

Python爬虫(一文通)

Python爬虫(基本篇) 一:静态页面爬取 Requests库的使用 1)基本概念安装基本代码格式 应用领域:适合处理**静态页面数据和简单的 HTTP 请求响应**。 Requests库的讲解 含义:requests 库是 Python 中一个…

【HTML】模拟二级菜单【附源代码】

模拟二级菜单 HTML部分&#xff1a; <!DOCTYPE html>: 声明文档类型为HTML5。<html>: HTML文档的根元素。<head>: 包含文档的元数据&#xff0c;如字符集、标题和样式。 <meta charset"utf-8">: 设置文档的字符编码为UTF-8。<title>:…

公网信息泄露监测(网盘、暗网、搜索引擎、文档平台)思路分享

一、背景 众测项目中白帽可能会提交一些信息泄露漏洞&#xff0c;同时甲方可会收到一些白帽提交的公网信息泄露文件漏洞&#xff0c;例如百度网盘被员工分享某些文件或者某些包含敏感信息的文件可以通过如谷歌、百度等搜索引擎通过特定语法搜索到。为了可以及时发现泄露的文件…

【计算机组成原理】六、总线:1.总线概论(分类、性能指标、总线标准)

六、总线 文章目录 六、总线1.总线概论2.分类2.1按数据传输格式2.2按总线功能(连接的部件)2.3按时序控制方式2.2-2系统总线的结构 3.性能指标6.总线标准6.1系统总线6.2局部总线6.3设备总线、通信总线6.4为何串行总线取代并行总线&#xff1f; 1.总线概论 总线被刻蚀在主板上 总…

【3.6】贪心算法-解救生艇问题

一、题目 第 i 个人的体重为 people[i]&#xff0c;每艘船可以承载的最大重量为 limit。 每艘船最多可同时载两人&#xff0c;但条件是这些人的重量之和最多为 limit 。 返回载到每一个人所需的最小船数。(保证每个人都能被船载)。 二、解题思路 题目要求每艘船最多能载两人&…

【58同城-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞 …