深度解析:从浏览器输入链接到页面展现的奇幻历程

news2024/11/27 10:31:21

〇、前言

当我们在浏览器中输入一个网址,例如:example.com,按下回车键后,会发生什么呢?

主要会发生以下这些过程:域名解析、建立HTTP连接、发送HTTP请求、数据传输、渲染网页、断开HTTP连接。

image

一、域名解析

URL 组成

  1. 协议(Scheme)
    可以用一个标签来表示,上面写着“协议:HTTP/HTTPS/FTP 等”。这个标签可以放在 URL 的最左边,用不同的颜色突出显示以区分其他部分。例如:“协议:https”。

  2. 主机(Host)
    用一个方框表示,里面写上主机名或 IP 地址,如“www.example.com”或“192.168.1.100”。这个方框紧跟在协议标签后面。例如:“协议:https” → “主机:www.example.com”。

  3. 端口(Port)
    如果有端口号,可以在主机方框后面用一个小括号括起来写上端口号,如“:8080”。如果是默认端口,可以不显示端口部分。例如:“协议:https” → “主机:www.example.com” → “端口::8080”(如果使用非默认端口)。

  4. 路径(Path)
    用一个向右的箭头表示路径的指向,后面跟着一个类似文件路径的描述,如“/articles/1234.html”。例如:“协议:https” → “主机:www.example.com” → “端口::8080” → “路径:/articles/1234.html”。

  5. 查询参数(Query Parameters)
    用一个“?”表示查询参数的开始,后面跟着一系列键值对,如“q=keyword&page=2”。例如:“协议:https” → “主机:www.example.com” → “端口::8080” → “路径:/articles/1234.html” → “查询参数:?q=keyword&page=2”。

  6. 片段标识符(Fragment Identifier)
    用一个“#”表示片段标识符的开始,后面跟着一个标识符,如“section3”。
    例如:“协议:https” → “主机:www.example.com” → “端口::8080” → “路径:/articles/1234.html” → “查询参数:?q=keyword&page=2” → “片段标识符:#section3”。

输入网址

