
- 用户输入关键词,地址栏判断关键字是搜索内容还是请求URL
- 搜索内容是关键字,地址栏会使用浏览器默认的搜索引擎合成新的带关键字带URL
- 搜索内容是符合规则带URL,地址栏会自动加上协议,合成完整的URL
- 页面tab开始加载,转圈,但是还没变,需要等待提交文档阶段,页面内容被替换
- URL请求过程
- 浏览器进程通过进程间通信ipc把url请求发送至网络进程,网络进程接受url发起真正的请求URL流程
- 网络进程查找本地缓存是否有,如果有直接返回给浏览器进程,如果在缓存中没有直接进入网络请求流程
- dns解析,获取域名的服务器IP地址,如果协议是https,需要tls链接
- 客户端利用IP地址与服务器建立tcp链接,同一个域名最多只能建立6个tcp链接,超出的链接只能进入tcp等待队列,否则 可以直接建立tcp链接
- 客户端构建请求头请求行,域名相关的cookie等数据附加到请求头中,向服务器发送构建的信息
- 服务器根据请求信息生成相应数据(响应头,响应行,响应体),发给网络进程,开始解析响应头信息
- 响应头信息是301,302 重定向,网络进程从响应头的location字段中读取重定向字段地址,然后再发起新的http或https请求


- 响应数据类型content-type:告诉浏览器服务器响应的数据类型,自行解析(下载类型会交给浏览器的下载管理器,请求导航流程结束)
- http协议是应用层协议,用来封装请求文本信息,tcp/ip是传输层协议浏览器需要tcptcp与服务器建立连接,http的内容就是通过tcp的传输数据阶段实现,
- 返回数据给浏览器之后就要关闭tcp链接,如果浏览器或者服务器在头里面加入connection:keep-alive,这样就保持连接,可以省去下次请求建立连接的时间,提升资源的加载速度,
- 响应头cache-control设置是否缓存该资源,,max-age=2000秒,如果缓存过期,就会重新请求,if-none-match‘hdfgdhsgfds’发送给服务器,判断是否过期资源是否更新,没有更新就返回304,如果更新了就返回新资源,cookie可以用来保持状态
- 构建请求=》查找缓存=》准备ip根端口=》等待tcp队列=》建立tcp连接=》发起http请求
- 响应头信息是301,302 重定向,网络进程从响应头的location字段中读取重定向字段地址,然后再发起新的http或https请求
- 渲染进程,谷歌会为每个页面分配一个渲染进程,也就是每打开一个新页面就会配套创建一个新的渲染进程(当然特殊情况:)
- 同一站点,根域名相同协议相同
https://time.geekbang.org;https://www.geekbang.org;https://www.geekbang.org:8080协议相同,https,根域名相同geekbang.org - 默认谷歌一个标签对应一个渲染进程,一个页面打开了一个新页面,如果满足同一站点的条件,那么新页面复用父页面的渲染进程
- 同一站点,根域名相同协议相同
- 提交文档,浏览器进程发起,渲染进程接到消息与网络进程建立数据传输管道,传输完毕渲染进程会返回确认消息给浏览器进程,浏览器进程更新页面,以上都是导航流程
- 渲染阶段,文档提交渲染进程就开始页面解析,子资源加载
