目录
输入URL到页面显示的过程
- URL解析:浏览器解析输入的URL,提取出协议、主机、端口、路径等信息。
- DNS解析:浏览器使用主机名查询DNS服务器,获取对应的IP地址。
- 建立TCP连接:浏览器使用获取到的IP地址和端口号,与服务器建立TCP连接。这涉及到三次握手的过程。
- 发送HTTP请求:一旦TCP连接建立,浏览器向服务器发送HTTP请求。请求的内容包括请求方法、请求头和请求体。
- 服务器处理请求:服务器接收到浏览器发送的HTTP请求后,根据请求的路径和参数,处理请求并准备响应。
- 服务器返回响应:服务器根据请求的处理结果,生成相应的HTTP响应。响应的内容包括响应状态码、响应头和响应体。
- 接收响应:浏览器接收到服务器返回的HTTP响应。
- 渲染页面:浏览器开始解析接收到的响应内容,构建DOM树、CSSOM树和渲染树。然后进行布局和绘制,最终将页面呈现在屏幕上。
- 页面展示:页面渲染完成后,浏览器将页面展示给用户,用户可以看到页面内容并与页面进行交互。
具体过程
URL解析
获取协议(http/https)、域名和路径等信息
URL:统一资源定位符,https://www.google.com/search?q=URL
:访问Google的搜索页面,并使用查询参数q=URL进行搜索,这里使用的是HTTPS协议
URL包含:
- 协议:定义了客户端应该使用哪种协议来访问资源。常见的协议有HTTP、HTTPS、FTP等。
- 主机名:指定了资源所在的服务器的域名或IP地址。
- 端口:可选部分,指定了服务器上用于通信的网络端口。HTTP默认端口是80,HTTPS默认端口是443。
- 路径:指定了资源在服务器上的具体位置。
- 查询参数:可选部分,以键值对的形式提供,通常用于向服务器传递额外的信息,如搜索查询或过滤器。
如果输入的不是网址或者协议不合法的话,那么搜索引擎会合成新的带搜索关键字的URL,准备进行搜索
DNS解析——域名解析为IP地址
当我们输入一个网址时,浏览器会先将域名(如google.com)转换为IP地址(如192.168.1.1),然后连接到相应的服务器。这个过程叫做域名解析或DNS查询。
先在客户端进行查询有没有解析的记录,也就是 DNS 缓存
如果 DNS 缓存中没有解析的记录,则查询 DNS 服务器得到 ip 地址(本地DNS服务器->跟服务器->权威域名服务器)
TCP连接
浏览器获取了IP和端口号,发起TCP连接,三次握手
HTTPS安全验证
HTTPS(Hypertext Transfer Protocol Secure)在建立TCP连接之后,会进行一个额外的安全验证过程,这个过程称为SSL/TLS握手。
- 客户端(浏览器)向服务器发起HTTPS连接请求:浏览器向服务器发送一个名为“ClientHello”的消息,包含支持的SSL/TLS版本、加密算法、压缩算法等信息。
- 服务器响应客户端的请求:服务器会向客户端发送一个ServerHello消息,包含确认的SSL/TLS版本、加密算法、压缩算法等信息。同时,服务器会发送一个数字证书(Certificate),证明服务器的身份。
- 客户端验证数字证书:浏览器会验证数字证书的有效性,包括证书的颁发机构、证书的有效期等。如果验证通过,浏览器会生成一个随机数(Pre-master secret),并使用证书中的公钥对其进行加密,发送给服务器。
- 服务器私钥解密:服务器使用自己的私钥解密浏览器发送的随机数(Pre-master secret)。
- 生成对称密钥:客户端和服务器使用随机数、证书中的公钥、服务器的私钥等信息,生成一个对称密钥(Session Key),用于对数据进行加密和解密。
- 数据加密和解密:在整个HTTPS会话中,客户端和服务器使用对称密钥对数据进行加密和解密,确保数据传输过程中的安全性。
- 握手结束:客户端和服务器会发送一个Finished消息,确认SSL/TLS握手过程结束。
客户端发送HTTP请求
浏览器在SSL/TLS握手完成后发送HTTP请求,这时发送HTTP请求会加密
http请求报文一共包括三个部分:
请求行:指定http请求的方法、url、http协议版本等
请求头:描述浏览器的相关信息,语言、编码等。
请求体:当发送POST, PUT等请求时,通常需要向服务器传递数据。这些数据就储存在请求正文中。
服务器处理请求
服务器接收到浏览器发送的HTTP请求后,会进行相应的处理。这可能包括读取数据库、处理业务逻辑、生成动态内容等。
返回HTTP响应
服务器发送HTTP响应给浏览器,响应报文中包含状态码、响应头和响应体等信息。
常见的状态码有200表示成功,404表示资源未找到,500表示服务器内部错误等。
如果返回的响应报文的状态为3xx,就需要重定向到其他URL,然后从头开始
渲染
由于渲染机制很复杂,需要执行的任务很多,所以渲染过程被分成了很多子阶段,然后开始一边解析一边渲染,过程是这样的:
1)首先要构建DOM树,将html转为浏览器认识的结构。在dom树构建的过程中如果遇到js脚本或者外部js连接,则会停止构建dom树来执行和下载相应的代码,这样会造成阻塞,这就是为什么推荐js代码应该放在html后面
2)然后根据外部样式、内联样式等来构建一个CSS对象模型树,也就是CSSOM树。
3)结合DOM树和CSSOM树,生成一个渲染树(render tree),这个过程被称为attachment
4)生成布局(flow),浏览器在屏幕上“画出”渲染树中所有的节点
5)将布局绘制(paint)在屏幕上,显示出整个页面
https安全超文本传输协议
过程
-
客户端(浏览器)向服务器发起HTTPS连接请求:浏览器向服务器发送一个名为“ClientHello”的消息,包含支持的SSL/TLS版本、加密算法、压缩算法等信息。
-
服务器响应客户端的请求:服务器会向客户端发送一个ServerHello消息,包含确认的SSL/TLS版本、加密算法、压缩算法等信息。同时,服务器会发送一个数字证书(Certificate),证明服务器的身份。
-
客户端验证数字证书:浏览器会验证数字证书的有效性,包括证书的颁发机构、证书的有效期等。如果验证通过,浏览器会生成一个随机数(Pre-master secret),并使用证书中的公钥对其进行加密,发送给服务器。
-
服务器私钥解密:服务器使用自己的私钥解密浏览器发送的随机数(Pre-master secret)。
-
生成对称密钥:客户端和服务器使用随机数、证书中的公钥、服务器的私钥等信息,生成一个对称密钥(Session Key),用于对数据进行加密和解密。
-
数据加密和解密:在整个HTTPS会话中,客户端和服务器使用对称密钥对数据进行加密和解密,确保数据传输过程中的安全性。
-
握手结束:客户端和服务器会发送一个Finished消息,确认SSL/TLS握手过程结束。
session和cookie有什么关系
Session 和 Cookie 之间的关系主要体现在 Session ID 的传递上。服务器在用户登录后生成一个 Session ID,并将其存储在 Cookie 中发送给用户的浏览器。
用户的浏览器在后续的请求中会自动将包含 Session ID 的 Cookie 发送回服务器,服务器通过这个 Session ID 来识别用户并恢复其会话状态。
通过这种方式,即使用户关闭并重新打开浏览器,只要 Cookie 中的 Session ID 仍然有效,服务器就能够恢复用户的会话状态。