让前端飞web之路

【八】浏览器:一个浏览器是如何工作的?(阶段一)

2019-02-16  本文已影响0人  alanwhy

对浏览器的实现者来说,他们做的事情,就是把一个URL变成一个屏幕上显示的网页。

这个过程是这样的:
1.浏览器首先使用HTTP 协议或者HTTPS 协议,向服务端请求页面
2.把请求回来的HTML代码经过解析,构建成DOM树
3.计算DOM树上的CSS属性
4.最后根据CSS属性对元素逐个进行渲染,得到内存中的位图
5.一个可选的步骤是对位图进行合成,这会极大地增加后续绘制的速度
6.合成之后,再绘制到界面上


image.png

从HTTP请求回来,就产生了流式的数据,后续的DOM树构建、CSS计算、渲染、合成、绘制,都是尽可能地流式处理前一步的产出:即不需要等到上一步骤完全结束,就开始处理上一步的输出,这样我们在浏览网页时,才会看到逐步出现的页面。

HTTP协议

浏览器首先就是根据URL把数据取回来,取回数据使用的是HTTP协议,实际上还有DNS查询。

HTTP标注是由IETF组织制定,跟HTTP相关的标准有两份:

HTTP 协议是基于TCP协议出现的,对TCP协议来说,TCP协议是一 条双向的通讯通道,HTTP在TCP的基础上,规定了Request- Response 的模式。这个模式决定了通讯必定是由浏览器端首先发起的。

大部分情况下,浏览器的实现者只需要用一个TCP库,甚至一个现成的HTTP库就可以搞定浏览器的网络通讯部分。HTTP 是纯粹的文本协议,它是规定了使用TCP协议来传输文本格式的一个应用层协议。

HTTP协议格式

HTTP协议格式.png

在这些部分中,path是请求的路径完全由服务端来定义,没有很多的特别内容;而version几乎都是固定字符串;response body是我们最熟悉的HTML。

HTTP Method(方法)

先说一下request line里面的方法部分。表示我们此次HTTP请求希望执行的操作类型,方法有以下几种定义:

浏览器通过地址栏访问页面都是GET方法。
表单提交产生POST方法。
HEAD跟GET类似,只返回请求头,多数由JS发起。
PUT和DELETE分别表示添加资源和删除资源。
CONNECT现在多用于HTTPS和WebSocket。
OPTIONS和TRACE一般用于调试,多数线上服务都不支持。

HTTP Status code(状态码)和Status test(状态文本)

常见的状态码:

HTTP Head(HTTP头)

HTTP头可以看作一个键值对。原则上,HTTP头也是一种数据,可以自由定义HTTP头和值。

说几个重点,先看看Request Header。

Request Header.png

再看下Response Header。

Response Header.png
HTTP Request Body

主要用于提交表单场景,常见的body格式:

HTTPS

在HTTP协议的基础上,HTTPS和HTTP2规定了更复杂的内容,但是基本保持了HTTP的设计思想,即:使用Request-Response模式。

HTTPS的两个作用:

HTTPS的标准也是由RFC规定的,详情链接:https://tools.ietf.org/html/rfc2818

HTTPS是使用加密通道来传输HTTP的内容。但是HTTPS首先与服务端建立一条TLS加密通道。TLS构建与TCP协议之上,它实际上是对传输的内容做一次加密,所以从传输内容上看,HTTPS和HTTP没有任何区别。

HTTP2

详情链接:https://tools.ietf.org/html/rfc7540

HTTP2.0最大的改进有两点:

服务端推送能够在客户端发送第一个请求到服务端时,提前把一部分内容推送给客户端,放入缓存当中,这可以避免客户端请求顺序带来的并行度不高,从而导致的性能问题。

TCP连接复用,则使用同一个TCP连接来传输多个HTTP请求,避免了TCP连接建立时的三次握手开销,和初建TCP连接时传输窗口小的问题。

参考原文:浏览器:一个浏览器是如何工作的?(阶段一)

上一篇下一篇

猜你喜欢

热点阅读