重学前端 11 # 浏览器工作解析(一)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 重学前端 11 # 浏览器工作解析(一)

一、URL到网页呈现发生了什么?


1.1、过程


   1、浏览器首先使用 HTTP 协议或者 HTTPS 协议,向服务端请求页面

   2、把请求回来的 HTML 代码经过解析,构建成 DOM 树

   3、计算 DOM 树上的 CSS 属性

   4、最后根据 CSS 属性对元素逐个进行渲染,得到内存中的位图

   5、一个可选的步骤是对位图进行合成,这会极大地增加后续绘制的速度

   6、合成之后,再绘制到界面上



1.2、流程图


winter用访问极客时间网站为例整理了一下流程

276cc59954600610ed2cdb4c077aad45.jpg

注意一点:从 HTTP 请求回来,就产生了流式的数据,后续的 DOM 树构建、CSS 计算、渲染、合成、绘制,都是尽可能地流式处理前一步的产出




二、HTTP协议


2.1、HTTP标准


2.1.1、介绍


1、HTTP 标准由 IETF 组织制定,跟它相关的标准主要有两份:


1)、HTTP1.1:https://tools.ietf.org/html/rfc2616

2)、HTTP1.1:https://tools.ietf.org/html/rfc7234


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


3、HTTP 是纯粹的文本协议,它是规定了使用 TCP 协议来传输文本格式的一个应用层协议。


2.1.2、小实验

winter用一个纯粹的 TCP 客户端来手工实现 HTTP,实验需要使用telnet客户端


1、运行 telnet,连接到极客时间主机

telnet time.geekbang.org 80


2、TCP 连接已经建立,输入下面字符作为请求(请求部分)

GET / HTTP/1.1
Host: time.geekbang.org


第一行被称作 request line,它分为三个部分,HTTP Method(请求的方法)、请求的路径、请求的协议和版本。


紧跟在request line后面的是请求头,每行用冒号分隔名称和值


3、按下两次回车,收到服务端回复(响应部分)

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>


第一行被称作 response line,它也分为三个部分,协议和版本、状态码和状态文本。

紧随在 response line 之后,是响应头,每行用冒号分隔的名称和值




三、HTTP 协议格式


3.1、HTTP协议划分

image.jpeg

3.2、HTTP Method(方法)

类型:GET、POST、HEADPUT、DELETE、CONNECT、OPTIONS、TRACE


1、浏览器通过地址栏访问页面都是 GET 方法


2、表单提交产生 POST 方法


3、PUT 和 DELETE 分别表示添加资源和删除资源


4、CONNECT 现在多用于 HTTPS 和 WebSocket


5、OPTIONS 和 TRACE 一般用于调试,多数线上服务都不支持


3.3、 HTTP Status code(状态码)和 Status text(状态文本)


3.3.1、1xx


临时回应,表示客户端请继续。对前端来说1xx 系列的状态码是非常陌生的,原因是 1xx 的状态被浏览器 http 库直接处理掉了,不会让上层应用知晓。


3.3.2、2xx

2xx 系列的状态最熟悉的就是 200,这通常是网页请求成功的标志


3.3.3、3xx

表示请求的目标有变化,希望客户端进一步处理。


  • 301&302:永久性与临时性跳转。
  • 304:跟客户端缓存没有更新。


3.3.4、4xx

