从输入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专门写过这个问题的 ...
随机推荐
- Python网络爬虫案例(二)——爬取招聘信息网站
利用Python,爬取 51job 上面有关于 IT行业 的招聘信息 版权声明:未经博主授权,内容严禁分享转载 案例代码: # __author : "J" # date : 20 ...
- python 线程 进程 协程 学习
转载自大神博客:http://www.cnblogs.com/aylin/p/5601969.html 仅供学习使用···· python 线程与进程简介 进程与线程的历史 我们都知道计算机是由硬件和 ...
- 20145118《Java程序设计》 第7周学习总结
20145118<Java程序设计> 第7周学习总结 教材学习内容总结 本周学习内容为第十三章,以下为教材内容重点总结: 1.格林威治标准时间简称GMT时间. 2.java.util.Da ...
- python函数作用域LEGB
我们的在学习Python函数的时候,经常会遇到很多定义域的问题,全部变量,内部变量,内部嵌入的函数,等等,Python是如何查找的呢?以及Python又是按照什么顺序来查找的呢?这里做一个顺序的说明 ...
- RHEL7--linux系统启动流程与故障排除
一.Linux启动过程 MBR保存着系统的主引导程序(grub 446字节,分区表64字节),启动过程就是把内核加载到内存. 启动的顺序: 1.BIOS: 2.BIOS激活MBR: 3.MBR中的引导 ...
- redhat 7.2更新yum源时踩的坑
一.update yum .先查看redhat7.2中yum的包版本 [root@localhost jiayimeng]# rpm -qa | grep yum -.el7.noarch -.el7 ...
- 【文件readonly异常】异常退出编译文件,再次进入提示readonly
1.对于同一个文件如果上次已经打开,而未关闭的情况下,又打开该文件进行编辑时,会出现如下提醒: 这是由于已经打开但未闭关的文件,会在其目录下出现一个.swp的文件,由于是属于隐藏文件,可以用命令l. ...
- SPOJ 375 Query on a tree(树链剖分)
https://vjudge.net/problem/SPOJ-QTREE 题意: 给出一棵树,树上的每一条边都有权值,现在有查询和更改操作,如果是查询,则要输出u和v之间的最大权值. 思路: 树链剖 ...
- C#在服务端验证客户端证书(Certificate)
使用https协议进行通讯的时候可以设置双向证书认证,客户端验证服务端证书的方法前面已经介绍过了,现在说一下在服务端验证客户端证书的方案. 这里给出的方案比较简单,只需要在Service端的配置文件中 ...
- hdu 5651 xiaoxin juju needs help 逆元 两种求解方式
xiaoxin juju needs help Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/ ...