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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
.cn 域名,1个 12个月
简介: 我们平时在浏览器输入一个网址 或者 搜索,那么网络世界会发生什么?

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 节点的样式。
  • 创建布局树,并计算元素的布局信息。
  • 对布局树进行分层,并生成分层树。
  • 为每个图层生成绘制列表,并将其提交到合成线程。合成线程将图层分图块,并栅格化将图块转换成位图。
  • 合成线程发送绘制图块命令给浏览器进程。浏览器进程根据指令生成页面,并显示到显示器上。
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
3月前
|
缓存 网络协议 前端开发
当浏览器输入url的时候会发生什么?
当浏览器输入url的时候会发生什么?
79 0
|
21天前
|
缓存 网络协议 前端开发
一步步揭秘:浏览器输入URL后的那些事儿
大家好,我是小米!你有没有好奇过,当你在浏览器输入一个网址并按下回车键后,到底发生了什么神奇的过程?从DNS解析到TCP连接,从发送HTTP请求到浏览器渲染,本文将带你深入了解这个复杂而又迷人的过程,让我们一起探索吧!
27 2
|
3月前
|
缓存 负载均衡 网络协议
在浏览器地址栏中输入URL后发生了什么
这是一个关于网页加载过程的概述:首先,浏览器查询IP地址,通过DNS解析域名;接着,建立TCP连接,发起HTTP请求;服务器处理请求并返回HTTP响应;最后,浏览器解析和渲染网页内容。过程中涉及DNS缓存、TCP三次握手、HTTP请求与响应、HTML解析、CSS和JS加载,以及渲染树的构建。为了优化网站性能,可以减少DNS查询、合并文件、压缩资源、提前加载CSS和延迟加载JS。
|
29天前
|
Web App开发 前端开发 JavaScript
Chrome插件实现问题之用户在浏览器中输入URL后,浏览器进程会进行什么操作
Chrome插件实现问题之用户在浏览器中输入URL后,浏览器进程会进行什么操作
|
20天前
|
缓存 网络协议 Java
(六)网络编程之化身一个请求感受浏览器输入URL后奇妙的网络之旅!
在浏览器上输入一个URL后发生了什么? 这也是面试中老生常谈的话题,包括网上也有大量关于这块的内容。
|
2月前
|
域名解析 存储 缓存
HTTP请求流程概览:浏览器构建请求行含方法、URL和版本;检查缓存;解析IP与端口
【6月更文挑战第23天】 HTTP请求流程概览:浏览器构建请求行含方法、URL和版本;检查缓存;解析IP与端口;TCP连接(HTTP/1.1可能需排队);三次握手;发送请求头与体;服务器处理并返回响应;TCP连接可能关闭或保持;浏览器接收并显示响应,更新缓存。HTTP版本间有差异。
47 5
|
1月前
|
Web App开发 前端开发
canvas保存图片时,谷歌浏览器Chrome报错【解决方案】Not allowed to navigate top frame to data URL
canvas保存图片时,谷歌浏览器Chrome报错【解决方案】Not allowed to navigate top frame to data URL
51 0
|
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开发 缓存 网络协议