From de01a8b3992c1818bdfedaf528cf5f31990dde6d Mon Sep 17 00:00:00 2001 From: CyC2018 Date: Wed, 4 Nov 2026 22:39:58 +0800 Subject: [PATCH] =?UTF-8?q?Update=20=E8=AE=A1=E7=AE=97=E6=9C=BA=E7=BD=91?= =?UTF-8?q?=E7=BB=9C=20-=20=E5=BA=94=E7=94=A8=E5=B1=82.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 补充地址栏省略协议时浏览器优先尝试 HTTPS 的行为。 --- notes/计算机网络 - 应用层.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/notes/计算机网络 - 应用层.md b/notes/计算机网络 - 应用层.md index 44a96e77..300c9ea4 100644 --- a/notes/计算机网络 - 应用层.md +++ b/notes/计算机网络 - 应用层.md @@ -145,10 +145,12 @@ IMAP 协议中客户端和服务器上的邮件保持同步,如果不手动删 1. 浏览器解析 URL,得到协议 https、主机名 `www.example.com`、端口(省略时 https 为 443)和路径 /,各部分的含义见 [URL](HTTP.md#url),然后检查缓存,有未过期的缓存时直接使用,见 [缓存](HTTP.md#缓存); 2. DNS 解析主机名 `www.example.com`,得到 IP 地址,路径和参数不参与解析; 3. 与服务器进行 TCP 三次握手,HTTPS 还要进行 TLS 握手; -4. 发送 HTTP 请求。请求通常先到达负载均衡或[反向代理](集群.md#3-反向代理服务器)(例如 Nginx),再转发给某台应用服务器,应用服务器查询缓存或数据库后生成响应。如果响应是重定向,例如只输入 baidu.com 时浏览器补上协议后访问,得到 301 和 `Location: https://www.baidu.com/`(见[附录 A3](#a3-省略协议时的重定向)),浏览器对新地址重新走一遍前面的步骤。域名在浏览器的 HSTS 记录或预加载列表中时,输入的 http 地址在浏览器内部就改为 https,不会发出这次明文请求,见 [HTTPS](HTTP.md#六https) 中关于 HSTS 的一段; +4. 发送 HTTP 请求。请求通常先到达负载均衡或[反向代理](集群.md#3-反向代理服务器)(例如 Nginx),再转发给某台应用服务器,应用服务器查询缓存或数据库后生成响应。如果响应是重定向,例如访问 baidu.com 得到 301 和 `Location: https://www.baidu.com/`(见[附录 A3](#a3-省略协议时的重定向)),浏览器对新地址重新走一遍前面的步骤; 5. 浏览器解析 HTML 构建 DOM 树,解析 CSS 构建 CSSOM,两者合成渲染树,再计算每个元素的位置和大小(布局),最后绘制到屏幕上。解析中遇到 CSS、JavaScript、图片等外部资源时另发请求(HTTP/2 下同一服务器上的资源可以在一个连接上并发请求,见 [HTTP/2.0](HTTP.md#八http20)),不带 async 或 defer 的普通脚本(type 不是 module)会暂停 HTML 的解析,直到脚本下载并执行完; 6. 连接保持一段时间供后续请求复用,空闲后关闭,见 [短连接与长连接](HTTP.md#1-短连接与长连接)。 +只输入 baidu.com 这类不带协议的地址时,现在的 Chrome、Firefox 和 iOS 上的 Safari 先补上 https 访问,连接失败才退回 http。域名在浏览器的 HSTS 记录或预加载列表中时,输入的 http 地址在浏览器内部就改为 https,不会发出明文请求,也不会退回 http,见 [HTTPS](HTTP.md#六https) 中关于 HSTS 的一段。 + 以下是访问该网址时各阶段的耗时(curl 实测,见[附录 A1](#a1-访问网页各阶段的耗时)):