从浏览器地址栏输入 url 到显示主页的过程?

news2024/10/6 8:23:33

当在浏览器地址栏输入一个URL并按下回车键后,发生了一系列复杂的过程:

  1. DNS解析:浏览器会对输入的URL进行DNS解析,将域名转换为服务器的IP地址。这一过程包括浏览器缓存、操作系统缓存、本地HOST文件配置、本地DNS服务器以及远程DNS服务器的查找。

    1. 浏览器缓存:浏览器会将之前解析的DNS记录缓存一段时间,以便下次请求相同域名时直接使用缓存记录,而不必重新进行DNS解析。这些缓存通常存储在浏览器的内存中,因此在浏览器关闭后就会被清除。
    2. 操作系统缓存:如果在浏览器缓存中没有找到对应的DNS记录,则浏览器会向操作系统发起DNS解析请求。操作系统会在自己的DNS缓存中查找记录,如果找到则直接返回给浏览器。操作系统的DNS缓存通常存储在内存中,与浏览器缓存类似,也会在重启后被清除。
    3. 本地HOST文件:当浏览器缓存和操作系统缓存中找不到对应的域名和IP地址映射关系时,会查找本地HOST文件。如果本地HOST文件中存在对应的映射关系,就会直接使用该IP地址,不再向DNS服务器发送请求,从而提高了DNS解析的效率。如果本地HOST文件中没有对应的映射关系,浏览器才会向DNS服务器发送请求,查找域名对应的IP地址。
    4. 本地DNS服务器:如果在本地HOST文件中也没有找到对应的DNS记录,则浏览器会向本地DNS服务器发送DNS解析请求。本地DNS服务器通常由网络服务提供商或者企业内部搭建,其缓存可以存储较长时间,从而提高DNS解析的效率。
    5. 远程DNS服务器:如果在本地DNS服务器中也没有找到对应的DNS记录,则会向远程DNS服务器发送DNS解析请求。远程DNS服务器通常由互联网服务提供商或DNS解析服务提供商提供,它们会负责解析请求,并将结果返回给本地DNS服务器和浏览器。

    同时,DNS解析对于保障网络安全、加速网站访问以及提高用户体验都有非常重要的作用:

    1. 帮助用户快速访问网站:当用户在浏览器中输入网站域名时,DNS会将域名解析为对应的IP地址,使用户能够快速访问该网站。如果DNS解析速度慢或者解析错误,用户将无法访问该网站或者访问速度很慢,这将严重影响用户体验。
    2. 保障网络安全:DNS解析也可以用来保障网络安全。DNS解析服务提供商可以通过屏蔽恶意域名或者网站来防止恶意软件的传播,从而提高网络的安全性。
    3. 加速网站访问:CDN(内容分发网络)是基于DNS解析实现的。CDN将网站的内容缓存在离用户较近的服务器上,当用户访问该网站时,DNS服务器会自动选择距离用户最近的服务器提供内容,从而提高网站访问速度。
  2. 建立TCP连接:浏览器使用解析后的IP地址与服务器建立TCP连接。这一过程涉及TCP的三次握手。客户端会向服务器发送SYN(Synchronize Sequence Numbers,同步序列编号)包,服务器回复SYN-ACK包,客户端再发送ACK(Acknowledgment,确认序号)包。同时,如果用户访问的是HTTPS网站,则浏览器会对该网站发出的所有请求使用TLS协议进行加密,确保通信的机密性、完整性和真实性。

    • TCP三次握手的目的是建立起可靠的双向数据传输通道,SYNACK是用来在连接建立过程中进行协议交互的标志。简单理解,主要是为了分别检验客户端和服务端的发信、收信能力是否OK。
      1. 客户端发送给服务端SYN包,包含一个随机序号x
      2. 服务端收到客户端的SYN包,回复一个ACK包,包含x+1, 同时,也会发送给客户端一个SYN包,包含随机序号y;这两个包是在同一次发送的
      3. 客户端收到服务端的ACK包和SYN包,并回复给服务端一个ACK包,包含y+1
      4. 服务端收到客户端的ACK包,至此,连接建立

