从输入URL到页面加载发生了什么
大体过程
- 浏览器的地址栏输入URL并按下回车
- 浏览器检查当前URL是否存在缓存,并比较缓存是否过期
- DNS解析URL对应的IP
- 根据IP建立TCP连接(三次握手)
- HTTP发起请求
- 服务器处理请求,浏览器接收HTTP响应
- 渲染页面,构建DOM树
- 关闭TCP连接(4次挥手)
具体过程的理解
浏览器缓存
大体上来说,可以分为强缓存和协商缓存
- 强缓存
- 强缓存主要通过http响应头中的Cache-Control和Expires两个字段来控制的
Expires: Wed, 21 Oct 2015 07:28:00 GMT
- Expires是HTTP/1.0标准下的字段,上例表示该资源会在Wed, 21 Oct 2015 07:28:00 GMT之后过期,在这个时间点之前都是直接读取缓存不会发起请求的。这种方式有一个很大的问题就是服务器时间和本地时间可能不一致或者说是修改了本地时间也会造成缓存失败。
Cache-control: max-age=30
- Cache-Control出现于HTTP/1.1,优先级高于Expires,上面这个表示该资源会在30秒之后过期,还有其他值可选,详情查看文档
- 协商缓存
- 如果缓存过期了,我们就要用协商缓存来解决问题,也就是说协商缓存是需要请求的,如果缓存有效会返回304。协商缓存通过HTTP的Last-modified,Etag字段进行判断
- Last-Modified是一个响应头字段,包含的是服务器认定的资源做出修改的日期及时间。下次请求时If-Modified-Since这个请求头字段会将Last-Modified发送给服务器,问服务器在该日期之后资源是否有更新,没有更新的话返回一个不带消息主体的304响应,有更新的话会返回新资源,并且响应头中会的Last-Modified会带有最新文件修改时间。
- ETag是一个响应头字段,类似于文件指纹,If-None-Match会将当前的ETag发送给服务器,服务器验证目前文件的ETag跟请求的ETag是否一致,如果一致,就返回不带任何内容的304未修改状态,如果不一致就返回最新资源。
DNS解析
DNS解析实际上就是将我们熟悉的域名解析成IP地址,也就是说当你在浏览器地址栏输入www.baidu.com时实际上访问的是这个域名对应的唯一IP地址,之所以当初要这样设计,是因为IP地址是由纯数字组成的,不便于记忆,而通过几级域名这种方式是便于我们人类记忆的。
DNS解析是一个递归查询的过程,从右到左解析的,有一个专门的DNS解析服务器,据说要经历8个步骤,具体过程我们了解不多,就不过多解释了。
建立TCP连接的三次握手
这一块InterviewMap讲的比较详细了
浏览器渲染页面的过程
- 处理HTML并构建DOM树
- 处理CSS构建CSSOM树
- 将DOM树和CSSOM树合并成一个渲染树
- 根据渲染树来布局,计算每个节点的位置(回流)
- 调用GPU绘制,合成图层,显示在屏幕上(重绘)
总结
既然大体知道了浏览器从输入URL到页面加载的过程,那就可以针对这个过程一些可优化的点做优化,这也成了前端性能优化的一个重要部分,关于这部分,我会另写一篇文章来总结。
参考文章
从输入URL到页面加载发生了什么的更多相关文章
- 深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 3
备注: 因为文章太长,所以将它分为三部分,本文是第三部分. 第一部分:深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 1 第二部分:深入浅出经典面试题:从浏览器中输入URL ...
- 【ASP.NET Core】EF Core - “影子属性” 深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 1
[ASP.NET Core]EF Core - “影子属性” 有朋友说老周近来博客更新较慢,确实有些慢,因为有些 bug 要研究,另外就是老周把部分内容转到直播上面,所以写博客的内容减少了一点. ...
- (四)从输入URL到页面加载发生了什么
一.从输入URL到页面加载发生了什么 1.在浏览器中输入URL 如:https://www.cnblogs.com/loveapple/ URL分成协议.地址.路径三部分 协议:http.https. ...
- 从输入URL到页面加载发生了什么?
总体来说分为以下几个过程: DNS解析 TCP连接 发送HTTP请求 服务器处理请求并返回HTTP报文 浏览器解析渲染页面 连接结束 具体内容点这里
- 从输入 URL 到页面加载完成的过程中都发生了什么事情?
这个问题是老生常谈的问题啦,虽然说到处百度都有的答案,还是希望自己能总结一下. 如今有很多答案,都是从硬件开始讲起,比如键盘的响应或者触屏的响应,然后CPU处理到OS的内核等等.这里不作为重点来讲,要 ...
- 从输入 URL 到页面加载完成的过程中都发生了什么
从输入 URL 到页面加载完成的过程中都发生了什么 过程描述 浏览器查找域名对应的 IP 地址: 浏览器根据 IP 地址与服务器建立 socket 连接: 浏览器与服务器通信: 浏览器请求,服务器处理 ...
- 从浏览器中输入URL到页面加载的发生了什么-转载
转:https://www.cnblogs.com/confach/p/10050013.html 背景 “从浏览器中输入URL到页面加载的发生了什么“,这是一道经典的面试题,涉及到的知识面非常多,但 ...
- 一个页面从输入URL到页面加载完成发生了...待细化
一个页面从输入URL到页面加载完成发生了... 1.查找浏览器缓存 2.寻址:DNS解析 查找该域名对应的IP地址, 如果需要重定向(301),则再次发起请求 3. 进行HTTP协议会话 4.客户端发 ...
- 【转】 从输入 URL 到页面加载完成的过程中都发生了什么事情?
该问题总结 一. 往浏览器输入URL后给你一个页面,你天天在使用的东西,学过计算机网络的知道是怎么回事,就DNS解析然后页面的回馈,不过要讲好还是有难度. 之前fex团队的nwind专门写过这个问题的 ...
随机推荐
- kubernetes 一些基本的概念
k8s 原理 kubernetes API server 作为集群的核心,负责集群各功能之间的通信, 集群内的各个功能模块通过API Server将信息存入etcd,当需要获取和操作这些数据的时候 通 ...
- 20145309李昊《网络对抗技术》实验9 web安全基础实践
本实验在同学帮助下完成 一.实验准备 1.0 实验目标和内容 Web前端HTML.能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML. Web前 ...
- bzoj 3505 数三角形 - 组合数学
给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. Input 输入一行,包含两个空格分隔的正整数m和n. Output 输出 ...
- Email移动的原理
1.从数据库中得到被移动邮件的uid: 2.选择移动邮件所属folder,即SelectFolder; 3.调用copymessage(path,vmime::net::messageset::byU ...
- SpringCloud请求响应数据转换(一)
异常现象 近期做Spring Cloud项目,工程中对Controller添加ResponseBodyAdvice切面,在切片中将返回的结果封装到ResultMessage(自定义结构),但在Cont ...
- 又一个改写MBR的病毒(TDSS TDL4)
此毒为TDSS TDL4 的又一个变种.RIS2011 目前尚未收录此毒.此毒的主要行为是改写MBR,并在硬盘尾部的190个扇区内写入病毒代码.病毒的上述动作可穿透还原类软件对系统的保护.我在Acro ...
- 移动距离|2015年蓝桥杯B组题解析第八题-fishers
移动距离 X星球居民小区的楼房全是一样的,并且按矩阵样式排列.其楼房的编号为1,2,3... 当排满一行时,从下一行相邻的楼往反方向排号. 比如:当小区排号宽度为6时,开始情形如下: 1 2 3 4 ...
- springmvc基础知识及注解
SpringMVC 1.概念 Spring的MVC框架是一个基于DispatcherServlet的MVC框架,主要由DispatcherServlet.处理器映射.处理器.视图解析器.视图组成.每一 ...
- DPDK无法分出大页面:EAL: No free hugepages reported in hugepages-2048kB 解决方法
参考: [dpdk-users] Fw: DPDK Error --> EAL: No free hugepages reported in hugepages-2048kB DPDK无法分出连 ...
- P4 Tutorials Flowlet Switching
Github链接: Exercise 2: Implementing TCP flowlet switching P4 Tutorials Flowlet Switching 最近P4社区更新了Tut ...