前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >[ WEB ] 从地址栏输入 URL 之后发生了啥?

[ WEB ] 从地址栏输入 URL 之后发生了啥?

原创
作者头像
GavinUI
修改于 2021-04-12 10:33:56
修改于 2021-04-12 10:33:56
1.3K0
举报
文章被收录于专栏:GavinUIGavinUI

从浏览器到服务器的整体过程感觉是一个前端开发的最基础知识,越是基础越是容易让人忽略,这里也做个思路笔记。

域名判断

在输入地址栏之前,浏览器会对输入的内容进行检查,如果是一个符合格式的正确 url 就会执行 DNS解析,如果不是,比如输入了一些字符串,那么就会执行搜索功能。如图:

DNS 解析

DNS 解析过程

首先,在访问一个网站的时候并不是只靠一个网址就可以找到对应的服务器,而是需要一个 ip地址。网址只是为了方便大家记忆,而并不是一个准确的地址。

比如,我需要打电话给某个人,我知道这个人的名字是没有用的,我必须通过电话本查找到他的电话号码,我才能打给他。而这个对应过来就是

  • 人名 就是 网址
  • 电话号码 就是 IP
  • 查找电话本 就是 DNS 解析

而DNS 的解析又不是像查电话本那样从头查到尾那么简单,而是一层层逐级向上的查找,下面是我画的一张 DNS 解析流程图。

首先,在浏览器输入 www.qq.com 之后 ,输入的 url 符合地址格式执行 DNS解析。而 DNS 解析的解析步骤为:

  • 第一步:查找本地域名服务器,查看 www.qq.com 这个域名的 ip是多少。有则返回 IP 地址,无则执行下一步。
  • 第二步:查找根域名服务器,查看 www.qq.com 这个域名的 IP 是多少 ,有则返回 IP 地址,无则执行下一步。
  • 第三步:查找顶级域名服务器,查看 www.qq.com 这个域名 IP 是多少 ,有则返回 IP 地址 ,无则执行下一步。
  • 第四步:由顶级域名服务器得知域名服务器地址,再从查找域名服务器中查找到 IP地址返回。

这里也说明一下,一个 url 是怎么分根域名,和顶级域名的。

例如: 这个域名 : www.ac.qq.com

他的域名分布是这样的 : www( 主机 ). ac( 三级域名 ). qq( 二级域名 ) .( 根域名 ) .com( 顶级域名 )

DNS 优化

DNS 缓存和 DNS 重定向是 DNS 优化的重要手段,其核心就是减少请求次数。

DNS 缓存

从上面的流程得知,DNS的解析是层层向上,查找到再返回 ip 地址。那么,在这个过程中也可以将找到的 ip 地址保留下来,下次就可以直接地读取。

DNS 缓存就是把查找到的 IP 地址,临时保存下来,而保存这个 ip 的也有很多的环节。比如,浏览器缓存,客户端系统本身的缓存,路由器缓存,根域名服务器缓存 ,ISP 服务器缓存。

比如,浏览器缓存,二次请求的时候,就不需要层层解析了,浏览器已经记下了这个服务器的 ip 地址,直接访问即可。

DNS 重定向

DNS 重定向就是把请求的距离缩短,可以根据距离用户最近或者是负载量较小的服务器给出相应的 ip 地址,这个也叫 DNS负载均衡

一直所用到的 CDN 资源,利用的也是这个原理,DNS 服务器会返回一个用户最近的 ip 地址,CDN节点的服务器负责响应提供数据。

确认连接(三次握手)

在经过了 DNS 的解析之后,确认了服务器的位置之后,就开始发起请求,而这个过程我们称为 “三次握手”。

有一次脱口秀上有个叫庞博的工程师,他用最简单的语言解释了什么是三次握手,我到现在还记得,是这样说的,有个人在敲门:

  • 叩 叩 叩,请问有人在吗?
  • 有人在。
  • 好的。

这个就是三次握手。

下面还是简述一下什么是三次握手的过程,如图:

  • 第一次请求:客户端发送一个 SYN=1,Seq=X 的数据给到服务器,成为第一次握手
  • 第二次请求:服务器返回一个 SYN=1 ,ACK=X+ 1的响应包表示已经接收到了请求,称为第二次握手
  • 第三次请求:客户端再发回一个 ACK=Y + 1,Seq= Z 的数据包,表示确认握手结束。

