面试题:在浏览器输入url后发生了什么

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

W3C对浏览器的实现标准如下图所示,回答了该问题

  1. 重定向
  2. 缓存
  3. DNS解析
  4. TCP连接
  5. HTTP请求
  6. HTTP响应
  7. 处理文档
  8. 装载
  9. 渲染页面

下面是详细介绍

浏览器实现标准

performance.timing属性介绍
在这里插入图片描述

属性说明:

是一个无符号long long 型的毫秒数 表示某个时间的unix时间戳

  • PerformanceTiming.navigationStart:浏览器上下文上一个页面unload的时间戳,如果没有上一个文档,这个值会和PerformanceTiming.fetchStart相同
  • PerformanceTiming.unloadEventStart:unload事件抛出时的时间戳,如果没有上一个文档或者上一个文档与重定向中的一个不同源 这个值回返回0
  • PerformanceTiming.unloadEventEnd: unload事件结束的时间戳,如果没有上一个文档或者上一个文档与重定向的下一个文档不同源 这个值回返回0
  • PerformanceTiming.redirectStart :第一个HTTP重定向开始时的UNIX时间戳。如果没有重定向,或者重定向中的一个不同源,这个值会返回0
  • PerformanceTiming.redirectEnd:最后一个HTTP重定向完成时的UNIX时间错,如果没有重定向,或者重定向中的一个不同源,这个值会返回0
  • PerformanceTiming.fetchStart:浏览器准备好使用HTTP请求来获取文档的UNIX时间戳,这个时间点会在检查任何应用缓存之前
  • PerformanceTiming.domainLookupStart: 域名查询开始的UNIX时间戳,如果使用了持续连接(persistent connection)或者这个信息存储到了缓存或者本地资源上,这个值将和Performance.fetchStart 一致
  • PerformanceTiming.domainLookupEnd: 域名查询结束时间戳,如果使用了持续连接(persistent connection)或者这个信息存储到了缓存或者本地资源上,这个值将和Performance.fetchStart 一致
  • PerformanceTiming.connectStart: 返回HTTP请求开始向服务器发送的Unix时间戳,如果是用来持续连接,则返回值等用于fetchStart
  • PerformanceTiming.connectEnd:浏览器与服务器连接建立(握手和认证过程结束)的毫秒时间戳。
  • PerformanceTiming.secureConnectionStart: 浏览器与服务器开始安全连接的握手时的时间戳,如果当前网页不要求安全连接,则返回0
  • PerformanceTiming.requestStart: 浏览器向无武器发出HTTP请求时(或开始读取本地缓存)时的时间戳。
  • PerformanceTiming.responseStart: 浏览器从服务器收到(或东本地缓存读取)第一个字节时的Unix毫秒时间戳,如果传输层在开始请求之后失败并且连接被重开,该属性将会被数制成新的请求的相对应的发起时间。
  • PerformanceTiming.responseEnd: 浏览器从服务器收到(或重本地缓存读取,或从本地资源读取)最后一个字节时(如果在此之前HTTP连接已经关闭,则返回关闭时)的时间戳
  • PerformanceTiming.domLoading: 返回当前网页DOM结构开始解析时(即Document.readyState属性变为“loading”、相应的 readystatechange事件触发时)的Unix毫秒时间戳。
  • PerformanceTiming.domInteractive: 当前网页结构(DOM树生成)结束解析,开始加载内嵌资源时(即Document.readyState属性变为“interactive”、相应的readystatechange事件触发时)的Unix毫秒时间戳
  • PerformanceTiming.domContentLoadedEventStart: 解析器发送DOMContentLoaded 事件,纯HTML被完全加载以及解析时(而不必等待样式表,图片或者子框架完成加载)时的Unix毫秒时间戳
  • PerformanceTiming.domContentLoadedEventEnd: 所有需要立即执行的脚本已经被执行(不论执行顺序)时的Unix毫秒时间戳
  • PerformanceTiming.domComplete: 当前文档解析完成,即Document.readyState 变为 'complete’且相对应的readystatechange 被触发时的Unix毫秒时间戳
  • PerformanceTiming.loadEventStart: 该文档下,load事件被发送时的Unix毫秒时间戳。如果这个事件还未被发送,它的值将会是0
  • PerformanceTiming.loadEventEnd: load事件结束,即加载事件完成时的Unix毫秒时间戳。如果这个事件还未被发送,或者尚未完成,它的值将会是0.

