对于网址栏的URL不同的操作方式有不同的加载资源、获取数据的方式,下面的详细过程针对"在地址栏输入URL,按enter(回车)键加载资源"此种操作方式做解析,其它的方式的过程大同小异,差异会在后面再做分析。

  1. 浏览器开启一个线程来处理这个请求,对URL判断如果是http协议就按照web方式处理;

  2. 浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容(此时没有向服务端发请求)。若没有,则进行下一步操作(后面需要向服务端发送请求);

  3. 通过DNS解析获取网址的IP地址;

  4. 向真实IP地址服务器发起tcp连接,与浏览器建立tcp三次握手。

  5. 握手成功后,进行HTTP协议会话,浏览器发送报头(请求报头);

  6. 进入到web服务器上的 Web Server,如 ApacheTomcatNode.JS 等服务器;

  7. 进入部署好的后端应用,如 PHPJavaJavaScriptPython 等,找到对应的请求处理;

  8. 处理结束回馈报头,将数据返回至浏览器;

  9. 浏览器开始下载html文档(响应报头,状态码200),同时设置缓存;

  10. 之后浏览器对整个 HTML 结构进行解析,形成 DOM 树;与此同时,它还需要对相应的 CSS 文件进行解析,形成 CSS 树(CSSOM)。

  接下来,需要结合 DOM + CSSOM,形成一个绘制树(Render Tree);

  11. 得到绘制树之后,需要计算每个结点在页面中的位置,这一个过程称为layout ;

  12. layout的过程是在一个连续的二维平面上进行的,接下来,需要将这些结果栅格化,映射到屏幕的离散二维平面上,这一过

   程称为 paint ;  现代浏览器为提升性能,将页面划分多个 layer,各自进行 paint 然后组合成一个页面(composite layers)。

 

PS: 开头说到的"对于网址栏的URL不同的操作方式有不同的加载资源、获取数据的方式"中其他方式的过程与上面方式差不多,只是在处理缓存这一环节上有些不同:

1. “转至”或地址栏里回车刷新:见上

2. F5刷新:没有第2步,在第8步判断返回值,如果返回304则表示有缓存,且此时直接用缓存;如果返回200则表示没有缓存,顺序执行至最后

3. Ctrl+F5刷新网页的区别:没有第2步,且在第8步一定返回200并顺序执行至最后

(对于以上3种不同方式更好的应该从http协议的缓存机制上做区分更容易理解,此处更侧重'向服务端发送请求及其返回值'这方面做一下区别)

PS: 10-12步更侧重于前端渲染页面过程,详细可参考:http://www.jianshu.com/p/016e8e78eb1f

一个页面从输入URL到页面加载显示完成,这个过程都发生了什么?的更多相关文章

  1. 一个页面从输入URL 到页面加载显示完成的过程中都发生了什么

    前端面试/笔试必考问题,越详细越好 先简单得讲: 浏览器根据请求的URL交给DNS域名解析,找到真实IP,向服务器发起请求: 服务器交给后台处理完成后返回数据,浏览器接收文件(HTML.JS.CSS. ...

  2. 用户从地址栏输入url,按下enter键后,直到页面加载完成的这个过程都发生了什么?

    流程大概描述一下: 用户将url输入后,服务器接受到请求,然后将这个请求进行处理,然后将处理后的结果返回给浏览器,浏览器将该结果以页面的形式呈现给用户. 详细描述: 1:用户将url(例如www.ba ...

  3. 一个页面从输入url到页面加载显示完成,中间都经历了什么

    第一种解释: 一般会经历以下几个过程: 1.首先,在浏览器地址栏中输入url 2.浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容.若没有,则跳到第三步操作. 3 ...

  4. 一个页面从输入URL到页面加载完成发生了...待细化

    一个页面从输入URL到页面加载完成发生了... 1.查找浏览器缓存 2.寻址:DNS解析 查找该域名对应的IP地址, 如果需要重定向(301),则再次发起请求 3. 进行HTTP协议会话 4.客户端发 ...

  5. 一个页面从输入URL到页面加载显示完成的详细过程

    下面以访问baidu页面来做一个过程分析 输入 URL:http://www.baidu.com DNS 域名解析 计算机无法识别域名,计算机与计算机之间要想进行通信,必须通过ip地址用来定位该计算机 ...

  6. 一个页面从输入url到页面加载完成究竟经历了些什么

    本人经参考谢希仁著<计算机网络(第 5版)>.<HTTP权威指南>和网络上关于浏览器渲染原理的介绍,结合自己理解,整理出以下结论,如有不正确或者不完善之处欢迎指正: 当用户在浏 ...

  7. 8.一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?

    注:这题胜在区分度高,知识点覆盖广,再不懂的人,也能答出几句, 而高手可以根据自己擅长的领域自由发挥,从URL规范.HTTP协议.DNS.CDN.数据库查询. 到浏览器流式解析.CSS规则构建.lay ...

  8. 一个页面从输入URL 到页面加载显示完成,这个过程中都发生了什么?

    1.当发送一个URL请求时,浏览器会开启一个线程来处理这个请求,同时在远程DNS服务器上启动一个DNS查询,解析获取网址的IP地址:2.浏览器与远程Web服务器通过TCP三次握手协商来建立一个TCP/ ...

  9. 一个网页从输入URL到页面加载完成的过程中都发生了什么事情?

    这是一个前端的经典面试题,很多大公司面试时都会被问及,涉及的面也是非常多. 一般会经历以下几个过程: 1.首先,在浏览器地址栏中输入url 2.浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中 ...

随机推荐

  1. Css 进阶篇

    一.Css2 高阶知识(常用) 1. css 优先权 优先权(从低到高) 浏览器缺省设置 外部样式表 内部样式表(位于 <head> 标签内部) 内联样式(在 HTML 元素内部) 因此, ...

  2. Linux实战问题解决方案(1):Could not get lock

    环境: Ubuntu12.04 问题描述: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily un ...

  3. GJM :C#开发 异步处理是目的,多线程是手段

    但是BeginAccept和EndAccept不就是system.net.socket封装好的异步socket吗如果用多线程来实现的话那就不叫异步了吧 1.再次强调,异步是目的,多线程是手段. 所谓异 ...

  4. (原) 2.3 Curator使用

    本文为原创文章,转载请注明出处,谢谢 Curator使用 1.jar包引入,演示版本为2.6.0,非maven项目,可以下载jar包导入到项目中 <dependency> <grou ...

  5. CSS 优先级判断

    在面试中被问到这个问题 来记录下  发现自己之前之所以会忘记还是缺少理解的记忆 参考 CSS权威指南 一个CSS选择器的特殊性值表述为4个部分  0 0 0 0 对于选择器中给定的各个ID的属性值   ...

  6. VS2010中整理代码快捷键

    快捷键:Ctrl+A Ctrl+K Ctrl+F的三个的组合2015-11-08

  7. MyEclipse快捷键大全

    MyEclipse 快捷键1(CTRL)Ctrl+1 快速修复Ctrl+D: 删除当前行Ctrl+Q 定位到最后编辑的地方Ctrl+L 定位在某行Ctrl+O 快速显示 OutLineCtrl+T 快 ...

  8. 列表屏幕(List Screen)

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  9. ABAP程序互调用:SUBMIT、CALL TRANSACTION、LEAVE TO TRANSACTION

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  10. Android开发学习——android体系结构

    Android的体系结构采用了分层架构的思想, 从上层到底层共包括四层,分别是应用程序程序层.应用框架层.系统库和Android运行时和Linux内核. 一 应用程序层 该层提供一些核心应用程序包,例 ...