从输入 URL 到浏览器接收的过程中发生了什么事情?

What really happens when you navigate to a URL

上面两篇文章都解读的很好,值得阅读。

接下来在总结一下这个过程:

1、首先,会查询缓存,如果缓存存在的话则直接响应,否则继续下面过程;

2、当发送一个URL请求时,不管这个URL是Web页面的URL还是Web页面上每个资源的URL,浏览器都会开启一个线程来处理这个请求,同时在远程DNS服务器上启动一个DNS查询。这能使浏览器获得请求对应的IP地址。DNS查找过程如下:浏览器缓存 、系统缓存、路由器缓存、ISP DNS 缓存、递归搜索

3、浏览器与远程`Web`服务器通过`TCP`三次握手协商来建立一个`TCP/IP`连接。该握手包括一个同步报文,一个同步-应答报文和一个应答报文,这三个报文在 浏览器和服务器之间传递。该握手首先由客户端尝试建立起通信,而后服务器应答并接受客户端的请求,最后由客户端发出该请求已经被接受的报文。

  4、一旦`TCP/IP`连接建立,浏览器会通过该连接向远程服务器发送`HTTP`的`GET`请求。远程服务器找到资源并使用HTTP响应返回该资源,值为200的HTTP响应状态表示一个正确的响应。

5、此时,`Web`服务器提供资源服务,客户端开始下载资源。如果资源可缓存则存入缓存。

  6、响应返回后,便进入了我们关注的前端模块,浏览器决定如何处理这些响应(例如,它是HTML页面,一张图片,一段音乐)。简单来说,浏览器会解析`HTML`生成`DOM Tree`,其次会根据CSS生成CSS Rule Tree,而`javascript`又可以根据`DOM API`操作`DOM`

最新文章

  1. C# 对sharepoint 列表的一些基本操作,包括添加/删除/查询/上传文件给sharepoint list添加数据
  2. SQL SERVER连接、合并查询
  3. C/C++代码中的笔误
  4. java和python根据对象某一个属性排序
  5. <一>SQL优化1-4
  6. InnoDB关键特性之doublewrite
  7. Response.Redirect("");Server.Transfer("")跳转页面的区别
  8. 存储过程中“Select Top 变量”的问题如何解决
  9. 求解:C#.Net 远程方法调用失败 (Exception from HRESULT: 0x800706BE)
  10. jQuery Easy UI Droppable(放置)组件
  11. Spring之AOP术语
  12. python库termcolor用法
  13. 撸一撸Spring Cloud Ribbon的原理
  14. JS闭包作用域解析
  15. 理解Linux文件权限
  16. 在docker宿主机上查找指定容器内运行的所有进程的PID
  17. python3 中对arrow库的总结(转发)
  18. android设置主mic/副mic录音
  19. Databases: MySQL tRIGger--chinese character-set php
  20. ASE加解密算法详细介绍

热门文章

  1. 关于Linux的内存(free -m)
  2. cmd chcp命令切换字符格式UTF8
  3. Windows 让cmd启动的程序在后台运行
  4. c++vector(入门级)
  5. C# JIT & AOT
  6. OwinStartupAttribute
  7. shutdown命令用法
  8. [Unity] 精灵动画制作中需要注意的一些问题
  9. 浅谈JavaScript中闭包
  10. php二维数组排序的处理