【浏览器原理-2】浏览器中的网络
课程链接:https://time.geekbang.org/column/intro/100033601?tab=catalog
浏览器的请求流程
发起请求
构建请求行
浏览器构建请求行信息,准备发起请求。
1 | GET /index.html HTTP1.1 |
查找缓存
浏览器缓存策略浏览器会寻找该请求是否有对应的缓存,如果有,则直接结束请求流程,并返回资源副本。
准备 IP 地址和端口
- 如果发起请求的是域名,则需要先请求 DNS 服务器,返回域名对应的 IP 地址。
- 浏览器同时提供了 DNS 缓存服务,对于已经解析过的域名则自动缓存,下次无需重新请求 DNS 服务器
- HTTP 默认端口号是 80,HTTPS 默认端口号是 443
等待 TCP 队列
Chrome 对同域名请求的限制 对于同域名的请求,Chrome 最多维护 6 个 TCP 连接,其他的请求则进入等待状态,直至 6 个 TCP 连接中有某个连接被释放了。浏览器这么做,是为了避免短时间大量的请求给服务器造成巨大的负载。
性能优化技巧
可以将静态资源放在不同域名的服务器下,从而突破浏览器的请求限制,提高并行请求数量。
建立 TCP 连接
在 HTTP 工作开始之前,浏览器通过 TCP 协议建立连接。这会发生 TCP 的三次握手。
发送 HTTP 请求
- 发送请求行:包含请求方法、路径和 HTTP 协议版本
- 发送请求头部信息:如操作系统、内核、请求域名、Cookie 等信息
- 准备请求数据
服务器处理 HTTP 请求
返回信息
- 服务器会返回响应行,包含 HTTP 协议版本和状态码
- 发送响应头:响应的数据类型、要保存的 Cookie(
Set-Cookie)等信息 - 发送响应体:HTML 内容、JSON 内容等
断开连接
- 这会经历 4 次挥手。
- 如果客户端或服务器端的响应头包含了
Connection:Keep-Alive,那么连接就不会关闭。
性能优化技巧
Connection:Keep-Alive 是 HTTP/1.1 协议中的新增内容。保持连接可以使得下次请求时无需再建立 TCP 连接,从而提高资源的加载速度。
重定向
如果服务器返回了 30x 状态码,那么浏览器会读取响应头的包含在响应头的 Location 字段,并使用 Location 字段重新发起导航。
- 标题: 【浏览器原理-2】浏览器中的网络
- 作者: ObjectKaz
- 创建于: 2021-12-10 12:49:09
- 更新于: 2022-07-23 08:31:27
- 链接: https://www.objectkaz.cn/ddfb8c2aedc2.html
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。