关于javascript:浏览器工作原理与实践六

6次阅读

共计 1367 个字符,预计需要花费 4 分钟才能阅读完成。

HTTP: 超文本传输协定,用来在网络传递 HTML 超文本内容。

  1. http基于 TCP 协定,客户端先依据 IP 地址,端口号和服务器建设 TCP 连贯,建设过程 TCP 协定 3 次握手。
  2. 建好之后,先发送一个申请行信息,获取数据。
  3. 服务器接管申请,读取对应文件,并将数据以 ASCII 字符流返回给客户端。
  4. 文档传完,断开连接。

HTTP1.1

TCP为了单连贯而设计。

  1. 改良长久连贯:在一个 TCP 上能够传多个 HTTP 申请,只有浏览器或服务器没有明确断开,会始终放弃 TCP 连贯。每次 HTTP 通信,要建设 TCP 连贯,传输 HTTP 数据和断开连接。因为文件图片越来越多,每个都要这么多步骤,开销太大。
  2. http管线化:长久连贯虽能缩小 TCP 的建设和断开次数,但须要等后面返回能力进行下一次。如果某个申请始终没有返回就会阻塞前面的,就是队头阻塞问题。HTTP1.1尝试将多个 HTTP 申请整批提交给服务器,但服务器仍然要按程序返回申请。
  3. 提供虚拟主机反对:之前每个域名都绑定的惟一主机,一个服务器只反对一个域名。但虚拟主机的倒退,要在一台物理主机绑定多个虚拟主机,每个虚拟主机有本人的域名,但都专用一个 IP 地址。HTTP1.1申请头加了 host 示意以后域名地址,服务器作解决头引入了 cookie 机制和平安机制。为每个域名最多同时保护 6TCP长久连贯,应用了 CDN 实现域名分片。

HTTP1.1带宽的利用率不现实:

  1. TCP慢启动:TCP连贯建设后,发送数据是缓缓变快的,但一开始的 html,css,js 文件消耗的工夫就长,推延了首次渲染
  2. 同时开启多条 TCP 连贯,独特竞争固定带宽,带宽有余时会减慢发送或接收数据,有可能影响要害资源的下载
  3. 队头阻塞问题

HTTP2 多路复用

HTTP2一个域名只应用一个 TCP 长连贯来传输数据,下载过程只须要一次慢启动,也防止多个 TCP 竞争带宽。

  1. 浏览器筹备数据(申请头,申请行)
  2. 通过二进制分帧层解决后,转换成一个个带有申请 ID 编号的帧,通过协定栈发给服务器
  3. 服务器接管后,将有雷同 ID 的帧合为一条残缺的申请信息
  4. 服务器解决申请,将解决的响应行,响应头和响应体别离发送二进制分帧层
  5. 同样,二进制分帧层将响应数据转换为一个个带有申请 ID 编号的帧,通过协定栈发给浏览器
  6. 浏览器收到响应后,依据 ID 编号将帧的数据提交给对应申请

其它个性:

  1. 能够设置申请的优先级
  2. 服务器推送,除了设置优先级外,还能够提前将数据推送到浏览器
  3. 头部压缩

HTTP3

HTTP3基于 UDP 协定,实现了相似于 TCP 的多路数据流,传输可靠性等性能,叫 QUIC 协定 =TCP+HTTP2多路复用 +TLS加密

2 个 url 协定、域名和端口都雷同,称为 url 同源。
浏览器默认 2 个雷同的源之间是能够互相拜访资源和操作 DOM 的。不同源有安全策略的制约。

  1. DOM层面:限度了不同源的 JS 对以后 DOM 对象的读和写的操作
  2. 数据层面:限度了不同源的站点读取以后站点的 cookieindexDBlocalStorage 等数据
  3. 网络层面:限度了 XMLHttpRequest 将站点数据发给不同源的站点
  • 页面能够嵌入第三方资源,CSP让服务器决定浏览器能加哪些资源,让服务器决定浏览器是否执行内嵌JS,缩小 xcss
  • 跨域资源共享和跨文档音讯机制,引入了 CORS 跨域资源共享,进行跨域拜访
  • 跨文档音讯机制,window.postMessage 来和不同源进行 DOM 通信
正文完
 0