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

简介: 重学前端 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 连接时传输窗口小的问题。



目录
相关文章
|
存储 前端开发 安全
前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
本文全面解析前端三种数据存储方式:Cookie、LocalStorage与SessionStorage。涵盖其定义、使用方法、生命周期、优缺点及典型应用场景,帮助开发者根据登录状态、用户偏好、会话控制等需求,选择合适的存储方案,提升Web应用的性能与安全性。(238字)
1198 0
|
Web App开发 缓存 前端开发
浏览器常见面试题目及详细答案解析
本文围绕浏览器常见面试题及答案展开,深入解析浏览器组成、内核、渲染机制与缓存等核心知识点。内容涵盖浏览器的主要组成部分(如用户界面、呈现引擎、JavaScript解释器等)、主流浏览器内核及其特点、从输入URL到页面呈现的全过程,以及CSS加载对渲染的影响等。结合实际应用场景,帮助读者全面掌握浏览器工作原理,为前端开发和面试提供扎实的知识储备。
461 4
|
12月前
|
Web App开发 前端开发 JavaScript
前端性能优化利器:图片懒加载实战解析
前端性能优化利器:图片懒加载实战解析
|
8月前
|
数据采集 人工智能 自然语言处理
Playwright MCP 浏览器自动化框架全面解析
Playwright MCP是微软推出的开源项目,结合Playwright与MCP协议,让AI通过结构化数据直接操作浏览器。告别传统视觉识别,实现高效、精准的网页自动化,广泛应用于测试、爬虫、办公自动化等场景,大幅提升效率与可靠性。
|
存储 前端开发 JavaScript
调用DeepSeek API增强版纯前端实现方案,支持文件上传和内容解析功能
本方案基于DeepSeek API增强版,提供纯前端实现的文件上传与内容解析功能。通过HTML和JavaScript,用户可选择文件并调用API完成上传及解析操作。方案支持多种文件格式(如PDF、TXT、DOCX),具备简化架构、提高响应速度和增强安全性等优势。示例代码展示了文件上传、内容解析及结果展示的完整流程,适合快速构建高效Web应用。开发者可根据需求扩展功能,满足多样化场景要求。
4171 64
|
存储 前端开发 JavaScript
|
11月前
|
人工智能 JSON 前端开发
如何解决后端Agent和前端UI之间的交互问题?——解析AG-UI协议的神奇作用
三桥君指出AG-UI协议通过SSE技术实现智能体与前端UI的标准化交互,解决流式传输、实时进度显示、数据同步等开发痛点。其核心功能包括结构化事件流、多Agent任务交接和用户中断处理,具有"一次开发到处兼容"、"UI灵活可扩展"等优势。智能体专家三桥君认为协议将AI应用从聊天工具升级为实用软件,适用于代码生成、多步骤工作流等场景,显著提升开发效率和用户体验。
2620 0
|
JSON 前端开发 安全
前端开发中常用的鉴权方式解析与实践要点
本文深入探讨了前端开发中常用的鉴权方式,包括HTTP基本鉴权、Session-Cookie鉴权、Token验证、JWT(JSON Web Tokens)、单点登录(SSO)和OAuth等。文章首先明确了认证、授权、鉴权和权限控制的概念及关系,随后详细解析每种鉴权方式的工作原理、优缺点及适用场景。例如,HTTP基本鉴权简单但安全性低,适合内部网络;Session-Cookie鉴权易受CSRF攻击,适用于同域Web应用;Token和JWT无状态且扩展性好,适合分布式系统;SSO提升用户体验,适用于多系统统一登录;OAuth安全方便,适合第三方授权接入。
1379 2
|
11月前
|
Web App开发 安全 测试技术
Playwright-MCP浏览器会话复用全解析
本文深入解析Playwright-MCP实现浏览器会话复用的核心技术,包括状态持久化(cookies/localStorage存储)和直接连接已打开浏览器实例(通过CDP协议)。通过多上下文隔离与安全机制设计,提供企业级应用场景的优化方案,帮助开发者提升测试效率并降低资源消耗。
|
数据采集 Web App开发 监控
深度解析:使用ChromeDriver和webdriver_manager实现无头浏览器爬虫
在现代网络爬虫实践中,动态网页加载和反爬虫机制增加了数据采集的难度。采用无头浏览器技术(如Selenium与ChromeDriver)可有效模拟用户行为、执行JavaScript,获取动态内容。通过设置代理IP、伪装User-Agent和处理Cookies,提升爬虫隐蔽性和稳定性。该方案适用于电商价格监控、社交媒体数据采集和招聘信息抓取等场景,实现更高效的数据获取。
1158 2
深度解析:使用ChromeDriver和webdriver_manager实现无头浏览器爬虫

推荐镜像

更多
  • DNS