浏览器输入URL按下enter发生了什么

  1. 输入URL并按下enter;
  2. 浏览器查找当前URL是否存在缓存,并比较缓存是否过期;
  3. DNS解析URL对应的IP;
  4. 根据IP建立TCP连接(三次握手);
  5. HTTP发起请求;
  6. 服务器处理请求,浏览器接收HTTP响应;
  7. 渲染页面,构建DOM树;
  8. 关闭TCP连接(四次挥手);

一、ULR

url由三部分组成:协议//域名:端口号(默认80端口省略)除此之外URL还包含一些路径、查询和其他片段;
如http://www.tuicool.com/search?kw=%E4%;HTTP默认端口80,HTTPS默认端口443(扩展:同源策略,跨域问题);

二、缓存

HTTP缓存有多种规则,根据是否向服务器发起请求,分为强制缓存和对比缓存(暂定);
强制缓存:判断HTTP首部字段:cache-control , Expires

  1. Expires : 是一个绝对时间,即服务器时间,浏览器检查当前时间,若还未到失效时间就直接使用缓存文件。该方法存在一个问题:服务器时间可能与客户端时间不一致。因此该字段已经很少使用;
  2. cache-control : cache-control常用取值:private/no-cache/max-age/must-revalidate,默认为private。max-age中保存着一个相对时间。表示浏览器收到的文件缓存在该时间范围内不会去访问服务器,若浏览器同时存在这两个字段,浏览器总是优先使用cache-control;
    (百度百科cache-contro)https://baike.baidu.com/item/Cache-control/1885913?fr=aladdin
    对比缓存:通过HTTP的last-modified,Etag字段进行判断
  3. last-modified : 是第一次请求资源时,服务器返回的字段,表示最后一次更新的时间,下一次浏览器请求资源时就发送if-modified-since字段。服务器用本地的Last-modified时间与if-modified-since时间比较,若不一致则认为缓存已过期并返回新资源给浏览器;若一致则发送304状态码,让浏览器继续使用缓存;
  4. Etag : 资源的实体标识(哈希字符串),当资源内容更新时,Etag会改变。服务器会判断Etag是否是否变化,若变化则返回新资源,否则返回304;
    浏览器输入URL按下enter发生了什么

三、DNS域名解析(Domain Name System)

(DNS的百度百科 https://baike.baidu.com/item/dns/427444?fr=aladdin)
域名只是与IP地址的一个映射。域名解析的过程就是将域名还原为IP地址的过程。

  1. 首先浏览器检查本地host文件是否有这个网址映射关系,若有就调用这个IP的地址映射,完成域名解析
  2. 若没找到则会查找本地DNS解析,若查找到则返回;
  3. 若还是没找到就会查找本地DNS服务器,若查找到则返回;
  4. 最后迭代查询,按照根域服务器 -> *域.cn -> 第二层域,hb.cn -> 子域,www.hb.cn的顺序找到IP地址

四、TCP连接

再通过第一部的DNS域名解析够获得了服务器的IP地址,在获取到IP地址后,就开始建立第一次连接,这是由TCP协议完成的,主要通过三次握手进行连接

  • 第一次握手:

五、浏览器向服务器发送HTTP请求

六、浏览器接收响应

七、页面渲染