之所以需要三次而不是两次,是因为要防止已经失效的请求报文又传递给了服务器。就比如,客户端发了一个请求 A 给服务器,请求 A 因为延迟等关系还没有到达服务器,

这个时候,客户端又发送了一个 请求 B ,这个时候服务器先接收到了。

收到之后,请求 A 也到了,而服务器会误以为 是一个新的请求,那么就和 A连接上了,并且向客户端发送确认,但此时客户端的请求已经不是之前的那一次,就会产生错误。

发送请求

在进行了三次握手的确认之后,就开始发起 请求报文。HTTP 的请求就是构建请求报文同时通过 tcp

协议发送到指定的服务器端口。

HTTP协议是80/8080,HTTPS的端口是443

请求的报文是由请求行,请求头,请求空行和请求体组成的。

  • 请求行:请求行里面有 url 信息和 请求的方法,比如 post get put delete等方法。
  • 请求头:包含一些附加的信息例如常用的 Cookie, User-Agent , Accept, Accept-Charset, Accept-Encoding, Accept-Language, Content-Type, Authorization等参数,
  • 请求体:包含一些参数信息,现在请求的数据格式一般为json,就需要设置Content-Type: application/json。

服务器返回数据

响应报文

响应报文由响应行、响应头部、响应主体三个部分组成。

  • 响应行:包含了一些状态码协议和版本
  • 响应头:包含了一下附加信息,其中包括 Connection 这个会返回一个keep-alive 告诉浏览器连接上了之后不需要断开TCP连接
  • 响应体:内容数据的存放仓库,比如一些字符串或者是一些静态资源。

相应的状态码 大致的参数解释就是:

  • 1xx 为请求已经成功地接收;
  • 2xx 表示请求成功
  • 3xx 表示重定向
  • 4xx 表示客户端错误
  • 5xx 表示服务器错误

前端的同学只要看到 5xx, 那么就是时候去找你的后台好基友了。

浏览器渲染

浏览器是一遍解析一遍渲染的一个过程,浏览器在拿到 html 文本之后 就会进行解析,之后再加载其他的 css 或者 js 等文件。

请求的时候根据浏览器的不同,并发的请求数量也不一样,比如像谷歌浏览器的并发请求是6次。加载回来的资源也不一定是按顺序回来,有一些体积比较小的文件可能就会优先回来。

这里有个小点,就是问什么很一般会把js 文件的加载放在底部,是因为要确保节点生成之后才进行一些节点的操作,否则在节点还没有生成的时候执行绑定操作是会失效的。

渲染过程

页面渲染的过程,大致分为 5个过程:

  1. 根据HTML 解析生成 DOM 树;
  2. 根据 CSS 解析生产 CSS规则树;
  3. 集合 DOM 树和 CSS 规则树 生成 render tree ;
  4. 根据 render tree 计算节点信息;
  5. 根据已经计算好的节点信息绘制渲染;

整理如图:

这里的 layout 为什么是双线箭头,是因为如果布局节点发生变化就会触发回流计算,之后再执行 paint 。

断开连接

四次挥手

当数据传送完毕,这个时候就需要断开 tcp 协议,也称四次挥手,过程是:

  1. 由主动方发起 FIN,ACK,SEQ 报文,表示数据已经传输完毕,第一次挥手。
  2. 被动方接收同时发起ACK,SEQ 报文 表示同意关闭,第二次挥手。
  3. 被动方请求关闭连接,第三次挥手。
  4. 主动方确认关闭的报文之后,关闭连接,第四次挥手。

如下图:

总结

HTTP 协议如果深挖其实还有很多东西,一般也不需要全部吃得透透的,但是大致的流程还是要了解。至少要说得清楚是怎么一回事。


image 的草莓千层雪太甜了。。