用户在浏览器地址栏输入网址(例如:https://www.example.com)后,浏览器首先会检查自身的缓存。如果之前访问过该网址且相关域名信息仍在缓存有效期内,就可以直接获取域名对应的IP地址。

如果浏览器缓存中没有,会查询操作系统的hosts文件。这个文件可以手动配置域名和IP地址的映射关系,如果存在匹配项,就可以得到IP地址。

DNS查询(如果hosts文件中没有)

如果浏览器缓存和hosts文件都无法提供对应的IP地址,就会进行DNS(Domain Name System)查询。浏览器会向本地DNS服务器(通常由网络服务提供商提供)发送请求。

本地DNS服务器如果有该域名对应的IP地址缓存,就会直接返回给浏览器。如果没有,本地DNS服务器会向根域名服务器查询。根域名服务器根据请求中的顶级域名(如.com、.org等)指示本地DNS服务器向对应的顶级域名服务器查询。

顶级域名服务器再根据二级域名(如www)指示本地DNS服务器向负责该域名的权威DNS服务器查询,最终从权威DNS服务器获取到域名对应的IP地址,并将其缓存到本地DNS服务器以便后续查询,同时返回给浏览器。

DNS查询

根服务器

IPv4 根域名服务器共有 13 个逻辑根服务器(以 A - M 标识),它们由不同的组织运营。但实际上为了提高性能、可靠性和应对流量负载,每个逻辑根服务器可能有多个镜像站点分布在世界各地。这些根服务器主要由美国等发达国家的相关机构和组织管理运营,例如其中一些由美国的互联网名称与数字地址分配机构(ICANN)等进行管理。

IPv6 根域名服务器同样遵循 DNS 的分层解析架构。在全球范围内也有一定数量的根服务器分布。其分布和运营也注重可靠性和性能保障,以满足日益增长的 IPv6 网络应用需求。目前,很多 IPv4 根域名服务器的运营组织也在积极参与 IPv6 根域名服务器的建设和运营,同时也有更多国家和组织参与到 IPv6 根域名服务器相关的工作中来,以适应全球 IPv6 网络发展的趋势。

二、建立HTTP连接

TCP连接建立(基于HTTP协议)

浏览器得到IP地址后,根据网址中的协议(如HTTP或HTTPS),如果是HTTP协议,会使用TCP(Transmission Control Protocol)协议与目标服务器建立连接。这一过程遵循TCP的三次握手原则。

浏览器首先向服务器发送一个SYN(同步)包,包含一个随机生成的初始序列号。服务器收到后,回复一个SYN - ACK(同步 - 确认)包,其中包含服务器自己的初始序列号和对浏览器SYN包的确认号。最后,浏览器再发送一个ACK(确认)包给服务器,至此TCP连接建立成功。

TCP 三次握手

对于建链接的3次握手,主要是要初始化Sequence Number 的初始值。通信的双方要互相通知对方自己的初始化的Sequence Number(缩写为ISN:Inital Sequence Number)——所以叫SYN,全称Synchronize Sequence Numbers。也就上图中的 x 和 y。这个号要作为以后的数据通信的序号,以保证应用层接收到的数据不会因为网络上的传输的问题而乱序(TCP会用这个序号来拼接数据)。

SSL/TLS握手(基于HTTPS协议)

如果是HTTPS协议,在TCP连接建立之后,还需要进行SSL/TLS(Secure Sockets Layer/Transport Layer Security)握手。这一过程用于在浏览器和服务器之间建立加密通道,确保数据传输的安全性。

浏览器向服务器发送客户端Hello消息,包含支持的SSL/TLS版本、加密算法等信息。服务器根据自身支持情况回复服务器Hello消息,确定使用的SSL/TLS版本和加密算法,并发送服务器证书给浏览器。浏览器验证服务器证书的有效性,然后生成一个随机的主密钥,并使用服务器证书中的公钥进行加密发送给服务器。服务器使用自己的私钥解密得到主密钥,之后双方使用主密钥生成会话密钥,用于后续的数据加密和解密。

三、发送HTTP请求

连接建立后,浏览器根据用户的操作(如访问网页、提交表单等)向服务器发送HTTP请求。请求包含请求方法(如GET、POST等)、请求路径(如/index.html)、HTTP版本以及请求头(包含浏览器类型、接受的内容类型等信息)和可能的请求体(如POST请求中的表单数据)。

服务器接收到请求后,根据请求的内容进行处理。例如,如果是请求一个网页文件,服务器会查找对应的文件资源。如果请求需要查询数据库,服务器会与数据库进行交互获取相关数据。

服务器处理完请求后,向浏览器发送HTTP响应。响应包含HTTP版本、状态码(如200表示成功、404表示未找到资源等)、响应头(包含服务器类型、内容类型、内容长度等信息)和响应体(如网页的HTML内容)。

常见HTTP状态码

状态码范围状态码含义
1xx - 信息性状态码100 Continue客户端可继续发送请求。
1xx - 信息性状态码101 Switching Protocols服务器切换协议。
2xx - 成功状态码200 OK请求成功,返回资源。
2xx - 成功状态码201 Created创建新资源成功。
2xx - 成功状态码204 No Content请求成功但无内容返回。
3xx - 重定向状态码301 Moved Permanently资源永久移动。
3xx - 重定向状态码302 Found资源临时移动。
3xx - 重定向状态码304 Not Modified资源未修改,使用缓存。
4xx - 客户端错误状态码400 Bad Request请求有语法错误。
4xx - 客户端错误状态码401 Unauthorized未认证。
4xx - 客户端错误状态码403 Forbidden已认证但无权限。
4xx - 客户端错误状态码404 Not Found资源未找到。
5xx - 服务器错误状态码500 Internal Server Error服务器内部错误。
5xx - 服务器错误状态码502 Bad Gateway网关错误。
5xx - 服务器错误状态码503 Service Unavailable服务不可用。
5xx - 服务器错误状态码504 Gateway Time-out网关超时。

四、网页渲染

浏览器收到响应后,开始解析HTML(HyperText Markup Language)内容。浏览器根据HTML标签构建DOM(Document Object Model)树,将HTML文档中的各个元素表示为DOM节点,如<html>是根节点,<body><head>等是其子节点,每个节点包含标签名、属性和子节点等信息。

在解析HTML的过程中,如果遇到外部资源的引用,如<link>标签引用的CSS(Cascading Style Sheets)文件、<script>标签引用的JavaScript文件、<img>标签引用的图片等,浏览器会再次发起请求去获取这些资源。

浏览器根据DOM树和加载的CSS文件构建CSSOM(CSS Object Model)树,然后将DOM树和CSSOM树合并成渲染树(Render Tree)。渲染树只包含需要显示的节点(例如,<head>中的一些元素可能不需要显示,不会包含在渲染树中)。

浏览器根据渲染树进行布局(Layout),确定每个节点在页面中的位置和大小。最后,浏览器进行绘制(Paint)操作,将各个节点绘制到屏幕上,显示出网页内容。

五、断开HTTP连接

image

对于4次挥手,其实你仔细看是2次,因为TCP是全双工的,所以,发送方和接收方都需要Fin和Ack。只不过,有一方是被动的,所以看上去就成了所谓的4次挥手。如果两边同时断连接,那就会就进入到CLOSING状态,然后到达TIME_WAIT状态。

资料

  • 《计算机网络:自顶向下方法》
  • https://developer.mozilla.org/zh-CN/
  • https://xiaolincoding.com/
  • https://mp.weixin.qq.com/s/o1Atz2uJtcsSmsVPNK9kVA
  • https://root-servers.org/
  • https://coolshell.cn

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

类型转换【C++提升】(隐式转换、显式转换、自定义转换、转换构造函数、转换运算符重载......你想知道的全都有)

更多精彩内容..... &#x1f389;❤️播主の主页✨&#x1f618; Stark、-CSDN博客 本文所在专栏&#xff1a; C系列语法知识_Stark、的博客-CSDN博客 座右铭&#xff1a;梦想是一盏明灯&#xff0c;照亮我们前行的路&#xff0c;无论风雨多大&#xff0c;我们都要坚持不懈。 一…

【srm系统】供应商管理,招投标管理,电子采购系统,询价管理

前言&#xff1a; 随着互联网和数字技术的不断发展&#xff0c;企业采购管理逐渐走向数字化和智能化。数字化采购平台作为企业采购管理的新模式&#xff0c;能够提高采购效率、降低采购成本、优化供应商合作效率&#xff0c;已成为企业实现效益提升的关键手段。系统获取在文末…

[含文档+PPT+源码等]精品基于Python实现的美术馆网站的设计与实现

基于Python实现的美术馆网站&#xff0c;其设计与实现背景主要源于以下几个方面的需求和发展趋势&#xff1a; 一、文化艺术领域的发展需求 随着文化娱乐活动的日益丰富&#xff0c;美术馆作为展示艺术作品、传播文化的重要场所&#xff0c;其管理和服务模式的创新对于提升公…

LabVIEW提高开发效率技巧----使用动态事件

在LabVIEW开发过程中&#xff0c;用户交互行为可能是多样且不可预知的。为应对这些变化&#xff0c;使用动态事件是一种有效的策略。本文将从多个角度详细介绍动态事件的概念及其在LabVIEW开发中的应用技巧&#xff0c;并结合实际案例&#xff0c;说明如何通过动态事件提高程序…

【售后资料】软件售后服务方案(word原件)

软件售后服务方案的售后服务范围广泛&#xff0c;涵盖了多个方面&#xff0c;以确保客户在使用软件过程中得到全面、及时的支持。具体来说&#xff0c;这些服务范围通常包括以下几个核心内容&#xff1a; 技术支持服务维护与更新服务培训与教育服务定制化服务数据管理与服务客户…

如何获取网页内嵌入的视频?

如何获取网页内嵌入的视频&#xff1f; 有时插件无法识别的视频资源&#xff0c;可以通过手动使用浏览器的开发者工具来抓取。你可以按照以下步骤操作&#xff1a; 步骤&#xff1a; 打开网页并按 F12&#xff1a;在视频页面按下 F12 或右键点击网页并选择“检查”或“Inspe…

Spring Boot实现的大学生就业市场解决方案

1系统概述 1.1 研究背景 如今互联网高速发展&#xff0c;网络遍布全球&#xff0c;通过互联网发布的消息能快而方便的传播到世界每个角落&#xff0c;并且互联网上能传播的信息也很广&#xff0c;比如文字、图片、声音、视频等。从而&#xff0c;这种种好处使得互联网成了信息传…

【案例】距离限制模型透明

开发平台&#xff1a;Unity 2023 开发工具&#xff1a;Unity ShaderGraph   一、效果展示 二、路线图 三、案例分析 核心思路&#xff1a;计算算式&#xff1a;透明值 实际距离 / 最大距离 &#xff08;实际距离 ≤ 最大距离&#xff09;   3.1 说明 | 改变 Alpha 值 在 …

简易投影仪的制作

今天不做开发类的文章&#xff0c;来给大家整个活哈哈哈哈哈。由于前几天室友说看小屏幕的抖音太不舒服&#xff0c;比较累眼睛&#xff0c;所以我萌生出来一个制作投影仪的想法。于是查阅了资料最终完成以下的设计。 以下设计价格最高的是一部旧的可拆卸的智能手机 简易投影仪…

C++11新特性(基础)【2】

目录 1.范围for循环 2.智能指针 3.STL中一些变化 4.右值引用和移动语义 4.1 左值引用和右值引用 4.2 左值引用与右值引用比较 4.3 右值引用使用场景和意义 4.4 右值引用引用左值及其一些更深入的使用场景分析 4.5 完美转发 1.范围for循环 int main() {int array[10] { 1,2,3,4…

CSS | CSS中强大的margin负边距

css中的负边距(negative margin)是布局中的一个常用技巧&#xff0c;只要运用得合理常常会有意想不到的效果。很多特殊的css布局方法都依赖于负边距&#xff0c;所以掌握它的用法对于前端的同学来说&#xff0c;那是必须的。本文非常基础&#xff0c;老鸟可以略过。 一、负边距…

【宽搜】3. leetcode 515 在每个树行中找最大值

1 题目描述 题目链接&#xff1a;在每个树行中找最大值 2 题目解析 根据题目描述&#xff0c;是找出每一行中的最大值&#xff0c;这毋庸置疑是使用宽度优先遍历了。我在这篇文章中讲解了宽度优先遍历的模板&#xff0c;如果没有看的同学可以先去看一下。 这道题和模板的不…

基于微信小程序的调查问卷管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

数据结构与算法(七)静态链表

目录 前言 一、静态链表的引入 二、线性表的静态链表存储结构 三、静态链表的插入操作 四、静态链表的删除操作 五、静态链表的优缺点总结 1、优点 2、缺点 3、小结 六、单链表小结——Tecent面试题 1、普通解法&#xff1a; 2、高级解法&#xff1a; 前言 静态链表…

基于CAN总线的TMS320F28335 Bootloader设计说明

1 设计目的 根据客户要求&#xff0c;开发一款基于CAN总线的TI公司TMS320F28335 DSP&#xff08;数字信号处理器&#xff09;bootloader&#xff0c;以方便应用程序的刷写。CAN设备采用周立功CAN卡&#xff08;USBCAN-I、USBCAN-II、USBCAN-E-mini&#xff09;。 2 专有信息 …

一篇文章吃透OA系统

一、OA系统是什么&#xff0c;都有什么功能&#xff1f; OA系统&#xff08;Office Automation System&#xff09;是办公自动化系统的简称&#xff0c;是一种利用计算机技术和网络通信技术&#xff0c;为企业和组织提供办公管理和协作支持的信息化系统。OA系统旨在提高办公效…

讯飞星火编排创建智能体学习(五):变量和文本拼接

引言 在讯飞星火编排创建智能体学习&#xff08;四&#xff09;&#xff1a;网页读取-CSDN博客中&#xff0c;我介绍了如何用网页读取功能从网上搜索车次信息。其中&#xff0c;我使用用大模型节点从文本中提取车次并合成了所需要的URL&#xff0c;今天介绍一下如何用变量和文…

win7怎么禁用驱动强制数字签名?win7驱动程序强制数字签名禁用方法

在Windows 7 64位操作系统中&#xff0c;安装驱动程序时可能会遇到“数字签名”的问题&#xff0c;这是微软为了确保驱动程序的安全性和可靠性而引入的一项安全机制。本文将深入探讨这个问题&#xff0c;并提供有效的解决方案。 理解数字签名的概念是至关重要的。数字签名是一…

LabVIEW机床加工监控系统

随着制造业的快速发展&#xff0c;机床加工的效率与稳定性成为企业核心竞争力的关键。传统的机床监控方式存在效率低、无法远程监控的问题。为了解决这些问题&#xff0c;开发了一种基于LabVIEW的机床加工监控系统&#xff0c;通过实时监控机床状态&#xff0c;改进生产流程&am…

新闻推荐系统:Spring Boot的架构优势

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…