本文浏览器以谷歌浏览器举例说明,开始之前,你需要知道目前谷歌浏览器是多进程浏览器,进程包括网路进程,渲染进程,浏览器进程等多个进程(以后有空会分享一个谷歌浏览器的发展史),那么到底这个过程都发生了什么呢?且听我一步一步分析~首先这个过程可以从宏观和微观两个方面着手。 宏观:大概只有两步:导航流程-->渲染流程;本文主要叙述导航阶段。 微观:大概有25步左右,但是当遇到特殊情况,比如出现重定向,缓存,浏览器请求下载资源的时候,会少于15步。

1,首先当用户在地址栏输入信息的时候,浏览器会首先辨认你搜索的是一个关键字的索引还是一个网址,如果是一个索引内容的时候,就会把你的关键字+默认的搜索引擎合成新的URL;比如我在地址栏输入shanyeqiaozhi就会出现这样的拼接URL:google.com/searchq=shanyiqiaozhi&oq=shanyiqiaozhi&aqs=谷歌..69i57.3032j0j1&sourceid=谷歌&ie=UTF-8。 但是当你在地址栏直接搜索baidu.com的时候,这样的搜索符合URL规则,浏览器会根据URL协议,在baidu.com的前面加上协议变成合法的URL。(https://www.baidu.com)。

2,当你输入完内容之后,点击搜索或者按下回车键,浏览器前进后退箭头的后面那个循环标志会动起来,告诉页面开始进入loading状态,但是页面不会马上呈现新的页面,因为新的页面的相应数据并没有获取到。

3,此时,浏览器开始发起请求,浏览器进程构建请求头信息,通过进程间(上述的多进程)的通信(IPC)将URL请求发送到浏览器的网络进程中。

4,网络进程得到URL,首先会去本地缓存中查找是否有以前的缓存文件,如果找到,网络进程会拦截请求,停止操作,直接返回缓存数据。否则的话,会继续发送请求。

5,发送请求的第一步,请求DNS返回域名对应的IP和端口号,如果DNS数据缓存服务器也对当前的域名信息进行过缓存(如127.0.0.1一般代表localhost本地域名)。否则发起请求根据域名分析出来的IP和端口,如果没有端口,一般http默认的端口是80,https默认的端口是443。如果是https请求,还会进行TLS链接保证数据传输安全。

6,接下来会进入TCP链接,但是谷歌有个机制,在同一个域名之下,同时最多能建立6个TCP连接,如果当前的请求数量少于6个,会直接进行TCP连接,否则的话,会等待连接。

7,这一步涉及到底层传输数据,简而言之,TCP进行三次握手建立连接,此刻,http请求会加上TCP头部---包括源端口号,目的程序端口号和用于检验数据完整性的序号,向下传输,到达网络层,网络层在数据包上加上IP头部---包括源IP地址和目的IP地址,继续向下传输到底层,底层通过物理网络传输给目的服务器主机,目的服务器主机的网络层接收到了数据包,解析处IP地址,识别出数据部分,将解开的数据包向上传输到传输层,目的服务器的传输层接受到数据后,解析出TCP头部,识别端口,将解开的数据包向上传输到应用层,应用层HTTP解析请求头和请求体,如果需要重定向(后端可以重定向响应地址)HTTP直接返回HTTP响应数据的状态的code值为300/301,同时在请求头的location字段中附加重定向地址,浏览器则根据code和location进行重定向操作;如果不是重定向,首先服务器会根据请求头的if-none-match的值来判断请求资源是否被更新。如果没有更新,就返回304状态码,为了告诉浏览器以前的缓存数据你可以使用,就不用返回给你数据了,否则返回新数据,并且设置code为200。如果浏览器想让浏览器进行缓存数据的话,就在响应的头部加上字段:Cache-Contorl:Max-age=2000。此刻,响应数据又顺着应用层---传输层---网络层---底层(IP寻址)---网络层---传输层---应用层的顺序返回到浏览器的网络进程中。

8,网络进程此刻根据响应头的Content-Type字段进行判断响应数据的类型,如果是字节流类型,就将该请求交给下载管理器,该导航流程就结束了,不再进行。如果是HTML类型,就通知浏览器进程获取到文档进行渲染。

9,浏览器进程获取到通知,根据当前页面是否在同一站点(同根域名同协议)来决定是否开启新的渲染进程。如果是则复用父站点的渲染进程,否则,开启新的。(此刻完成渲染准备阶段,开始数据交流)

10,浏览器会发出“提交文档”的信息给渲染进程,渲染进程收到信息后,会和网络进程建立数据传输的“管道”直接进行数据的传输,文档数据传输完成后,渲染进程会返回“确认提交”的信息给浏览器进程。

11,浏览器收到“提交文档”之后,会更新浏览器的页面状态,包括了安全状态,地址栏的URL,前进后退的历史状态,并更新web页面,但此时web页面是空白页面。

12,至此,导航流程就算结束,开始进行到渲染阶段......

至于渲染阶段,渲染进程如果解析html文档,如何识别css文件进行排列页面。今日天色已晚,我们下回分解!

版权申明:本站文章均来自网络,如有侵权,请联系01056159998 邮箱:itboby@foxmail.com

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

谷歌浏览器服务器协议url,谷歌浏览器在地址栏输入URL到页面展示时中间发生了什么?...相关推荐

  1. 从浏览器地址栏输入url到显示页面的步骤

    从浏览器地址栏输入url到显示页面的步骤(以HTTP为例) - 在浏览器地址栏输入URL - 浏览器查看缓存,如果请求资源在缓存中并且新鲜,跳转到转码步骤     - 如果资源未缓存,发起新请求   ...

  2. 从浏览器地址栏输入url到请求返回发生了什么(深问)

    问题: 从浏览器地址栏输入url到请求返回发生了什么 你一看这种烂掉牙的问题,小case,但996面试大佬由此延展的问题已经远远超越了这个问题本身了,不信你就接着看. 我回答了首先会进行 url 解析 ...

  3. 地址栏输入URL到显示页面的过程

    前言 从地址栏输入URL到显示页面都发生了什么?这是一道面试经常会考的面试题.那么下面我们就来探讨一下从你输入URL后到响应,都经历了哪些过程. 1.DNS解析 我们在用户PC中使用网页浏览器来访问外 ...

  4. 【重难点】【计算机网络 01】OSI 七层模型和 TCP/IP 四层模型、IP 地址分为哪几类、ping 的原理、从浏览器地址栏输入 URL 到显示网页的过程、什么是 socket

    [重难点][计算机网络 01]OSI 七层模型和 TCP/IP 四层模型.IP 地址分为哪几类.ping 的原理.从浏览器地址栏输入 URL 到显示网页的过程.什么是 socket 文章目录 [重难点 ...

  5. jquery 当页面图片加载之后_在浏览器地址栏输入地址到页面渲染完成发生了什么?(下)...

    上一篇讲了前三步,本篇从第四步开始.下面是正文: 四.进行tcp三次握手,建立tcp连接. 简述一下,第三步我们找到了目标ip,并获得了服务器ip的mac地址.此时浏览器就会请求和服务器连接,用来传输 ...

  6. 后端数据成功返回 页面不渲染_在浏览器地址栏输入地址到页面渲染完成发生了什么?(下)...

    上一篇讲了前三步,本篇从第四步开始.下面是正文: 四.进行tcp三次握手,建立tcp连接. 简述一下,第三步我们找到了目标ip,并获得了服务器ip的mac地址.此时浏览器就会请求和服务器连接,用来传输 ...

  7. 从浏览器地址栏输入url到请求返回发生了什么?

    1.进行域名解析.根据DNS进行IP查找 URL 常见的RUL是这样的:http://www.baidu.com,这个域名由三部分组成:协议名.域名.端口号. 除此之外URL还会包含一些路径.查询和其 ...

  8. 浏览器地址栏输入url以后发生了什么

    在浏览器输入url后会发生的过程: 1.DNS对域名进行解析: 2.建立TCP连接(三次握手): 3.发送HTTP请求: 4.服务器处理请求: 5.返回响应结果: 6.关闭TCP连接(四次挥手): 7 ...

  9. 浏览器地址栏输入url到显示主页的过程

    面试回答: 当用户在浏览器地址栏输入地址后,敲击回车后,首先由DNS解析,查找域名对应的IP地址,然后,与服务器通过三次握手,建立TCP连接,向服务器发送HTTP请求,服务器处理请求,返回网页内容,浏 ...

最新文章

  1. 《OpenCV3编程入门》学习笔记2 启程前的认知准备
  2. UI培训分享:UI设计行业常见术语有哪些?
  3. 语言舒尔特方格程序_注意力训练神器——舒尔特方格(成人、孩子均适用)
  4. 梯度下降法的三种形式-BGD、SGD、MBGD
  5. springmvc和servlet在上传和下载文件(保持文件夹和存储数据库Blob两种方式)
  6. Codeforces 914D - Bash and a Tough Math Puzzle 线段树,区间GCD
  7. Windows配置tomcat环境
  8. 【离散数学】纠错码基本理论
  9. 飞鸽传书写每行都认认真真
  10. 解决使用jQuery采用append添加的元素事件无效的方法
  11. Javascript中call()和apply()的用法 ----1
  12. (三)映射对象标识符(OID)
  13. NLPIR文本分析工具的功能和特色介绍
  14. 计算机在金属材料中的应用论文,浅谈金属材料在汽车轻量化中的应用论文
  15. Pytorch torch.add() torch.add_() 用法
  16. windows的hosts文件位置
  17. 数据库系统的基本组成
  18. GO函数内部程序执行顺序
  19. 滑铁卢大学计算机学什么,为什么来滑铁卢大学学习数学和计算机
  20. Symantec赛门铁克强制型SSL服务器证书_网站安全SSL数字证书

热门文章

  1. AndroidStudio+ideasmali动态调试smali汇编
  2. 短信微信等消息发送系统的架构设计
  3. JS--Console.log()详解
  4. 软件工程 敏捷的酒后问答
  5. 为什么链接不上mysql数据库_java链接不上数据库,怎么解决!
  6. python博客项目评论_Python 爬虫入门——小项目实战(自动私信博客园某篇博客下的评论人,随机发送一条笑话,完整代码在博文最后)...
  7. cassss服务未启动_电梯启动死机故障处理方法
  8. linux脚本多个条件比较大小,shell脚本-比较两个整数大小
  9. php ckeditor 配置,Laravel5.6框架使用CKEditor5相关配置详解
  10. python numpy库安装winerror5_详解idea从git上拉取maven项目详细步骤