欢迎小伙伴在我的后台留言 @GavinUI
欢迎小伙伴在我的后台留言 @GavinUI

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
经典面试题:在浏览器地址栏输入一个 URL 后回车,背后发生了什么
在浏览器的地址栏输入一个 URL 后回车,背后到底发生了什么才能使得一个界面完美的展现在我们眼前?
飞天小牛肉
2021/02/26
6.5K1
经典面试题:在浏览器地址栏输入一个 URL 后回车,背后发生了什么
从输入url到页面展示到底发生了什么?
刚开始写这篇文章还是挺纠结的,因为网上搜索“从输入url到页面展示到底发生了什么”,你可以搜到一大堆的资料。而且面试这道题基本是必考题,二月份面试的时候,虽然知道这个过程发生了什么,不过当面试官一步步追问下去的,很多细节就不太清楚了。
沙漠尽头的狼
2021/12/01
1.1K0
从输入url到页面展示到底发生了什么?
地址栏中输入网址后发生了什么?
网址的学名叫做统一资源定位符(Uniform Resource Locator, 常缩写为URL), 我们知道现在的互联网其实就是由众多资源所构成的一张巨大的网, 如何定位那些资源就是靠的URL, 因此我们也可以把URL理解为是网络上资源的“门牌号“, 我们在浏览器中输入网址, 就相当于开一辆车(浏览器)去找一个地址(URL)
Java3y
2019/08/27
2.3K0
地址栏中输入网址后发生了什么?
一个页面从输入URL到加载显示完成,发生了什么?
面试经典题——URL加载 一、涉及基本知识点: 1. 计算机网络 五层因特尔协议栈: 应用层(dns、http):DNS解析成IP并完成http请求发送; 传输层(tcp、udp):三次握手四次挥手模式建立tcp连接; 网络层(IP、ARP):IP寻址; 数据链路层(PPP):将请求数据封装成帧; 物理层:利用物理介质传输比特流(传输的时候通过双绞线、电磁波等) OIS七层框架:多了两层即,会话层(处理两个通信系统中交换信息的表示方式)和表示层(管理不同用户和进程之间的对话)。 get和post的
keyWords
2018/09/19
1.6K0
从URL输入到页面展现到底发生什么?
打开浏览器从输入网址到网页呈现在大家面前,背后到底发生了什么?经历怎么样的一个过程?先给大家来张总体流程图,具体步骤请看下文分解!
Nealyang
2019/09/29
1K0
从URL输入到页面展现到底发生什么?
浏览器中输入URL返回页面过程(超级详细)、DNS域名解析服务,TCP三次握手、四次挥手
在软件开发、Java、后端的面试中,浏览器中输入URL到页面返回的全过程 是一道非常经典的面试题,更是经常被作为面试的压轴题出现。有时也会通过其他方式来问,譬如:
寻求出路的程序媛
2024/11/05
2180
浏览器中输入URL返回页面过程(超级详细)、DNS域名解析服务,TCP三次握手、四次挥手
用户输入网址到页面返回都发生了什么?
浏览器做的第一步就是会解析URL得到里面的参数,分析域名是否规范,并将域名和需要的请求的资源分离开来,从而了解需要请求的是哪个服务器,请求的是服务器上的什么资源等等
不叫猫先生
2023/11/04
2500
用户输入网址到页面返回都发生了什么?
从输入url到页面返回到底发生了什么
1. 前言 Google应该是开发者平日里用得最多的网站之一,今早笔者在浏览器地址栏里键入www.google.com的时候,突然想了解下这背后的网络通信过程究竟是怎么样的。毕竟自己也算是一名Web开发工程师,光是TCP/IP的书也看过不少,但是至始自终却从未思考过这个问题,所以话不多说,让我们来一次深入体验吧。由于Google比较特殊,我们就用news.cnblogs.com站点做一个介绍好了。 本文适合具有一定的计算机网络相关背景知识的读者,不过只要最低不要比笔者还低就行。笔者在这方面大概战五渣的水平
潘成涛
2018/01/18
8030
从输入url到页面返回到底发生了什么
用户输入网址到页面返回都发生了什么?(全面分析)
浏览器做的第一步就是会解析URL得到里面的参数,分析域名是否规范,并将域名和需要的请求的资源分离开来,从而了解需要请求的是哪个服务器,请求的是服务器上的什么资源等等
can4hou6joeng4
2023/11/29
2030
从URL输入到页面展现到底发生什么?
URL(Uniform Resource Locator),统一资源定位符,用于定位互联网上资源,俗称网址。
loveX001
2022/09/30
5700
【计网】网络协议栈学习总结 --- 浏览器上输入网址域名后点击回车,到底发生了什么?
经过对计算机网络的学习,我们了解了网络通信的过程,熟悉了网络协议栈各个层的工作机制与作用。那么现在我们回过头来看一个问题:
叫我龙翔
2024/10/31
1040
【计网】网络协议栈学习总结 --- 浏览器上输入网址域名后点击回车,到底发生了什么?
浏览器输入URL后发生了什么
在网络世界,你肯定记得住网站的名称,但是很难记住网站的 IP 地址,因而也需要一个地址簿,就是 DNS 服务器。DNS 服务器是高可用、高并发和分布式的,它是树状结构,如图:
前端迷
2020/02/19
4.3K0
浏览器输入URL后发生了什么
打开一个网页背后都发生了什么?
这是一个老生常谈的话题,我今天还是想凭我自己的理解,用自己的话来捋一捋这个过程。
谭小谭
2019/06/03
1.7K0
从输入URL到页面加载发生了什么
问题:在浏览器中输入URL到整个页面显示在用户面前时这个过程中到底发生了什么。仔细思考这个问题,发现确实很深,这个过程涉及到的东西很多。
Java后端技术
2018/08/09
1.4K0
从输入URL到页面加载发生了什么
从百度/谷歌搜索上输入一个网址,到浏览器加载出网站页面的过程中,发生了什么
先看本地域名服务器是否缓存该地址,然后各服务器依次递归.(根域名服务器) -> .com -> google.com. -> www.google.com.(这样是不是会造成多次请求连接浪费资源?)
归思君
2023/10/16
2740
从百度/谷歌搜索上输入一个网址,到浏览器加载出网站页面的过程中,发生了什么
「一道面试题」输入URL到渲染全面梳理上-网络通信篇
从输入 URL 到页面渲染发生了什么?比如在浏览器输入了 www.qq.com 后浏览器是怎么把最终的页面呈现,这是一个非常经典的面试题,不管是大公司还是小公司甚至前端或后端的面试中命中率都极高,因为涉及到的知识点和可挖掘的地方比较多,而且这中间几乎每一步都是可以优化的
isboyjc
2022/03/28
6610
「一道面试题」输入URL到渲染全面梳理上-网络通信篇
从输入url到看到页面的过程分析
我思考了很多知识组织方法来帮助理解网络知识,比如按osi模型从底至上,或者按协议种类,或者按网络发展史。但最终我还是决定选择用这个经典的问题,将网络知识串成线。理解从输入url到看到页面的过程,弄明白这中间有哪些步骤,再仔细分析这些步骤的原理和行为,是我所能想到最清晰的一条知识脉络了。
love丁酥酥
2018/08/27
1.3K0
从输入url到看到页面的过程分析
终极解密输入网址按回车到底发生了什么
详解输入网址点击回车,后台到底发生了什么。透析 HTTP 协议与 TCP 连接之间的千丝万缕的关系。掌握为何是三次握手四次挥手?time_wait 存在的意义是什么?全面图解重点问题,再也不用担心面试问这个问题。
码哥字节
2020/10/27
7090
终极解密输入网址按回车到底发生了什么
从输入url到页面加载完成发生了什么详解
这是一道经典的面试题,这道题没有一个标准的答案,它涉及很多的知识点,面试官会通过这道题了解你对哪一方面的知识比较擅长,然后继续追问看看你的掌握程度。当然我写的这些也只是我的一些简单的理解,从前端的角度出发,我觉得首先回答必须包括几个基本的点,然后在根据你的理解深入回答。
IT人一直在路上
2019/09/18
1.5K0
从输入url到页面加载完成发生了什么详解
在浏览器地址栏键入URL,按下回车之后经历的流程/常见状态码/get请求和post请求的区别/Cookie和Session的区别
HTTP本身是无连接的,正常我们每次请求数据都要重新建立携带数据连接(如登录),但是这样相当麻烦,因此我们引入了某些机制让HTTP具备状态,其中两个便是cookie,session.
名字是乱打的
2022/05/13
8980
在浏览器地址栏键入URL,按下回车之后经历的流程/常见状态码/get请求和post请求的区别/Cookie和Session的区别
推荐阅读
相关推荐
经典面试题:在浏览器地址栏输入一个 URL 后回车,背后发生了什么
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文