1. 在浏览器地址栏输入URL

  2. 浏览器查看缓存,如果请求资源在缓存中并且新鲜,跳转到转码步骤

    • HTTP1.0提供Expires,值为一个绝对时间表示缓存新鲜日期

    • HTTP1.1增加了Cache-Control: max-age=,值为以秒为单位的最大新鲜时间

    1. 如果资源未缓存,发起新请求

    2. 如果已缓存,检验是否足够新鲜,足够新鲜直接提供给客户端,否则与服务器进行验证。

    3. 检验新鲜通常有两个HTTP头进行控制ExpiresCache-Control

  3. 浏览器解析URL获取协议,主机,端口,path

  4. 浏览器组装一个HTTP(GET)请求报文

  5. 浏览器获取主机ip地址,过程如下:

    1. 浏览器缓存

    2. 本机缓存

    3. hosts文件

    4. 路由器缓存

    5. ISP DNS缓存

    6. DNS递归查询(可能存在负载均衡导致每次IP不一样)

  6. 打开一个socket与目标IP地址,端口建立TCP链接,三次握手如下:

    1. 客户端发送一个TCP的SYN=1,Seq=X的包到服务器端口

    2. 服务器发回SYN=1, ACK=X+1, Seq=Y的响应包

    3. 客户端发送ACK=Y+1, Seq=Z

  7. TCP链接建立后发送HTTP请求

  8. 服务器接受请求并解析,将请求转发到服务程序,如虚拟主机使用HTTP Host头部判断请求的服务程序

  9. 服务器检查HTTP请求头是否包含缓存验证信息如果验证缓存新鲜,返回304等对应状态码

  10. 处理程序读取完整请求并准备HTTP响应,可能需要查询数据库等操作

  11. 服务器将响应报文通过TCP连接发送回浏览器

  12. 浏览器接收HTTP响应,然后根据情况选择关闭TCP连接或者保留重用,关闭TCP连接的四次握手如下:

    1. 主动方发送Fin=1, Ack=Z, Seq= X报文

    2. 被动方发送ACK=X+1, Seq=Z报文

    3. 被动方发送Fin=1, ACK=X, Seq=Y报文

    4. 主动方发送ACK=Y, Seq=X报文

  13. 浏览器检查响应状态吗:是否为1XX,3XX, 4XX, 5XX,这些情况处理与2XX不同

  14. 如果资源可缓存,进行缓存

  15. 对响应进行解码(例如gzip压缩)

  16. 根据资源类型决定如何处理(假设资源为HTML文档)

  17. 解析HTML文档,构件DOM树,下载资源,构造CSSOM树,执行js脚本,这些操作没有严格的先后顺序,以下分别解释

  18. 构建DOM树:

    1. Tokenizing:根据HTML规范将字符流解析为标记

    2. Lexing:词法分析将标记转换为对象并定义属性和规则

    3. DOM construction:根据HTML标记关系将对象组成DOM树

  19. 解析过程中遇到图片、样式表、js文件,启动下载

  20. 构建CSSOM树:

    1. Tokenizing:字符流转换为标记流

    2. Node:根据标记创建节点

    3. CSSOM:节点创建CSSOM树

  21. 根据DOM树和CSSOM树构建渲染树:

    1. 从DOM树的根节点遍历所有可见节点,不可见节点包括:1)script,meta这样本身不可见的标签。2)被css隐藏的节点,如display: none

    2. 对每一个可见节点,找到恰当的CSSOM规则并应用

    3. 发布可视节点的内容和计算样式

  22. js解析如下:

    1. 浏览器创建Document对象并解析HTML,将解析到的元素和文本节点添加到文档中,此时document.readystate为loading

    2. HTML解析器遇到没有async和defer的script时,将他们添加到文档中,然后执行行内或外部脚本。这些脚本会同步执行,并且在脚本下载和执行时解析器会暂停。这样就可以用document.write()把文本插入到输入流中。同步脚本经常简单定义函数和注册事件处理程序,他们可以遍历和操作script和他们之前的文档内容

    3. 当解析器遇到设置了async属性的script时,开始下载脚本并继续解析文档。脚本会在它下载完成后尽快执行,但是解析器不会停下来等它下载。异步脚本禁止使用document.write(),它们可以访问自己script和之前的文档元素

    4. 当文档完成解析,document.readState变成interactive

    5. 所有defer脚本会按照在文档出现的顺序执行,延迟脚本能访问完整文档树,禁止使用document.write()

    6. 浏览器在Document对象上触发DOMContentLoaded事件

    7. 此时文档完全解析完成,浏览器可能还在等待如图片等内容加载,等这些内容完成载入并且所有异步脚本完成载入和执行,document.readState变为complete,window触发load事件

  23. 显示页面(HTML解析过程中会逐步显示页面)

