Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

从输入URL到页面展示,这中间发生了什么? #93

Open
Cosen95 opened this issue Apr 22, 2020 · 1 comment
Open

从输入URL到页面展示,这中间发生了什么? #93

Cosen95 opened this issue Apr 22, 2020 · 1 comment

Comments

@Cosen95
Copy link
Owner

Cosen95 commented Apr 22, 2020

No description provided.

@Cosen95
Copy link
Owner Author

Cosen95 commented Apr 30, 2020

1、用户输入url并回车。

2、浏览器进程检查url,组装协议,构成完整的url

3、浏览器进程通过进程间通信(IPC)把url请求发送给网络进程。

4、网络进程接收到url请求后检查本地缓存是否缓存了该请求资源,如果有则将该资源返回给浏览器进程。

5、如果没有,网络进程向web服务器发起http请求(网络请求),请求流程如下:

5.1 进行`DNS`解析,获取服务器`ip`地址、端口。

5.2 利用`ip`地址和服务器建立`tcp`连接。

5.3 构建请求头信息。

5.4 发送请求头信息。

5.5 服务器响应后,网络进程接收响应头和响应信息,并解析响应内容。

6、网络进程解析响应流程:

6.1 检查状态码,如果是 `301/302`,则需要重定向,从`Location`自动读取地址,重新进行第`4`步,如果是`200`,则继续处理请求。

6.2 `200` 响应处理:检查响应类型`Content-Type`,如果是字节流类型,则将请求提交给下载管理器,该导航流程结束,不再进行后续的渲染;如果是`html`, 则通知浏览器进程准备渲染进程准备进行渲染。

7、准备渲染进程

7.1 浏览器进程检查当前 `url`是否和之前打开的渲染进程根域名是否相同,如果相同,则复用原来的进程;如果不同,则开启新的渲染进程。

8、传输数据、更新状态

8.1 渲染进程准备好后,浏览器向渲染进程发起“提交文档”的消息,渲染进程接收到消息和网络进程建立传输数据的“管道”。

8.2 渲染进程接收完数据后,向浏览器发送“确认提交”。

8.3 浏览器进程接收到确认消息后更新浏览器界面状态:安全、地址栏`url`、前进后退的历史状态、更新`web`页面。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant