当我们输入URL,按下回车发生了什么? 这个题目很俗套- -但是是面试经常出现的题目了。今天听尼古拉斯•屌•大斌哥介绍关于从URI到浏览器呈现给我们页面发生了什么。感觉收获颇多。索性就翻阅了一些其他资料。在此总结下。这一晚上也算是没白白浪费。

当我们输入URL,发生了什么?

用一个例子来说明把。当我们打开 https://datura900607.github.io/home-automation/  这个网页的时候发生了什么?

通过URI定位到主机。

当我们在浏览器输入url后,浏览器通过DNS服务器,将网站中的URl中的主机域名解析为,web服务器中所对应的IP地址。顺序差不多是:

  • 先在浏览器缓存中查询,如果浏览器缓存中有就直接使用。
  • 浏览器缓存中找不到 在系统缓存中查询。
  • 系统缓存中没有在路由器缓存中查询。
  • 路由器找不到在web服务器中查询,直到找到这个IP地址。
打包HTTP请求

好了,经过一番查询,我们找到了我家居网站的IP地址:151.101.100.133:443 这是我们打包的HTTP请求:

 
通过TCP协议,向服务器发送请求

通过TCP协议与Web服务器创建连接。(俗称三次握手),向服务器发送请求

web服务器接收请求,交给相关进程处理

这里要根据后台语言不同而分情况处理,我这个是HTML类型文件。web服务器接收请求后 找到服务器上相对应的html文件(一般是index.html)
如果后台语言是PHP类型,则web服务器在接收到用户的请求后将请求转交给PHP应用服务器来处理,(web服务器本身不能处理PHP动态语言文件)

服务器响应请求,通过TCP协议回传响应

这里因为此家居网站就是一个静态HTML。就直接找到HTML文件就会通过TCP协议回传了。如果是php文件。则还需要PHP应用服务器将PHP文件,翻译成HTML静态代码,传回Web服务器,然后再通过TCP协议回传响应。这是回传的响应head截图

 
浏览器接收响应,开始下载并渲染,将页面呈现在我们面前
  1. 解析HTML生成DOM树,
  2. 解析CSS文件生成CSSOM树,并解析Javascript代码
  3. CSS和DOM组合形成渲染树,
  4. 进行布局,在浏览器中绘制渲染树中节点的属性(位置,宽度,大小等)
  5. 绘制元素,绘制各个节点的可视属性(颜色背景等,此时可能会形成多个图层)
  6. 合并图层,将页面呈现给用户面前

最新文章

  1. C++引用详解
  2. Eclipse中使用tomcat 8服务器初级教程
  3. java程序(一)----HashMap同时获取键值
  4. Mysql中的count()与sum()区别
  5. oracle记录解锁
  6. LinkedList类
  7. From MSI to WiX, Part 8 - Major Upgrade, by Alex Shevchuk
  8. Linux 配置文件
  9. FreeModbus 精简版本(Only RTU) for M128 (Modbus Slave)
  10. ySQL for mac使用记录
  11. 浅析busybox-1.12.0中ash的脚本命令局限性
  12. navcat无法远程连接mysql数据库解决办法
  13. 搭建一个交互式的前端构建环境.md
  14. iOS让软键盘消失的简单方法
  15. 尚学堂马士兵struts2 课堂笔记(一)
  16. PHP面向对象和面向过程
  17. Python——Selenium & Chrome Driver配置
  18. C#组件系列——又一款日志组件:Elmah的学习和分享
  19. 推荐:7 月份值得一看的 Java 技术干货!
  20. lzstring

热门文章

  1. Java使用RandomAccessFile读写文件
  2. ES6学习笔记第一天
  3. 原生js实现多个随机大小颜色位置速度小球的碰壁反弹
  4. CentOS 7 安装 LNMP 环境(PHP7 + MySQL5.7 + Nginx1.10)
  5. H3C 配置NAT Server
  6. [转]VsCode搭建Java开发环境(Spring Boot项目创建、运行、调试)
  7. H3C RIP可选配置
  8. H3C 主机名与IP地址映射需求
  9. 原生js添加鼠标事件的兼容性写法
  10. 天使玩偶/SJY摆棋子