1. performance 应用

1.关键时间节点

 window.onload = function(){
            setTimeout(function(){
                let t = performance.timing
                console.log('DNS查询耗时 :' + (t.domainLookupEnd - t.domainLookupStart).toFixed(0))
                console.log('TCP链接耗时 :' + (t.connectEnd - t.connectStart).toFixed(0))
                console.log('request请求耗时 :' + (t.responseEnd - t.responseStart).toFixed(0))
                console.log('解析dom树耗时 :' + (t.domComplete - t.domInteractive).toFixed(0))
                console.log('白屏时间 :' + (t.responseStart - t.navigationStart).toFixed(0))
                console.log('domready时间 :' + (t.domContentLoadedEventEnd - t.navigationStart).toFixed(0))
                console.log('onload时间 :' + (t.loadEventEnd - t.navigationStart).toFixed(0))
 
                if(t = performance.memory){
                    console.log('js内存使用占比 :' + (t.usedJSHeapSize / t.totalJSHeapSize * 100).toFixed(2) + '%')
                }
            })
        }

在这里插入图片描述
2. 实现一个 sortTiming 函数,满足:1)按照时间顺序展示;2)计算所有时间戳跟最早的时间戳的差值

Object.entries(performance.timing.toJSON()).filter(item=>item[1]).sort((a,b)=>a[1]-b[1]).map((item, index, arr)=>[...item, item[1] - arr[0][1]])

在这里插入图片描述


2. DNS详解

DNS Domain NAme System 域名系统 用于将域名转成IP(一对多)

  • 域名解析
    首先浏览器先检查本地hosts文件是否有这个网址映射关系,如果有就调用这个IP地址映射,完成域名解析。
    如果没找到则会查找本地DNS解析器缓存,如果查找到则返回。
    如果还是没有找到则会查找本地DNS服务器,如果查找到则返回。
    最后迭代查询,按根域服务器 ->顶级域,.com->第二层域,baidu.com ->子域,www.baidu.com的顺序找到IP地址。

  • 域名服务器
    在这里插入图片描述
    在这里插入图片描述

3. TCP在这里插入图片描述

在这里插入图片描述

TCP连接

在这里插入图片描述
seq 表示包的编号 SYN 同步序列编号 ACK 确认字符 ( + 1)

CDN content delivery network

————————————————————

其他知识点
1. document.readyState
  • loading / 正在加载 document 仍在加载。
  • interactive / 可交互 文档已被解析,"正在加载"状态结束,但是诸如图像,样式表和框架之类的子资源仍在加载。
  • complete / 完成 文档和所有子资源已完成加载。表示 load 状态的事件即将被触发。

当这个属性的值变化时,document 对象上的readystatechange 事件将被触发。

