当我们向浏览器的地址栏输入URL的时候,网络会进行一系列的操作,最终获取到我们所需要的文件,如何交给浏览器进行渲染
我们所关注的问题也就是:
- 如何获取到我们所需要的文件
- 浏览器是如何渲染的
- URL解析
- DNS 解析:缓存判断 查询IP地址
- TCP 连接:TCP 三次握手
- SSL/TLS四次握手(只有https才有这一步)
- 浏览器发送请求
- 服务器响应请求并返回数据
- 浏览器解析渲染页面
- 断开连接:TCP 四次挥手
浏览器先会判断输入的字符是不是一个合法的URL结构,如果不是,浏览器会使用搜索引擎对这个字符串进行搜索
URL结构组成
https://www.example.com:80/path/to/myfile.html?key1=value1&key2=value2#anchor
- 协议:https:// 互联网支持多种协议,必须指明网址使用哪一种协议,默认是 HTTP 协议。 也就是说,如果省略协议,直接在浏览器地址栏输入www.example.com,那么浏览器默认会访问http://www.example.com。 HTTPS 是 HTTP 的加密版本,出于安全考虑,越来越多的网站使用这个协议。
- 主机:www.example.com 主机(host)是资源所在的网站名或服务器的名字,又称为域名。上例的主机是www.example.com。 有些主机没有域名,只有 IP 地址,比如192.168.2.15。
- 端口:https:// 同一个域名下面可能同时包含多个网站,它们之间通过端口(port)区分。 “端口”就是一个整数,可以简单理解成,访问者告诉服务器,想要访问哪一个网站。 默认端口是80,如果省略了这个参数,服务器就会返回80端口的网站。 端口紧跟在域名后面,两者之间使用冒号分隔,比如www.example.com:80。
- 路径:/path/to/myfile.html 路径(path)是资源在网站的位置。比如,/path/index.html这个路径,指向网站的/path子目录下面的网页文件index.html 互联网的早期,路径是真实存在的物理位置。现在由于服务器可以模拟这些位置,所以路径只是虚拟位置 路径可能只包含目录,不包含文件名,比如/foo/,甚至结尾的斜杠都可以省略 这时,服务器通常会默认跳转到该目录里面的index.html文件(即等同于请求/foo/index.html),但也可能有其他的处理(比如列出目录里面的所有文件),这取决于服务器的设置 一般来说,访问www.example.com这个网址,很可能返回的是网页文件www.example.com/index.html
- 查询参数:?key1=value1&key2=value2 查询参数(parameter)是提供给服务器的额外信息。参数的位置是在路径后面,两者之间使用?分隔 查询参数可以有一组或多组。每组参数都是键值对(key-value pair)的形式,同时具有键名(key)和键值(value),它们之间使用等号(=)连接。比如,key1=value就是一个键值对,key1是键名,value1是键值 多组参数之间使用&连接,比如key1=value1&key2=value2
- 锚点:#anchor 锚点(anchor)是网页内部的定位点,使用#加上锚点名称,放在网址的最后,比如#anchor 浏览器加载页面以后,会自动滚动到锚点所在的位置 锚点名称通过网页元素的id属性命名
DNS(Domain Names System),域名系统,是互联网一项服务,是进行域名和与之相对应的 IP 地址进行转换的服务器
第一步:缓存判断判断是正确的URL格式之后,DNS会在我们的缓存中查询是否有当前域名的IP地址
基本步骤:
- 浏览器缓存:浏览器检查是否在缓存中
- 操作系统缓存:操作系统DNS缓存,去本地的hosts文件查找
- 路由器缓存:路由器DNS缓存
- ISP 缓存: ISP DNS缓存(ISP DNS 就是在客户端电脑上设置的首选 DNS 服务器,又称本地的DNS服务器)
在经历上述缓存查找还没有找到的话,就进行下一步查询操作
第二步:查询IP地址浏览器会去根域名服务器中查找,如果还没有就去顶级域名服务器中查找,最后是权威域名服务器。
找到IP地址后,将它记录在缓存中,供下次使用。
TCP连接:三次握手简单理解简单的理解就是:
客户端:hello,你好,你是server吗?
服务端:hello,你好,我是server,你是client吗
客户端:yes,我是client
开始数据传输.....
——————————————————————————————————————————
客户端(男人):我喜欢你,咱俩处对象吧
服务端(女人):我也喜欢你,我答应你
客户端(男人):太棒了,我们现在去看电影吧
开始数据传输.....
然后双方就正确建立连接,开始传输数据
详细分析