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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 重学前端 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 连接时传输窗口小的问题。



目录
相关文章
|
1月前
|
机器学习/深度学习 编解码 前端开发
探索无界:前端开发中的响应式设计深度解析####
【10月更文挑战第29天】 在当今数字化时代,用户体验的优化已成为网站与应用成功的关键。本文旨在深入探讨响应式设计的核心理念、技术实现及最佳实践,揭示其如何颠覆传统布局限制,实现跨设备无缝对接,从而提升用户满意度和访问量。通过剖析响应式设计的精髓,我们将一同见证其在现代Web开发中的重要地位与未来趋势。 ####
46 7
|
1月前
|
编解码 前端开发 UED
探索无界:前端开发中的响应式设计深度解析与实践####
【10月更文挑战第29天】 本文深入探讨了响应式设计的核心理念,即通过灵活的布局、媒体查询及弹性图片等技术手段,使网站能够在不同设备上提供一致且优质的用户体验。不同于传统摘要概述,本文将以一次具体项目实践为引,逐步剖析响应式设计的关键技术点,分享实战经验与避坑指南,旨在为前端开发者提供一套实用的响应式设计方法论。 ####
65 4
|
1月前
|
前端开发 JavaScript API
前端开发的秘密花园:这些技巧让你轻松应对各种浏览器兼容性问题!
【10月更文挑战第31天】前端开发是一个充满创意与挑战的领域,追求极致用户体验的同时,浏览器兼容性问题却时常阻碍我们前进。本文将介绍几种解决浏览器兼容性的最佳实践:使用CSS前缀、Autoprefixer工具、现代JavaScript特性与Babel转译、Polyfill与Feature Detection、响应式设计以及跨域问题处理。掌握这些技巧,助你轻松应对各种兼容性难题,创建更稳定、用户友好的网页应用。
39 3
|
1月前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
135 1
|
1月前
|
域名解析 缓存 网络协议
浏览器中输入URL返回页面过程(超级详细)、DNS域名解析服务,TCP三次握手、四次挥手
浏览器中输入URL返回页面过程(超级详细)、DNS域名解析服务,TCP三次握手、四次挥手
|
1月前
|
缓存 前端开发 JavaScript
"面试通关秘籍:深度解析浏览器面试必考问题,从重绘回流到事件委托,让你一举拿下前端 Offer!"
【10月更文挑战第23天】在前端开发面试中,浏览器相关知识是必考内容。本文总结了四个常见问题:浏览器渲染机制、重绘与回流、性能优化及事件委托。通过具体示例和对比分析,帮助求职者更好地理解和准备面试。掌握这些知识点,有助于提升面试表现和实际工作能力。
66 1
|
2月前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
194 2
|
2月前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
56 0
|
2月前
|
人工智能 自然语言处理 运维
前端大模型应用笔记(一):两个指令反过来说大模型就理解不了啦?或许该让第三者插足啦 -通过引入中间LLM预处理用户输入以提高多任务处理能力
本文探讨了在多任务处理场景下,自然语言指令解析的困境及解决方案。通过增加一个LLM解析层,将复杂的指令拆解为多个明确的步骤,明确操作类型与对象识别,处理任务依赖关系,并将自然语言转化为具体的工具命令,从而提高指令解析的准确性和执行效率。
|
2月前
|
存储 弹性计算 算法
前端大模型应用笔记(四):如何在资源受限例如1核和1G内存的端侧或ECS上运行一个合适的向量存储库及如何优化
本文探讨了在资源受限的嵌入式设备(如1核处理器和1GB内存)上实现高效向量存储和检索的方法,旨在支持端侧大模型应用。文章分析了Annoy、HNSWLib、NMSLib、FLANN、VP-Trees和Lshbox等向量存储库的特点与适用场景,推荐Annoy作为多数情况下的首选方案,并提出了数据预处理、索引优化、查询优化等策略以提升性能。通过这些方法,即使在资源受限的环境中也能实现高效的向量检索。

热门文章

最新文章

推荐镜像

更多