面试题浏览器输入 URL 后会发生什么事情 目录 综述 一、浏览器查找域名的 IP 地址 二、浏览器向web 服务器发送一个 HTTP 请求 三、服务器的永久重定向响应 301和302重定向对比 四、浏览器跟踪重定向地址 五、服务器处理请求 六、服务器返回一个 HTTP 响应 七、浏览器显示 HTML 综述 这是一道常用的面试题,针对后端方面,可以从以下两个角度回答问题: 网络传输过程(DNS 解析,HTTP 协议的格式, TCP 建立连接和传输, IP 转发过程,数据链路层转发过程) 应用程序(Tomcat... 阅读详情

相关推荐

面试题:在浏览器输入URL后都会发生什么?

面试题:在浏览器输入URL后都会发生什么?

u013838417的博客 605

经典面试题:“从输入URL到展示出页面“这个过程发生了什么?

这篇博客主要介绍了经典面试题: "从输入URL到展示出页面"这个过程.

qq_54469537的博客 1295

面试必问】在浏览器输入URL后,到底发生了什么?

在现在互联网如此发达的时代,如果我们遇到什么问题不了解,第一个想到的就是就浏览器里找度娘,但是我们想想在浏览器输入百度的URL后,发生了什么呢?下面我们一起来看看~对URL地址进行校验,看符合URL的要求(包括协议、网络地址、资源路径),如果是不合法的地址,会转给默认的搜索引擎。我们要解析域名,拿到相应的IP地址。在缓存中没有查找到的话,就发送请求到本地域名服务器。 如果还没有,就发送递归查询(本地服务器请求比它高一级的服务器,如此递归直到根域名服务器,就一定能找到这个服务器的IP地址)。 找到正确的I

weixin_48271092的博客 524

计算机网络经典面试题:在浏览器输入URL并按下回车后会发生什么?

1.URL解析 2.DNS域名解析 3.建立TCP连接 4.发送HTTP请求 5.服务器处理相关请求 6.返回响应结果 7.关闭TCP连接 8.HTMl解析与页面渲染

qq_51447436的博客 9325

面试环节:在浏览器输入 URL 回车之后发生了什么?(超详细版)

点击蓝色“五分钟学算法”关注我哟 加个“星标”,天天中午 12:15,一起学算法 作者 | 4Ark 来源 |https://4ark.me/post/b6c7c0a2.html 前言 这个问题已经是老生常谈了,更是经常被作为面试的压轴题出现,网上也有很多文章,但最近闲的无聊,然后就...

墨鱼菜鸡 303

前端面试浏览器输入网址后发生了什么?

前端面试题出发分析一系列知识点 大致来看,从输入url到网页显示会经历下列五个阶段 将url转换为ip地址 同服务器进行通信 获取网页内容 浏览器进行渲染 断开通信 下面来具体分析每个阶段都做了什么,因为是一道非常经典的前端面试题,并且覆盖面非常广,所以尽量做到深挖知识要点。有些可以单独写文章的地方会用黄色记号标记,之后会用文章链接替代! #1. url到ip地址的转换 —— DNS解析 为了向www.baidu.com发送请求,必须获得www.baidu.com的ip地址,理所当然应该使用DNS去

小隐的博客 1522

面试题:从输入URL浏览器显示页面发生了什么

面试题:从输入URL浏览器显示页面发生了什么面试题:从输入URL浏览器显示页面发生了什么题目分析题目解答 面试题:从输入URL浏览器显示页面发生了什么 题目分析 其实这道题目考察的是网络模型 题目解答 往浏览器输入网址,浏览器接收到请求 解析域名:浏览器首先会查看本地的hosts文件,查看是否能够将域名解析出IP地址。若没有找到则进一步请求DNS服务器,找到域名对应的IP地址。 建立TCP连接:要建立TCP连接,需要经过三次握手处理。 发送HTTP请求:浏览器向Web服务器发送HTTP请求,HTT

匿迹 570

面试题浏览器输入url发生了啥

整个过程看似瞬间完成,实则涉及多个网络协议和步骤的协同。

m0_47999208的博客 550

面试题浏览器输入 URL 后回车发生了什么?

面试中常问的一个问题就是:在浏览器输入 URL 地址回车后,发生了什么?这里简单概述一下。

『一枫说码』的博客! 210

面试题:从 URL浏览器输入到页面展现的过程中发生了什么?

面试题:从 URL浏览器输入到页面展现的过程中发生了什么? 延伸: 现代浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求完成后断开?什么情况下会断开? 一个 TCP 连接可以对应几个 HTTP 请求? 一个 TCP 连接中 HTTP 请求发送可以一起发送么(比如一起发三个请求,再三个响应一起接收)? 为什么有的时候刷新页面不需要重新建立 SSL 连接? 浏览...

thinkerman26的博客 3711

每天一道面试题(一):浏览器输入URL发生了什么

浏览器输入URL发生了什么 前言 这是一道非常经典的面试题,可以覆盖绝大多数网络相关的知识点,重点考察 TCP/IP 网络模型、tcp、http 网络协议、DNS 地址解析过程等知识点,当然也可以衍生出许多其他的网络相关的面试题,比如: TCP协议为什么需要进行三次握手,而不是四次,五次 TCP协议为什么要进行四次挥手 DNS 服务器是如何解析地址的,流程是怎样的 HTTP 协议的特点 TCP/IP 网络模型分为哪几层,分别有什么作用 这篇文章主要是对浏览器一次完整的请求进行大致的分析,并且在分析的过程

不喝阔落的博客 1606

面试题:一个 URL浏览器输入到页面展现的过程中发生了什么

这是一个经典的面试题:一个URL浏览器到页面的过程中发生了什么,那么今天就带大家九浅一深来研究一下

qq_32139981的博客 1093

经典面试题浏览器输入url发生了哪些事情

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录一、网络基础1.IP地址补充2.子网掩码 一、网络基础 1.IP地址补充 IP地址,由网络号+主机号构成 网络号:表示网段(一个局域网,可能是只有一个网段,也可能有多个网段) 大型网络,是由多个小型网络构成的 公网,就是由多个局域网构成 网络号,就是标识某个网络中某个子网的 主机号:标识主机(某个网络号的网络中,唯一的一台主机) Ip地址划分:A~E五类 A~E类的IP地址划分中,网络号和主机号是说的范围 特殊IP: 主机.

m0_51405559的博客 400

面试题:详细解析,从输入URL浏览器显示页面到底发生了什么

输入URL浏览器显示页面发生了什么 当在浏览器地址输入网址,如:www.baidu.com后浏览器是怎么把最终的页面呈现出来的呢?这个过程可以大致分为两个部分:网络通信和页面渲染。 一、网络通信 互联网内各网络设备间的通信都遵循TCP/IP协议,利用TCP/IP协议族进行网络通信时,会通过分层顺序与对方进行通信。分层由高到低分别为:应用层、传输层、网络层、数据链路层。发送端从应用层往下走,接收端从数据链路层网上走。如图所示: 1. 在浏览器输入url 用户输入url,例如http://www.bai

yuanchangliang的博客 1494

面试题浏览器输入URL之后会发生什么? —— DNS协议

文章目录博主当时的回答DNS服务器域名和DNS解析DNS解析流程查看本地DNS配置查看域名对应的IP地址查看DNS递归过程DNS负载均衡参考文献 写在前面: 博主在字节一面的时候,面试官就问我:浏览器输入URL之后,会发生什么? 虽然博主心里知道面试官想考察的内容是对网络包传输的流程,但是当时还是答得不是很好,故决定总结一系列文章来好好讲讲网络相关知识。 此为系列第一讲,讲的内容是关于DNS协议的。 博主当时的回答 博主当时的回答是这样的: 当用户输入一个URL之后,浏览器会根据HTTP/HTTPS协

0 error(s) 894

面试题:在浏览器输入 URL 回车之后发生了什么?(超详细版)

点击上方"悟能之能",选择"设为星标"回复"面经"获取面试资料来源:https://4ark.me/post/b6c7c0a2.html前...

二师兄撒欢之地 1万+

经典面试题:从 URL浏览器被被输入到页面展现的过程中发生了什么?

作者丨松若章 来源丨http://1t.click/ataf 曾经有这么一道经典面试题:从 URL浏览器被被输入到页面展现的过程中发生了什么? 相信大多数准备过的同学都能回答出来,但是如果继续问:收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式、什么顺序、建立了多少连接、使用什么协议被下载下来的呢? 要搞懂这个问题,我们需要先解决下面五个问题: ...

我惠依旧的博客 605

面试题:在浏览器地址输入一个URL后回车,将会发生什么事情?

一.在浏览器输入一个网址 二.DNS 进行域名解析工作 对 www.baidu.com 这个网址进行 DNS 域名解析工作,得到对应的 IP 地址 1.Chrome浏览器会首先搜索浏览器的DNS缓存,看自身的缓存中是否有www .baidu .com对应的条目,而且没有过期,如果有且没有过期则解析到此结束。 2.如果浏览器自身的缓存里面没有找到对应的条目,那么Chrome会搜索操作系统的DNS缓...

HU1656的博客 1314
上一篇: JS实现排序算法
下一篇: 前端-JS获取对象属性需先判空
MoveLikeRabbit
博客等级 码龄9年 5粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值