1. DNS解析
输入一个网址并按回车之后浏览器会根据输入的URL查找对应的IP,具体过程如下:
(1)查找浏览器缓存,浏览器会保存一段时间内访问过的一些网址的DNS信息。
(2)如果没有找到对应的IP,浏览器就调用操作系统缓存来继续查找这个网址的DNS信息。
(3)如果还是没找到对应的IP,就发送一个请求到路由器上,路由器在路由器缓存上查找记录的DNS信息。
(4)如果还是没有找到对应的IP,这个请求就会被发送到本地DNS服务器,本地DNS上缓存了一张域名与之IP地址对应的表格,有就直接返回域名对应的IP地址
(5)如果还是没有找到对应的IP, ISP的DNS服务器会将请求发向根域名服务器,然后到顶级域名DNS再到权威DNS,权威DNS是域名解析结果的原出处,它查询到对应的IP地址后告诉本地DNS。
(6)如果到了这里还是找不到域名的对应信息,那就域名错误了。
DNS根据域名查询IP地址的过程为:浏览器缓存 --> 操作系统缓存 --> 路由器缓存–>本地DNS缓存 --> 根DNS–>顶级DNS–>权威DNS。DNS
2. TCP连接
浏览器得到IP后,向服务器发送TCP连接。TCP三次握手目前HTTP协议大多都是1.1,在1.1的协议里,默认开启了keep-alive,这样建立的TCP连接,可以在多次请求中复用,不需要重新连接。
3.浏览器发送HTTP请求
浏览器和服务器建立连接以后,浏览器就给这个IP地址的服务器发送一个http请求,方式为get,,就是去服务器获取一些资源,对于访问页面来说,要获取的页资源往往是一个页面。其本质是在建立起的TCP连接中,按照HTTP协议标准发送一个索要网页的请求。
发送完请求接下来就是等待回应了。
4.服务器处理请求
服务器收到浏览器的请求以后,会解析这个请求(读请求头),然后生成一个响应头和具体响应内容。接着服务器会传回来一个响应头和一个响应,响应头告诉了浏览器一些必要的信息,例如重要的Status Code,2开头如200表示一切正常,3开头表示重定向,4开头是客户端错误,如404表示请求的资源不存在,5开头表示服务器端错误。响应就是浏览器请求的页面内容。
5.浏览器解析渲染页面
6.关闭TCP连接
当数据完成请求到返回的过程之后,根据Connection的Keep-Alive属性可以选择是否断开TCP连接,HTTP/1.1一般支持同一个TCP多个请求,而不是1.0版本下的完成一次请求就发生断开。TCP四次挥手