客户端请求错误。


  • 403:无权限。
  • 404:表示请求的页面不存在。
  • 418It’s a teapot. 这是一个彩蛋,来自 IETF 的一个愚人节玩笑。(超文本咖啡壶控制协议


3.3.5、5xx

服务端请求错误。

  • 500:服务端错误。
  • 503:服务端暂时性错误,可以一会再试。



3.4、HTTP Head (HTTP 头)


3.4.1、Request Header

29b7b6a1d4252def4a5401408a09b895.png

3.4.2、Response Header

383a80352e982e1e754f29fa9555bc57.png


3.5、HTTP Request Body

HTTP 请求的 body 主要用于提交表单场景。


常见的 body 格式是:

  • application/json
  • application/x-www-form-urlencoded
  • multipart/form-data
  • text/xml

1、使用 html 的 form 标签提交产生的 html 请求,默认会产生 application/x-www-form-urlencoded 的数据格式2、当有文件上传时,则会使用 multipart/form-data。



四、HTTPS


4.1、作用


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


4.2、标准


HTTPS 的标准也是由 RFC 规定的查看详情

   HTTPS 是使用加密通道来传输 HTTP 的内容。

   HTTPS首先与服务端建立一条 TLS 加密通道。

   TLS 构建于 TCP 协议之上,它实际上是对传输的内容做一次加密,所以从传输内容上看,HTTPS 跟 HTTP 没有任何区别。



五、HTTP2


HTTP 2 是 HTTP 1.1 的升级版本查看详情



5.1、最大改进

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


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



目录
相关文章
|
3天前
|
缓存 前端开发 JavaScript
"面试通关秘籍:深度解析浏览器面试必考问题,从重绘回流到事件委托,让你一举拿下前端 Offer!"
【10月更文挑战第23天】在前端开发面试中,浏览器相关知识是必考内容。本文总结了四个常见问题:浏览器渲染机制、重绘与回流、性能优化及事件委托。通过具体示例和对比分析,帮助求职者更好地理解和准备面试。掌握这些知识点,有助于提升面试表现和实际工作能力。
13 1
|
3天前
|
前端开发 JavaScript 开发者
揭秘前端高手的秘密武器:深度解析递归组件与动态组件的奥妙,让你代码效率翻倍!
【10月更文挑战第23天】在Web开发中,组件化已成为主流。本文深入探讨了递归组件与动态组件的概念、应用及实现方式。递归组件通过在组件内部调用自身,适用于处理层级结构数据,如菜单和树形控件。动态组件则根据数据变化动态切换组件显示,适用于不同业务逻辑下的组件展示。通过示例,展示了这两种组件的实现方法及其在实际开发中的应用价值。
8 1
|
8天前
|
缓存 前端开发 JavaScript
前端的全栈之路Meteor篇(二):容器化开发环境下的meteor工程架构解析
本文详细介绍了使用Docker创建Meteor项目的准备工作与步骤,解析了容器化Meteor项目的目录结构,包括工程准备、环境配置、容器启动及项目架构分析。提供了最佳实践建议,适合初学者参考学习。项目代码已托管至GitCode,方便读者实践与交流。
|
6天前
|
人工智能 资源调度 数据可视化
【AI应用落地实战】智能文档处理本地部署——可视化文档解析前端TextIn ParseX实践
2024长沙·中国1024程序员节以“智能应用新生态”为主题,吸引了众多技术大咖。合合信息展示了“智能文档处理百宝箱”的三大工具:可视化文档解析前端TextIn ParseX、向量化acge-embedding模型和文档解析测评工具markdown_tester,助力智能文档处理与知识管理。
|
7天前
|
NoSQL 前端开发 MongoDB
前端的全栈之路Meteor篇(三):运行在浏览器端的NoSQL数据库副本-MiniMongo介绍及其前后端数据实时同步示例
MiniMongo 是 Meteor 框架中的客户端数据库组件,模拟了 MongoDB 的核心功能,允许前端开发者使用类似 MongoDB 的 API 进行数据操作。通过 Meteor 的数据同步机制,MiniMongo 与服务器端的 MongoDB 实现实时数据同步,确保数据一致性,支持发布/订阅模型和响应式数据源,适用于实时聊天、项目管理和协作工具等应用场景。
|
13天前
|
JSON 前端开发 JavaScript
前端模块打包器的深度解析
【10月更文挑战第13天】前端模块打包器的深度解析
|
14天前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
|
14天前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
30 0
|
14天前
|
人工智能 自然语言处理 运维
前端大模型应用笔记(一):两个指令反过来说大模型就理解不了啦?或许该让第三者插足啦 -通过引入中间LLM预处理用户输入以提高多任务处理能力
本文探讨了在多任务处理场景下,自然语言指令解析的困境及解决方案。通过增加一个LLM解析层,将复杂的指令拆解为多个明确的步骤,明确操作类型与对象识别,处理任务依赖关系,并将自然语言转化为具体的工具命令,从而提高指令解析的准确性和执行效率。
|
14天前
|
存储 弹性计算 算法
前端大模型应用笔记(四):如何在资源受限例如1核和1G内存的端侧或ECS上运行一个合适的向量存储库及如何优化
本文探讨了在资源受限的嵌入式设备(如1核处理器和1GB内存)上实现高效向量存储和检索的方法,旨在支持端侧大模型应用。文章分析了Annoy、HNSWLib、NMSLib、FLANN、VP-Trees和Lshbox等向量存储库的特点与适用场景,推荐Annoy作为多数情况下的首选方案,并提出了数据预处理、索引优化、查询优化等策略以提升性能。通过这些方法,即使在资源受限的环境中也能实现高效的向量检索。

推荐镜像

更多