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

477 阅读5分钟

大体上可以分为6步(更新中。。。)

DNS域名解析

我们在地址栏里面输入的一般是便于人们记忆的域名,类似于www.xxx.com。而计算机网络中则是通过IP地址进行相互之间的通信的。因此我们需要将URL中的域名解析成IP地址才能与远程服务器建立连接,这就是DNS域名解析。

DNS域名解析过程:
  • 查看浏览器缓存中是否已经有这个域名对应解析过的IP地址。如果有,解析完成;如果没有,进行下一步。
  • 查看操作系统缓存中是否已经有该IP地址。有,解析完成;没有,进行下一步。
  • 向本地服务器查询(LDNS),实际上大约百分八十的域名服务解析都在这里完成了。
  • 向根域名服务器进行查询。
  • 根域名服务器返回给本地域名服务器一个所查询域的顶级域名服务器(gTLD)地址。
  • 本地域名再向上一步返回的顶级域名(gTLD)服务器发送请求。
  • 接受请求的顶级域名服务器查询并返回此域名对应的权威服务器。
  • 权威服务器会查询存储的域名和IP的映射关系表并返回。
  • 把解析的结果返回给用户,用户根据TTL值缓存在本低系统缓存中,域名解析过程结束。
两种查询方式

1.递归查询 主机向本地域名服务器的查询一般是递归查询。 如果主机访问的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS客户的身份,替代主机,向其他根域名服务器继续发出查询请求报文。

2.迭代查询 本地域名服务器向根域名服务器的查询一般是迭代查询。 当根域名服务器接收到本地域名服务器发出的查询请求报文时,要么给出所要查询的IP地址,要么告诉本地域名服务器下一步应当向哪一个域名服务器查询,然后让本地域名服务器进行后续的查询。

浏览器缓存

在解析完url后,浏览器会先到缓存里面查看是否有缓存,如果有缓存的话直接取缓存,没有的话在进行下一步操作。 cookie session

建立TCP连接

三次握手

发送HTTP请求,服务器处理请求,返回响应结果

http请求方法
  • GET:获取资源
  • POST:传输实体主体
  • PUT:传输文件
  • HEAD:获取报文头部
  • DELETE:删除文件
  • OPTIONS:询问支持的方法
  • TRACE:追踪路径
  • CONNECT:要求用隧道协议连接代理
get和post区别

GET 和 POST 到底有什么区别?》知乎这一篇高赞回答讲的很深入。

  1. GET用来“读取”一个资源。读取不会改变服务器上的数据,因此是幂等的,同时因为是读取,所以浏览器可以对读取的资源进行缓存;相反的,POST用来让服务器“做一件事”,因此不是幂等的,不能被浏览器缓存。
  2. 参数位置:GET参数是在URL上的,POST的参数是在body里的。注意,这里只是规范,在浏览器上是这么实现的。但是实际上HTTP协议上没有这个限制,在各类接口中(如Ajax api),就可以根据实际情况,参数写在url上或body里都可以。
  3. 参数大小:在浏览器中,由于上述2的原因,浏览器本身对url长度有限制,导致了GET参数大小有限制,POST由于在body中传数据,因此无限制。
  4. 安全性:由于GET在url中能直接被看到,因此常说它比较不安全。但从专业角度来说,因为HTTP是明文传输,所以两者都不安全。通常是通过HTTPS来提高安全性。
  5. 编码:GET的参数只能支持ASCII,而POST能支持任意编码。但其实从上面可以看到,GET和POST实际上都能用url和body。因此所谓编码确切地说应该是http中url用什么编码,body用什么编码。
  6. 请求次数:HTTP请求可以被大致分为“请求头”和“请求体”两个部分。使用HTTP时大家会有一个约定,即所有的“控制类”信息应该放在请求头中,具体的数据放在请求体里“。于是服务器端在解析时,总是会先完全解析全部的请求头部。这样,服务器端总是希望能够了解请求的控制信息后,就能决定这个请求怎么进一步处理,是拒绝还是接受。客户端总是先发送所有请求头给服务器,让服务器校验。如果通过了,服务器回复“100 - Continue”,客户端再把剩下的数据发给服务器。如果请求被拒了,服务器就回复个400之类的错误,这个交互就终止了。基于此,客户端就能做一些优化,比如内部设定一次POST的数据超过1KB就先只发“请求头”,否则就一次性全发。客户端甚至还可以做一些Adaptive的策略,统计发送成功率,如果成功率很高,就总是全部发等等。因此到底是发一次还是发N次,客户端可以很灵活的决定。

http和https(ssl、加密算法) http1.0 http1.1 http2.0(长连接、短链接) http报文结构 Tcp/IP分层 Tcp/UDP区别

浏览器渲染

关闭TCP连接,四次挥手

四次挥手

附:常见的网络攻击

参考文章 从输入URL到页面加载的过程?如何由一道题完善自己的前端知识体系. 一文读懂一个URL请求的过程是怎样的.