Chrome 右上角三个点-更多工具-任务管理器 可以看到当前进程
现在浏览器是多进程架构,每个进程就是每个程序的实例,进程负责管理多个线程
进程中任意线程出错都会导致进程崩溃,所以浏览器插件单独一个进程
线程之间共享进程的公共数据,所以 js 是单线程,防止在处理 dom 渲染等情况时多线程操作混乱
进程关闭后运行内存会回收,其实就是 win 的任务管理器清任务
进程之间数据是隔离的,所以需要进程通信机制(IPC)来通信
主要有五个进程:
还有新增的部分进程:
同一站点不用于同源,仅是 根域名相同 和 协议相同 即可
浏览器进程接收用户输入,将 URL 转发给网络进程
网络进程开始 URL 请求
网络进程接收响应数据,将响应头数据转发给浏览器进程
浏览器进程接收响应头数据,将'准备渲染'消息发动到渲染进程
渲染进程接收'准备渲染'消息,与网络进程建立 IPC 数据管道接收 HTML 数据,网络进程接收完响应体数据后开始渲染
渲染进程发给浏览器进程'确认提交'表示已经渲染好
浏览器进程接收'确认提交'消息,开始更新页面
浏览器进程:处理用户输入,重定向,进程管理等
网络进程:发起 URL 请求,读取响应头和响应体数据
渲染进程:解析页面与资源
参考下面修改
非常抱歉,我之前的回答可能有些误导。根据您提供的更详细的信息,我将为您提供更准确的解释。
当用户在浏览器中输入内容时,浏览器进程会根据输入的内容进行判断和处理。以下是一般情况下浏览器处理用户输入的过程:
如果用户输入的内容是搜索关键词或不包含域名的 URL,浏览器会将其视为搜索请求,并将搜索关键词拼接到搜索引擎的 URL 上,然后发送请求。
如果用户输入的内容是一个包含域名的 URL,浏览器会使用 HTTP 协议进行请求。在发送请求之前,浏览器会先尝试使用 HTTPS 协议来发送请求,以提供更安全的通信。浏览器会发送一个带有"ALPN"(Application-Layer Protocol Negotiation)扩展的 TLS 握手请求,该扩展用于协议选择和判断版本。
如果服务器支持 HTTPS,并且浏览器和服务器之间成功建立了 TLS 连接,浏览器将继续使用 HTTPS 协议进行通信,并根据服务器返回的响应头中的"HTTP"字段来判断 HTTP 版本。
如果服务器不支持 HTTPS 或者 TLS 连接失败,浏览器会回退到使用 HTTP 协议进行通信,并根据服务器返回的响应头中的"HTTP"字段来判断 HTTP 版本。
此外,您提到还有使用"file"协议访问文件等其他情况。当用户输入的内容以"file://"开头时,浏览器会将其视为对本地文件系统的访问请求,并使用"file"协议来处理。这种情况下,不涉及 HTTP 协议的版本判断。
总结起来,浏览器在处理用户输入时,会根据输入内容的类型判断是搜索还是 URL 请求,并根据是否有域名来选择使用 HTTP 或 HTTPS 协议。对于使用 HTTPS 协议的请求,浏览器会使用 ALPN 扩展进行协议选择和判断版本。对于使用 HTTP 协议的请求,浏览器会根据服务器返回的响应头中的"HTTP"字段来判断 HTTP 版本。同时,还存在使用"file"协议访问文件等其他情况,不涉及 HTTP 协议的版本判断。