从输入url到网页加载发生了什么
从输入 URL 到网页加载,涉及到多个步骤和多个组件之间的协作,包括域名解析、建立连接、发送请求、接收响应、解析 HTML 等过程。下面是详细的步骤:
- 域名解析
当用户在浏览器中输入 URL,例如 www.example.com,浏览器会将该 URL 分解为协议(https://)、主机名(www.example.com) DNS 服务器发送一个 DNS 查询请求,以获得主机名对应的 IP 地址。如果本地 DNS 服务器缓存了主机名对应的 IP 地址,则直接返回;否则,本地 DNS 服务器会向根 DNS 服务器、顶级域名服务器、次级域名服务器等逐级查询,直到获得主机名对应的 IP 地址。
- 建立连接
一旦获得了主机名对应的 IP 地址,浏览器会向该 IP 地址的服务器发起连接请求。在建立连接的过程中,浏览器和服务器需要进行一些握手操作,以确保彼此能够正常通信。这些握手操作包括 SYN、SYN-ACK 和 ACK 等。
- 发送请求
当连接建立成功后,浏览器会向服务器发送一个 HTTP 请求报文,包括请求方法、请求头、请求体等信息。例如,在访问 www.example.com 时,浏览器会向服务器发送一个 GET 请求报文。
- 接收响应
服务器收到浏览器发送的请求后,会根据请求报文中的信息,处理相关的业务逻辑,并返回相应的 HTTP 响应报文。响应报文包括响应状态码、响应头、响应体等信息。例如,在访问 www.example.com 时,服务器会返回一个 200 OK 的响应状态码,并将网页内容返回给浏览器。
- 解析 HTML
浏览器接收到服务器返回的响应报文后,会解析 HTML 代码,并根据 HTML 标签和属性等信息,对网页内容进行渲染。在渲染的过程中,浏览器会加载 CSS 样式、JavaScript 脚本等资源,并执行相应的操作,以实现网页的交互和动态效果。
- 显示页面
当浏览器完成对 HTML 代码的解析和渲染后,就可以将网页显示给用户。此时,用户可以在浏览器中看到网页内容,并进行相应的操作,例如点击链接、填写表单等。
总之,从输入 URL 到网页加载,涉及到多个过程和多个组件之间的协作。浏览器需要进行域名解析、建立连接、发送请求、接收响应、解析 HTML 等操作,才能将网页显示给用户。这些过程和组件的优化和调整,可以有效提高网页的加载速度和响应能力,提升用户的体验和满意度。
域名系统简介
域名系统(Domain Name System,DNS)是互联网上的一种分布式数据库系统,用于将域名转换为 IP 地址,是互联网中最重要的基础设施之一。域名系统通过将域名与 IP 地址进行映射,使用户可以使用易于记忆的域名来访问互联网上的资源。
域名系统的结构是一个分层的树状结构,从根节点开始,分为顶级域名、次级域名和子域名等多级域名。域名系统中的每个域名都对应着一段 IP 地址,域名和 IP 地址之间是一一对应的关系。域名系统中的每个节点都可以对应着一个或多个子节点,从而形成了一个完整的域名树状结构。
域名系统中的各个节点之间通过域名解析来实现互相访问。当用户在浏览器中输入一个域名时,浏览器会向本地 DNS 服务器发送一个 DNS 查询请求。本地 DNS 服务器会通过递归查询的方式,从根 DNS 服务器开始,逐层向下查询,最终获得域名对应的 IP 地址。
域名系统的作用不仅仅是将域名转换为 IP 地址,还可以实现邮件传输、网络服务发现等功能。在互联网中,域名系统是非常重要的基础设施之一,为互联网的稳定和发展提供了重要的支持。
DNS解析
DNS(Domain Name System,域名系统)解析是指将域名转换为 IP 地址的过程。在互联网上,每个计算机都有一个唯一的 IP 地址,但是 IP 地址很难记忆,因此域名被用来代替 IP 地址,方便用户访问互联网上的资源。
当用户在浏览器中输入一个域名时,浏览器会向本地 DNS 服务器发送一个 DNS 查询请求。本地 DNS 服务器会首先查看本地缓存中是否有对应的域名解析记录,如果存在,则直接返回对应的 IP 地址。如果本地缓存中不存在对应的解析记录,则本地 DNS 服务器会向根 DNS 服务器发送一个查询请求。
根 DNS 服务器收到查询请求后,会返回一个指向顶级域名服务器的 IP 地址。本地 DNS 服务器根据返回的 IP 地址,向顶级域名服务器发送一个查询请求。顶级域名服务器收到查询请求后,会返回一个指向次级域名服务器的 IP 地址。本地 DNS 服务器根据返回的 IP 地址,向次级域名服务器发送一个查询请求。
次级域名服务器收到查询请求后,会返回对应的 IP 地址。本地 DNS 服务器根据返回的 IP 地址,将解析结果返回给浏览器。浏览器根据返回的 IP 地址,向对应的服务器发起请求,获取网页内容。
DNS 解析过程中,涉及多个 DNS 服务器之间的交互,需要一定的时间和网络资源。为了加快 DNS 解析速度,可以通过增加本地 DNS 缓存、使用 CDN 加速等方式来优化 DNS 解析。
SSL与证书
SSL(Secure Sockets Layer,安全套接层)是一种用于保护网络通信安全的加密协议。SSL 协议通过在网络传输层与传输层之间添加一层安全层,使用公钥加密和私钥解密的方式,保证数据在传输过程中的机密性和完整性。
SSL 协议中的证书(Certificate)是用于验证服务器身份和公钥的一种数字证书。证书中包含了服务器的公钥和一些元数据,如证书颁发机构、证书有效期、证书持有人等信息。证书由数字证书颁发机构(CA,Certificate Authority)签发,并用于证明服务器的身份和公钥的有效性。
在 SSL 协议的握手过程中,客户端会向服务器发送一个 SSL 连接请求,服务器会将自己的证书发送给客户端。客户端通过证书中的颁发机构和有效期等信息,验证证书的合法性,并提取证书中的公钥。之后,客户端使用证书中的公钥加密一个随机生成的密钥,发送给服务器。服务器使用自己的私钥解密得到密钥,之后的通信会使用该密钥进行加密解密,保证通信的安全性。
SSL 协议和证书的使用可以有效保护网络通信的安全,防止中间人攻击等安全问题。在实际应用中,通常使用 HTTPS 协议(HTTP over SSL)来实现安全通信。HTTPS 协议是在 HTTP 协议上加入 SSL 协议进行加密通信的一种协议,可以通过浏览器地址栏中的锁头图标等方式,向用户提供安全性保证的标识。
CDN
CDN(Content Delivery Network,内容分发网络)是一种通过在全球不同地点部署服务器,将内容快速分发到用户身边,提高用户访问速度和稳定性的网络架构。CDN 通常由多台分布在全球不同位置的服务器组成,这些服务器会缓存原始服务器上的静态和动态内容,当用户请求访问这些内容时,CDN 会自动将请求转发到离用户最近的服务器上,从而提高内容的访问速度和稳定性。
静态加速
- 当用户请求访问某个网站或应用程序时,CDN 的 DNS 服务器会解析用户请求,并将请求转发到离用户最近的 CDN 边缘节点上。
- CDN 的边缘节点会检查是否已经缓存了用户请求的静态资源。如果已经缓存,就直接返回缓存的资源;如果没有缓存,就从原始服务器上获取资源,并将其缓存到边缘节点上。
- CDN 的边缘节点将响应返回给用户。
动态加速
CDN 可以分为静态加速 CDN 和动态加速 CDN 两种类型。静态加速 CDN 主要用于加速静态资源(如图片、CSS、JavaScript 等),动态加速 CDN 则主要用于加速动态内容(如网页、API 接口等)。根据业务需求和实际情况,可以选择相应的 CDN 类型来提高网站或应用程序的访问速度和稳定性。
- 当用户请求访问某个网站或应用程序时,CDN 的 DNS 服务器会解析用户请求,并将请求转发到离用户最近的 CDN 边缘节点上。
- CDN 的边缘节点会检查是否已经缓存了用户请求的动态内容。如果已经缓存,就直接返回缓存的内容;如果没有缓存,就将请求转发到原始服务器上进行处理。
- CDN 的边缘节点会通过优化网络传输、缓存数据处理结果等手段,加速动态内容的传输和处理。
- CDN 的边缘节点将响应返回给用户。
小结
- CDN的加速资源跟域名绑定
- 通过域名访问资源,首先是通过DNS查找离用户最近的CDN的节点的IP
- 通过IP访问实际资源,如果CDN上并没有缓存资源,则会到源站请求资源,并缓存到CDN节点上,这样下一次访问时,CDN节点就会有相对应的缓存数据
负载均衡
当用户请求访问某个网站或应用程序时,CDN 的 DNS 服务器会解析用户请求,并将请求转发到离用户最近的 CDN 边缘节点上。
CDN 的边缘节点会检查是否已经缓存了用户请求的动态内容。如果已经缓存,就直接返回缓存的内容;如果没有缓存,就将请求转发到原始服务器上进行处理。
CDN 的边缘节点会通过优化网络传输、缓存数据处理结果等手段,加速动态内容的传输和处理。
CDN 的边缘节点将响应返回给用户。