浏览器输入URL后发生了什么

简介: 我们平时在浏览器输入一个网址 或者 搜索,那么网络世界会发生什么?

1. 合成URL

用户输入URL后浏览器根据输入的信息判断是搜索还是跳转网址,如果是搜索内容则将搜索内容 + 默认的搜索引擎组合成新的URL,如果用户数据的URL是合法网址则直接跳转至输入的URL网址。

2. DNS域名解析

浏览器通过DNS域名解析服务器将输入的域名 解析 为对应服务的IP地址,这样才能访问到域名指定的服务器。

本地DNS服务器查询

本地DNS服务器之间递归查询,在任意一步查询到域名时就会终止递归,返回域名对应的IP地址。
本地DNS解析流程

根域名服务器、顶级域名服务器、权威域名服务器

  • 根DNS服务器负责 返回顶级域 DNS 服务器的 IP 地址,顶级域 DNS 服务器负责 返回权威 DNS 服务器的 IP 地址,权威 DNS 服务器负责 返回相应主机的 IP 地址
  • 如果本地的DNS服务器无法查询,则迭代到根域名服务器、顶级域名服务器、权威域名服务器 查询。

3. 建立 TCP 连接

首先判断请求是否是https的,如果是则在http的基础上套上一层ssl/tls外壳,用于加密通信,每次传输的都是加密后的数据。
TCP三次握手连接:

  • 第一次握手:建立连接,客户端发送连接请求报文,将SYN位置为1,seq为X,然后客户端进入SYN_SEND状态,等待服务器的确认。
  • 第二次握手:服务器收到SYN报文段,服务器收到客户端的SYN报文段,就知道这是一个要建立连接的请求,然后服务器也回复一个SYN的报文段(seq为y),

并且附带ACK(ACK置为X+1)信息用于确认收到了第一次握手请求的信息。发送后服务端进入SYN_RECV状态。

  • 第三次握手:客户端收到了服务器的SYN+ACK信息后,也返回一个ACK(ACK置为y+1)的确认报文。此后客户端和服务端都进入ESTABLISHED状态,完成三次握手。

SSL握手连接

  • 第一阶段 :客户端向服务器发送握手请求,包括所支持的TLS版本和密码组合以供服务器选择,还有一个"client random" 随机字符串
  • 第二阶段 :服务器对客户端进行回应,包括数据证书,服务器选择的密码组合和"server random" 随机字符串
  • 第三阶段 :客户端对服务器发来的证书进行验证,确保对方的合法身份,验证过程具体为(1)检查数字签名(2)验证证书链(3)检查证书有效期(4)检查证书的撤回状态
  • 第四阶段 :客户端向服务器发送另一个随机字符串"premaster secret"(预主密钥),这个字符串经过服务的公钥加密,只有服务器的私钥才能解密。
  • 第五阶段 :服务器使用私钥解密 "premaster secret" 字符串
  • 第六阶段 :生成共享密钥,客户端和服务器均使用 client random、server random、premaster secret,并使用相同的算法生成相同的共享密钥KEY。
  • 第七阶段 : 客户端发送经过共享密钥 KEY 加密过的 "finished" 信号。
  • 第八阶段 : 服务器发送经过共享密钥 KEY 加密过的 "finished" 信号。
  • 第九阶段 :握手完成,之后双方通信使用 共享密钥 KEY 对称加密 安全通信。

4. 发送HTTP请求,服务器处理并返回请求

TCP连接建立后,浏览器就可以利用HTTP/HTTPS协议向服务器发送请求了。服务器接受到请求,就解析请求头,如果头部有缓存相关信息如if-none-match与if-modified-since,则验证缓存是否有效,若有效测返回状态码304,若无效则重新返回资源,状态码为200.

5. 关闭TCP连接