在这里插入图片描述

  1. 发送HTTP请求:TCP连接建立后,浏览器根据输入的URL生成HTTP请求,通过已建立的TCP连接发送给服务器。

  2. 服务器处理请求:服务器接收到浏览器发送的HTTP请求后,会根据请求信息进行处理;处理完成后,服务器会生成一个HTTP响应发送给浏览器。

  3. 接收HTTP响应:浏览器接收到服务器返回的HTTP响应。

  4. 解析HTML:浏览器对响应体中的HTML文档进行解析,生成DOM树。这一步中,如果本地缓存中有对应的HTML文件,则会优先使用缓存文件,加快页面加载速度;而不会发起HTTP请求(第3步)。

  5. 加载资源:浏览器会解析HTML文档中的资源链接(如CSS、JavaScript、图片等),并发起请求获取这些资源。这一步中,如果本地缓存中有对应的资源文件,也会优先使用缓存文件,加快页面加载速度;而不发起加在资源的请求。

  6. 执行JavaScript:浏览器在加载并解析JavaScript文件后,会执行其代码。JavaScript代码可能会修改DOM树、操作CSS或再次发起请求等。

  7. 渲染页面:浏览器根据DOM树和CSS样式信息生成渲染树,然后进行布局,将渲染树中的各个节点绘制到屏幕上。

  8. 处理用户交互:浏览器会监听用户的操作(如点击、滚动等),并根据需要触发JavaScript事件处理函数,更新DOM树和CSS样式,进一步修改页面渲染。在HTTP/1中,先处理用户交互是为了优先响应用户,这是浏览器的核心功能之一;而在HTTP/2中,由于有多路复用的机制,可以复用同一个 TCP 连接的多个请求,因此先处理用户交互,再关闭 TCP 连接可以充分利用这种机制,提高性能。

  9. 断开TCP连接:当浏览器接收到所有资源并完成渲染后,它会断开与服务器的TCP连接。这个过程涉及TCP的四次挥手,客户端会发送FIN包,服务器回复ACK包和FIN包,最后客户端回复ACK包确认连接断开。

    • 关闭连接时,客户端向服务端发送 FIN 时,仅仅表示客户端不再发送数据了但是还能接收数据。
    • 服务端收到客户端的 FIN 报文时,先回一个 ACK 应答报文,而服务端可能还有数据需要处理和发送,等服务端不再发送数据时,才发送 FIN 报文给客户端来表示同意现在关闭连接。

    总结来说,服务端通常需要等待完成数据的发送和处理,所以服务端的 ACKFIN 一般都会分开发送,从而比三次握手多了一次。

在这里插入图片描述

  1. 缓存:为了提高网站的访问速度,浏览器会将一些资源(如图片、脚本、样式表等)缓存在本地。下次用户再访问该网站时,浏览器会先检查本地缓存是否有相应的资源,有则直接使用本地缓存,不必再次向服务器请求。

参考

  • DNS解析顺序是怎样的?
  • DNS解析顺序
  • DNS or hosts ?
  • DNS解析顺序是怎样的?

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

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

相关文章

多通道振弦传感器无线采集仪 数据发送详解

多通道振弦传感器无线采集仪 数据发送过程 每次采集仪启动后会将采集到的传感器数据进行内部存储,并在设置好的时间间隔将数据发送出去,通过修改“数据发送方式”参数,监测数据可由数据接口输出也可经由无线网络发送。 在发送监测数据时&…

SpringCloud --- Nacos注册中心、配置管理

一、Nacos注册中心 1.1、认识和安装Nacos Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。 1.2、服务注册到nacos Nacos是SpringCloudAlibaba的组件,而SpringCloudAlibaba也遵循Spr…

3dtiles之点云pnts文件详解

3DTiles是一种用于在WebGL环境中渲染大规模三维地理数据的规范,它允许开发者将复杂的三维数据以高效的方式传输、存储和呈现。而PNTS格式则是3DTiles规范中用于存储点云数据的格式之一。在本文中,我们将探讨3DTiles和PNTS的基本原理以及它们如何用于处理…

集成学习(Ensembles)

Ensembles 前言EnsemblesAveraging,StackingWhy does averaging work?如何理解:In practice errors won’t be completely independent due to noise in the labels Random ForestsDoes averaging work if you use trees with the same parameters?Bootstrap Samp…

【AgentGPT】网页版的 Auto-GPT,让 AI 成为我们的生产力工具

在上一篇文章笔者分享了 Auto-GPT 的安装&使用,不过因为操作相对繁琐,可能会导致许多想使用工具的人卡在环境的设定上。 所以这边再介绍另一款无需安装,可直接使用的工具“AgentGPT”;他的操作超级简单,只要设定好目标(Goal),一键发送即可! 大纲 ▋ 如何免费使用 A…

【C++】计算类的大小

目录 简介计算类的大小场景1:空类场景2场景3:含有虚函数场景4:继承场景5:存在字节对齐的情况 总结结语 简介 Hello! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ …

Linux多媒体子系统02:V4L2核心框架分析(部分)

目录 1 V4L2框架结构概述 1.1 imx8视频输入通路硬件结构 1.2 V4L2设备节点观察 1.3 dts配置观察 1.4 probe函数观察 1.4.1 函数功能简介 1.4.2 各模块probe函数分析 1.5 V4L2框架结构图示 2 设备管理机制 2.1 v4l2_device结构体相关 2.1.1 v4l2_device结构体 2.1.2…

15.Java多线程

