mirror of
https://github.com/CyC2018/Interview-Notebook.git
synced 2026-11-06 15:54:09 +00:00
Update 计算机网络 - 应用层.md
补充地址栏省略协议时浏览器优先尝试 HTTPS 的行为。
This commit is contained in:
@@ -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-访问网页各阶段的耗时)):
|
||||
|
||||
<div align="center"> <img src="pics/url-timeline.png" width="760px"/> </div><br>
|
||||
|
||||
Reference in New Issue
Block a user