前端知识点之浏览器是如何工作的?

一、首先提两个问题

1. 一个页面从输入URL到页面加载完成,这个过程都发生了什么?

  1. 当发送一个URL 请求,不管这个页面是URL web 页面的URL 还是Web 页面上每个资源的URL ,浏览器都会开启一个线程去处理这个请求,同时在远程DNS 服务器上启动一个DNS查询,使得浏览器获得对应的ip地址
  2. 浏览器和远程服务器通过TCP 三次握手建立一个TCP/IP 连接。(该握手包括一个同步报文,一个同步-应答报文,一个应答报文,这三个报文在浏览器和服务器之间传递)该握手首先由客户端尝试建立通信,然后服务器应答并接受客户端的请求,最后由客户端发出该请求已经被接受的报文
  3. 一旦TCP/IP 连接建立,浏览器就会通过该链接向远程服务器发送http 的get 请求。远程服务器找到资源并使用http 响应返回该资源,值为200 的HTTP 响应状态表示一个正确的响应
  4. web 服务器提供该资源服务,客户端开始下载资源

2. 如何把一个URL 变成一个屏幕上显示的网页?

  1. 浏览器首先使用http 协议或者https 协议,向服务器请求页面
  2. 把请求回来的HTML 代码经过解析,构建成DOM 树
  3. 计算dom 树上的css 属性
  4. 最后根据css属性对元素逐个进行渲染,得到内存中的位图(点阵图,是由像素的单个点组成的,这些点可以进行不同的排列和染色构成图样)
  5. 一个可选的步骤是对位图进行合成,这会极大的增加后续绘制的速度
  6. 合成之后,再绘制到界面上

需要知道的是:
从http请求回来开始,这个过程就并非一般想象中的一步做完再做下一步,而是一条流水线

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

二、网络通讯

1. HTTP

  • http协议是基于tcp协议出现的,对于tcp协议来说,tcp是一种双向的通讯信道
  • http 在tcp 的基础上,规定了Request-Response 的模式。这个模式决定了通讯必定是由浏览器首先发起的
  • http 协议是纯粹的文本协议,规定了使用tcp 协议来传输文本格式的一个应用层协议
    在这里插入图片描述
  1. 请求部分:第一行被称作 request line,分为三个部分:http method(请求方法),请求路径和请求的协议和版本
GET / HTTP/1.1
Host: time.geekbang.org
  1. 响应部分:第一行被称作response line ,分为三个部分:协议和版本,状态码,状态文本
HTTP/1.1 301 Moved Permanently
Date: Fri, 25 Jan 2019 13:28:12 GMT
Content-Type: text/html
Content-Length: 182
Connection: keep-alive
Location: https://time.geekbang.org/
Strict-Transport-Security: max-age=15768000

<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>openresty</center>
</body>
</html>

  1. 在 request line/response line 之后,是请求头/响应头,这些头由若干行组成,每行是用冒号分割的名称和值
  2. 在头之后,以一个空行(两个换行符)为分割,是请求体/响应体,请求体可能包含文件或者表单数据,响应体则是html 代码

2. HTTP method

  • GET 浏览器通过地址栏访问页面都是get 方法
  • POST 表单提交
  • HEAD 跟get类似,只是返回请求头
  • PUT 添加资源
  • DELETE 删除资源
  • CONNECT 用于https 和websocket
  • OPTION 用于调试,多数线上服务器不支持
  • TRACE用于调试,多数线上服务器不支持

3. HTTP Status code(状态码)和 Status text(状态文本)

response line 的状态码以及所表达的意义

  • 1xx 临时回应,表示客户端请继续(通常情况下,1xx的状态码都会被浏览器 http库直接处理掉了,不会让上层知道)
  • 2xx 请求成功 (网页请求成功的标志)
    • 200 请求成功
  • 3xx 表示请求的目标有变化,希望客户端做进一步处理
    • 301 永久性重定向(实际上,301更接近一种报错,提示客户端下次别来了)
    • 302 临时重定向
    • 304 客户端缓存没有更新(产生这个状态的前提是:客户端本地已经有缓存的版本了,并在请求中告诉了服务端,当服务端发现没有更新的时候,就会返回一个不含body 的304状态)
  • 4xx 客户端请求错误
    • 403 无权限
    • 404 表示请求页面不存在
  • 5xx 服务端错误
    • 500 服务端错误
    • 503 服务端暂时性错误,可以一会再试

4. HTTP HEAD

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

  • 请求头
    在这里插入图片描述
  • 响应头
    在这里插入图片描述

5. HTTP Request Body

http 请求的body 主要用于提交表单场景。(一般情况下,http请求的body 是比较自由的格式,只要浏览器发送的body 服务端认可就可以了)
常见的body格式:

  • application/json
  • application/x-www-form-urlencoded(使用html的form 标签提交时产生的html请求,默认会使用这种格式)
  • multipart/form-data (文件上传)
  • text/xml

三、HTTPS

不管是https 还是http2 ,基本上保持了HTTP 的设计思想,即:使用上的Request-Response 模式

1. HTTPS 的作用

  1. 确定请求目标服务端身份
  2. 保证传输的数据不会被网络中间节点窃听或篡改

2. HTTPS 如何加密

https 是通过首先和服务端建立一条 TLS 加密通道,然后使用加密通道来传输http 的内容

TLS 构建于 tcp 协议之上,实际上是对传输内容做一次加密,所以从传输内容上来看,https 和 http 没有任何区别

四、HTTP2

HTTP2是 HTTP 1.1 的升级版本

1. HTTP2 的改进

  1. 支持服务端推送
    在客户端发送一个请求到服务端时,提前把一部分内容推送给客户端,放入缓存中,这可以避免客户端请求顺序带来的并行度不高,从而导致的性能问题
  2. 支持TCP 连接复用
    使用同一个TCP 连接传输多个http 请求,避免了TCP 连接建立的三次握手开销,和初建TCP 连接时传输窗口小的问题

(本文来自我对极客时间winter的重学前端的知识整理,如有转载请声明,同时有不全可以参考原著)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值