目录 1. Java基本介绍 2. JDK下载安装及其环境配置 3. 一个简单的java程序 4. Eclipse基本使用、数据类型、运算符 5. 控制语句(if、switch、for、while、foreach) 6. Java数组 7. Java字符串对象(String|StringBuffer|StringBuilder|StringJoiner…

教你如何免费使用ChatGPT 4?(国内可以直接访问,不用魔法)

目录 一. 内容介绍 二. 功能介绍 三. 优势 四. 版本比较 五. 国内试用方法 内容介绍: ChatGPT 4是由OpenAI开发的最新一代大型语言模型,其采用了GPT-3.5的技术架构,是目前全球最强大的通用AI模型之一。ChatGPT 4拥有极高的语言处理能力和…

SD卡恢复怎么做?内存卡数据恢复,3个方法!

案例:sd卡怎么恢复? 【我的sd卡用了快一年了,里面存储了很多非常重要的文件,但不知道为什么我今天将它插入电脑后,很多文件都无法显示了,大家有什么好的方法可以恢复sd卡吗?感谢回答&#xff0…

【翻译一下官方文档】之uniapp的导航条设置

目录 uni.setNavigationBarTitle(OBJECT) uni.setNavigationBarColor(OBJECT) uni.hideHomeButton(OBJECT) uni.setNavigationBarTitle(OBJECT) 动态设置当前页面的标题。 OBJECT参数说明 参数类型必填说明titleString是页面标题successFunction否接口调用成功的回调函数fai…

安虚拟机详细教程 VMware虚拟机与主机之间不能复制粘贴及拖拽问题

VMware虚拟机中安装Ubuntu18.04(linux发行版)【超详细图文教程】_vmware安装ubuntu18.04__7270的博客-CSDN博客 1. 查看vmware Tools是否安装 打开虚拟机 ,点击上方导航栏 ‘虚拟机’ 查看VMware Tools是否安装,如果未安装&#…

Linux和shell命令第一节课

windows开发 linux服务 区块链, 稳定,安全,可移植性,低资源消耗,开源软件---windows付费 linux就是操作系统,网络服务,移动设备,嵌入式系统,计算器服务器 除个人桌面…

Sentinel:服务限流

文章目录 创建工程测试工程流控熔断热点授权规则系统规则SentinelResource 配置持久化执行流程 创建工程测试工程 1.导入依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><v…

开放原子训练营第三期:RT-Thread 学习有感

介绍 前几天有幸收到C站的训练营学习邀请&#xff0c;了解到这两天即将举行的开放原子 RTT 训练营。博主算是一名嵌入式方向的小白&#xff0c;主要还是在裸机上进行开发&#xff0c;但对嵌入式的操作系统和实时系统很感兴趣。在这次学习训练营中借助一些学习示例&#xff0c;…

【Linux】 1.2基本指令-part 2

文章目录 07. man指令08.cp指令(copy)&#xff08;重要&#xff09;09.mv指令(move)&#xff08;重要&#xff09;10.cat指令- 补充&#xff1a;echo 与 >11.more指令12.less指令&#xff08;重要&#xff09;13.head指令14.tail指令- 补充&#xff1a;管道 07. man指令 ma…

CV不存在了?体验用Segment Anything Meta分割清明上河图

目录 1 Facebook抠图神器2 本地版SAM配置3 Web版SAM体验4 总结 1 Facebook抠图神器 在图像处理与计算机视觉领域&#xff0c;图像分割(image segmentation)是在像素级别将一个完整图像划分为若干具有特定语义区域(region)或对象(object)的过程。每个分割区域是一系列拥有相似特…

IJKPLAYER源码分析-常用API

前言 本文简要介绍IJKPLAYER的几个常用API&#xff0c;以API使用的角度&#xff0c;来审视其内部运作原理。这里以iOS端直播API调用切入。 调用流程 init 创建播放器实例后&#xff0c;会先调用init方法进行初始化&#xff1a; - (IJKFFMediaPlayer *)init {self [super ini…

《深入浅出Embedding》随笔

ChatGPT的核心运行机制或许是Transformer&#xff0c; ChatGPT的核心数据机制或许就是嵌入&#xff08;Embedding&#xff09;了。什么是Embedding呢&#xff1f;了解Embedding可以为我们的软件研发工作带来哪些帮助呢&#xff1f;鉴于此&#xff0c;老码农阅读了《深入浅出Emb…

前端切图仔入门Docker,三分钟上线自己的博客平台

依稀记得2022年趁某平台优惠买了台云服务器&#xff0c;周未准备安装MySQL数据库&#xff0c;两天时间卡在MySQL环境配置上&#xff0c;实在是折磨一气之下把服务器给退了。 要是我早一点学会Docker&#xff0c;我的博客估计已上线一年啦&#xff01;前端切图仔学会Docker&…