例题:
当我们在 web 浏览器的地址栏中输入:www.baidu.com
,具体发生了什么?
分析: 当面试官问出这句话的时候不仅仅涉及到了http的请求过程,甚至还涉及到了浏览器的解析。
一、Http大致请求流程
- 对
www.baidu.com
这个网址进行 DNS 域名解析,得到对应的 IP 地址 - 根据这个
IP
,找到对应的服务器,发起TCP
的三次握手 - 建立
TCP
连接后发起HTTP
请求 - 服务器响应
HTTP
请求,浏览器得到html
代码 - 浏览器解析
html
代码,并请求 html 代码中的资源(如 js、css、图片等)(先得到 html 代码,才能去找这些资源) - 浏览器对页面进行渲染呈现给用户
- 服务器关闭TCP 连接
二、详解请求过程
2.1 DNS怎么找到域名的?(域名解析过程)
- DNS定义:
DNS( Domain Name System
)`是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。 - DNS查询:
DNS 查询
就是将域名转换成IP
的过程,这个过程短的话 2ms 几乎无感,长则可能达到几秒钟; - DNS查找顺序:浏览器缓存-> 系统缓存-> 路由器缓存->
ISP DNS
缓存 -> 递归搜索; 逐步读取缓存,直到拿到IP地址。
2.1.1 浏览器缓存
- 浏览器缓存定位:
chrome://net-internals/#dns
- 首先会搜索浏览器自身的DNS缓存,操作系统没有设定浏览器存储DNS记录的时间长短,不同的浏览器都有一个固定时间的缓存,时长1~30分钟不等,主要是为了减少网络请求的损耗;chrome浏览器的缓存只有1分钟,看缓存有没有过期,过期的话缓存的解析就结束了。
- 浏览器DNS缓存的时间跟DNS服务器返回的
TTL
值无关。注:TTL(Time-To-Live)
,域名解析记录在DNS服务器中的存留时间。TTL这个参数告诉本地DNS服务器,域名缓存的最长时间。例如:阿里云解析默认的TTL是10分钟(本地DNS服务器对于域名的缓存时间是10分钟),10分钟之后,本地DNS服务器就会删除这条记录,删除之后,如果有用户访问这个域名,就要重复DNS解析流程。如果网站已经稳定,不会经常更换IP,可将TTL设置到协议的最大值,即24小时,这样可以让域名解析记录更长时间的存放在本地DNS服务器中,加快用户访问。