TCP四次挥手

  • 第一次挥手 :客户端(也可以是服务器端)发送一个FIN报文段给服务器,然后客户端进入FIN_WAIT_1状态
  • 第二次挥手 :服务器端收到了客户端发送的FIN报文段,向客户端回一个ACK确认报文,客户端进入FIN_WAIT_2状态
  • 第三次挥手 : 服务器端向客户端发送FIN报文表示这是一个要关闭连接的请求,同事服务端进入LAST_ACL状态。
  • 第四次挥手 :客户端收到服务器端发送的FIN报文,向服务端发送ACK确认报文,然后客户端进入TIME_WAIT状态,服务端收到ACK确认报文后关闭连接,客户端等待1-2MS后关闭连接。

6. 浏览器渲染

  • 渲染进程将 HTML 内容转换为能够读懂DOM 树结构。
  • 渲染引擎将 CSS 样式表转化为浏览器可以理解的styleSheets,计算出 DOM 节点的样式。
  • 创建布局树,并计算元素的布局信息。
  • 对布局树进行分层,并生成分层树。
  • 为每个图层生成绘制列表,并将其提交到合成线程。合成线程将图层分图块,并栅格化将图块转换成位图。
  • 合成线程发送绘制图块命令给浏览器进程。浏览器进程根据指令生成页面,并显示到显示器上。
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
3小时前
|
缓存 网络协议 前端开发
当浏览器输入url的时候会发生什么?
当浏览器输入url的时候会发生什么?
51 0
|
4小时前
【超实用】Angular如何修改当前页面网页浏览器url后面?param1=xxx&param2=xxx参数(多用于通过浏览器地址参数保存用户当前操作状态的需求),实现监听url路由切换、状态变化。
【超实用】Angular如何修改当前页面网页浏览器url后面?param1=xxx&param2=xxx参数(多用于通过浏览器地址参数保存用户当前操作状态的需求),实现监听url路由切换、状态变化。
【超实用】Angular如何修改当前页面网页浏览器url后面?param1=xxx&param2=xxx参数(多用于通过浏览器地址参数保存用户当前操作状态的需求),实现监听url路由切换、状态变化。
|
3小时前
【超实用】Angular如何修改当前页面网页浏览器url后面?param1=xxx&param2=xxx参数(多用于通过浏览器地址参数保存用户当前操作状态的需求),实现监听url路由切换、状态变化。
【超实用】Angular如何修改当前页面网页浏览器url后面?param1=xxx&param2=xxx参数(多用于通过浏览器地址参数保存用户当前操作状态的需求),实现监听url路由切换、状态变化。
|
3小时前
|
JavaScript
【归总】原生js操作浏览器hash、url参数参数获取/修改方法合集
【归总】原生js操作浏览器hash、url参数参数获取/修改方法合集
|
3小时前
|
Web App开发 缓存 网络协议
|
9月前
|
域名解析 JavaScript 前端开发
从浏览器地址栏输入url到显示页面的步骤?
1.浏览器根据请求的 URL 交给 DNS 进行域名解析,找到真实 IP 地址,向服务器发起请求 2.服务器交给后台处理完成后返回数据,浏览器接收文件(HTML、CSS、JS、images等); 3.浏览器对加载到的资源(HTML、CSS、JS、images等)进行语法解析,建立相应的内部数据结构(如HTML的DOM); 4.载入解析到的资源文件,渲染页面,完成。
160 0
|
4小时前
|
缓存 网络协议 前端开发
面试题:浏览器中输入URL返回页面过程?
面试题:浏览器中输入URL返回页面过程?
90 0
|
4小时前
|
存储 Web App开发 JavaScript
Unicode、UTF 和 ISO-8859-1等编码方式详解与浏览器URL编码
Unicode、UTF 和 ISO-8859-1等编码方式详解与浏览器URL编码
352 0
|
6月前
a标签下载特殊字符url手动编码浏览器兼容性不显示
a标签下载特殊字符url手动编码浏览器兼容性不显示
|
7月前
|
域名解析 网络协议 安全
在浏览器中输入URL中会发生什么
在浏览器中输入URL中会发生什么
36 0