Frontend / WeChat

JSBridge 最小模型:跨环境调用、异步 RPC 和 callbackId 是怎么工作的

前言理解 JSBridge 时,最容易卡住的问题不是: 1JSBridge 是什么 而是: 1两个不同环境,为什么能互相调用方法? 比如: 1234JS 为什么能调用 Native?Native 为什么又能回调 JS?C# 为什么能调用 JS?JS 为什么又能 SendMessage 回 Unity? 如果只说一句“通过桥通信”,其实还是有点虚。 这篇用一个...

JSBridge Native WebView Unity 小程序运行时
Frontend / Network

HTTP 强缓存与协商缓存:浏览器怎么知道要不要发请求

前言HTTP 缓存里最重要的两个概念是: 12强缓存:不问服务器,直接用本地缓存。协商缓存:问服务器资源变没变,没变就继续用本地缓存。 很多人会问: 浏览器怎么知道这次请求要不要走强缓存? 答案是: 浏览器第一次拿到响应时,会把响应体和响应头一起存下来;下次请求同一个资源前,根据之前保存的缓存规则判断缓存是否仍然新鲜。 1. 第一次请求时,浏览器存了什么第一...

计算机网络 HTTP ETag HTTP缓存 Cache-Control
Frontend / Network

浏览器输入 URL 到页面展示:一次完整网络请求发生了什么

前言“浏览器输入 URL 到页面展示发生了什么”是一个经典问题。 它看起来是在问浏览器,实际上是在串联整条网络链路: 123456789101112131415URL 解析 ↓缓存 ↓DNS ↓TCP ↓TLS ↓HTTP ↓服务端响应 ↓浏览器解析和渲染 以访问下面这个地址为例: 1https://example.com/page 1. 浏览器解析 URL...

计算机网络 HTTP HTTPS TCP DNS
Frontend / Network

HTTP/1.0、HTTP/1.1 与 HTTP/2:从短连接到长连接,再到多路复用

前言HTTP 的版本演进可以先压成一句话: 123HTTP/1.0:短连接为主,每次请求成本高。HTTP/1.1:默认长连接,复用 TCP 连接,但请求容易排队。HTTP/2:二进制分帧和多路复用,一个 TCP 连接里并发多个请求。 这篇文章围绕几个问题展开: HTTP/1.0 为什么慢? HTTP/1.1 的长连接解决了什么? 为什么 ...

计算机网络 HTTP 缓存 HTTP/1.0 HTTP/1.1
Frontend / Network

TCP、UDP 与 QUIC:为什么 HTTP/3 要基于 UDP

前言TCP 和 UDP 都是传输层协议,都能解决: 1把数据交给目标主机上的哪个进程。 但它们的取舍完全不同: 12TCP:连接、可靠、有序、字节流UDP:无连接、不保证可靠、不保证有序、数据报 再往后看,HTTP/3 又选择基于 QUIC,而 QUIC 基于 UDP。 这篇文章就围绕三件事展开: TCP 和 UDP 到底差在哪。 为什么 DNS、...

计算机网络 TCP UDP QUIC HTTP/3
Frontend / Network

TCP 详解:从三次握手到可靠传输、滑动窗口和四次挥手

前言IP 负责把包送到目标主机,TCP 负责把数据可靠送到目标主机上的具体进程。 一句话: TCP 在不可靠的 IP 之上,提供可靠、有序、面向连接的字节流传输。 这篇文章围绕 TCP 的完整生命周期展开: 12345678910111213端口定位进程 ↓三次握手建立连接 ↓序号、确认和重传保证可靠 ↓滑动窗口提高效率 ↓流量控制保护接收方 ↓拥塞控制保护...

计算机网络 TCP 三次握手 四次挥手 滑动窗口
Frontend / Network

IP 地址、子网与路由表:下一跳到底是怎么决定的

前言学 IP 时最重要的问题不是“IP 地址长什么样”,而是: 有了目标 IP 以后,操作系统怎么知道下一步该把包交给谁? 这背后涉及几个概念: IP 地址 子网掩码 CIDR 默认网关 路由表 下一跳 最长前缀匹配 这篇文章先把这些概念串成一条线。 1. IP 地址是什么IP 地址用来标识网络中的主机或网络接口。 常见 IPv4 地址长这样: 12192....

计算机网络 IP 子网 CIDR 路由表
Frontend / Network

IP 包是怎么一跳一跳转发的:路由表、ARP、MAC、交换机与路由器

前言学到网络层和数据链路层时,最容易混在一起的几个问题是: 客户端怎么知道下一跳是谁? ARP 到底在查什么? 源 MAC 是谁决定的? 交换机和路由器分别看什么? IP 包里的源 IP、目标 IP 会不会变? 每一跳到底是不是都重新封装? 这篇文章只讲一件事: 一个 HTTP 请求封装成 IP 包后,是如何被 MAC 帧一跳一跳送到目标服务器的。 动画先看...

计算机网络 IP NAT MAC ARP
Frontend / Network

HTTP 连接与多路复用:为什么说是 HTTP/2 支持多路复用,而不是 TCP

前言学习 HTTP 版本演进时,很容易遇到几个问题: HTTP 不是应用层协议吗,为什么总说它要建立连接? HTTP/1.1 的长连接,到底连接的是谁和谁? HTTP/2 支持多路复用,为什么不说 TCP 支持多路复用? HTTP/2 既然能多路复用,为什么还会有 TCP 队头阻塞? 这篇文章就围绕一个主线来讲: 123HTTP...

计算机网络 HTTP TCP HTTP/1.1 HTTP/2