从浏览器地址栏输入url到显示页面的步骤的更多相关文章

  1. 从浏览器地址栏输入url到显示页面的步骤(以HTTP为例)

    在浏览器地址栏输入URL 浏览器查看缓存,如果请求资源在缓存中并且新鲜,跳转到转码步骤 如果资源未缓存,发起新请求 如果已缓存,检验是否足够新鲜,足够新鲜直接提供给客户端,否则与服务器进行验证. 检验 ...

  2. HTTP:地址栏输入url到显示页面的步骤

    在浏览器地址栏输入URL 浏览器查看缓存,如果请求资源在缓存中并且新鲜,跳转到转码步骤 如果资源未缓存,发起新请求 如果已缓存,检验是否足够新鲜,足够新鲜直接提供给客户端,否则与服务器进行验证. 检验 ...

  3. 从地址栏输入url到显示页面都发生了什么?

    作为一个软件开发者,你一定会对网络应用如何工作有一个完整的层次化的认知,同样这里也包括这些应用所用到的技术:像浏览器,HTTP,HTML,网络服务器,需求处理等等. 本文将更深入的研究当你输入一个网址 ...

  4. 在浏览器中输入url地址 -> 显示主页的过程

    -来自<图解HTTP> 最近在进行前端面试方面的一些准备,看了网上许多相关的文章,发现有一个问题始终绕不开: 在浏览器中输入URL到整个页面显示在用户面前时这个过程中到底发生了什么.仔细思 ...

  5. 详解从浏览器地址栏输入URL到页面显示的步骤

    版本1(基础版本) 步骤1:浏览器根据请求的 URL 交给 DNS 域名解析,找到真实 IP ,向服务器发起请求: 步骤2:服务器交给后台处理完成后返回数据,浏览器接收⽂件( HTML.JS.CSS ...

  6. 计算机网络【6】—— 从浏览器输入URL到显示页面发生了什么

    当在浏览器地址栏输入网址,如:www.baidu.com后浏览器是怎么把最终的页面呈现出来的呢?这个过程可以大致分为两个部分:网络通信和页面渲染. 一.网络通信 互联网内各网络设备间的通信都遵循TCP ...

  7. 在浏览器地址栏输入URL,按下回车后究竟发生了什么?

    1.DNS 在浏览器中输入URL后,首先要进行DNS解析,DNS解析的顺序为: 浏览器缓存 本地hosts文件 系统缓存 路由器缓存 DNS服务器迭代查询 2.发送请求 通过DNS得到目标的IP地址后 ...

  8. 从输入URL到显示页面的过程分析

    作为一个软件开发者,你一定会对网络应用如何工作有一个完整的层次化的认知,同样这里也包括这些应用所用到的技术:像浏览器,HTTP,HTML,网络服务器,需求处理等等. 本文将更深入的研究当你输入一个网址 ...

  9. 浏览器地址栏输入url回车之后发生了些什么

    1.输入地址 当我们开始在浏览器中输入网址的时候,浏览器其实就已经在智能的匹配可能得 url 了,他会从历史记录,书签等地方,找到已经输入的字符串可能对应的 url,然后给出智能提示,让你可以补全ur ...

随机推荐

  1. kali工具的总结

    由于篇幅有限,只列举部分,ps:第一次发有什么不对的 还望各位大大指正 nc 瑞士军刀 [v1.10-41] 使用格式: nc [-参数] 主机名 端口[s] [端口] … 侦听入站: nc -l - ...

  2. 【wifi移植 2】 移植wpa_supplicant

    参考文章: http://bbs.eeworld.com.cn/thread-447273-1-1.html(加精作品) 1. 下载源码 下载wpa_supplicant-2.2.tar(openss ...

  3. 【转】关于IAP与APP互相跳转的实现

    关于IAP与APP互相跳转的实现 首先,在您动手做这个实验之前,先要弄清除咱俩的软硬件有什么不同: 1. 我的CPU是STM32F103ZET6,里面有512K的FLASH,您的CPU如果是其它类型, ...

  4. deep_learning_初学neural network

    神经网络——最易懂最清晰的一篇文章 神经网络是一门重要的机器学习技术.它是目前最为火热的研究方向--深度学习的基础.学习神经网络不仅可以让你掌握一门强大的机器学习方法,同时也可以更好地帮助你理解深度学 ...

  5. 适配器 1、ArrayAdapter 2.SimpleAdapter

    1.ArrayAdapter(数组适配器):用于绑定格式单一的数据.数据源:可以是集合或数组 public class MainActivity extends AppCompatActivity { ...

  6. 文件浏览:ls&file

    文件浏览主要完成的功能是列出当前目录或指定目录下文件的文件名称以及一些基本的资料. Linux的命令是区分大小写的. 1.  ls:列出当前目录(默认)或指定目录下所有文件,并按字典序排序 语法:ls ...

  7. Nginx的入门

    Nginx 入门 一.正向代理和反向代理 1.正向代理 正向代理(forward proxy) ,一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并制定目标( ...

  8. java 实现链表

    public class MyList { Entry head; class Entry { Object data; Entry next; public Entry(Object data) { ...

  9. Javac可以编译,Java显示找不到或无法加载主类

    运行时候加入完整包名.

  10. Js基础知识(五) - 前端性能优化总结

    前端性能优化总结 资源优化 缓存 最好的资源优化就是不加载资源.缓存也是最见效的优化手段.说实话,虽然说客户端缓存发生在浏览器端,但缓存主要还是服务端来控制,与我们前端关系并不是很大.但还是有必要了解 ...