在浏览器的地址栏中输入 http://blog.xyb.cool
,浏览器是如何进行 HTTP 请求拿到资源的呢?
-
首先需要构建 HTTP 请求
浏览器会构建一个请求行信息
GET http://blog.xyb.cool HTTP1.1
-
查找缓存
发起请求前,浏览器会查看该资源是否命中强缓存,如果没命中则进行协商缓存的请求。
-
准备服务器端口和ip地址
浏览器使用域名访问服务器,那浏览器是如何知道服务器的 IP 地址的呢?
在网络中有一项服务叫 DNS域名系统 ,这个服务的作用就是把域名和IP地址一一映射,使得不用输入形如
http:// 10.152.66.4
的url,而使用域名替代繁琐的IP地址,这就是 DNS 的主要作用。浏览器首次请求该域名 -> 本地无DNS缓存 -> 请求网络中的 DNS 服务器,获得目标主机的 IP
浏览器二次请求该域名 -> 本地有DNS缓存 -> 使用浏览器本身的DNS缓存,获得目标主机的 IP
-
等待 TCP 队列
有些浏览器对 TCP 连接会有限制,比如谷歌浏览器,一个域名最多只能建立6个TCP连接,如果超过这个数,只能进入TCP队列等待之前的连接完成。
-
建立 TCP 连接
三次握手四次挥手建立连接
注意:一旦服务器向客户端发送完数据以后就要断开连接,
-
发送 HTTP 请求
把带有 请求行 ,请求头,请求体,的请求发送给服务器。
-
获取 HTTP响应
得到服务器的响应,在浏览器上进行渲染。
特殊情况:301重定向,重定向的地址为响应头中的 location 字段。