当我们用键盘敲下www.baidu.com的时候都发生了些什么?
下面我们来看看到底发生了些什么:
1.首先根据域名查找到对应的IP:
查询浏览器中缓存的DNS记录,如果有则获取对应IP,没有继续往下。
查找系统缓存(操作系统级别对DNS的缓存),如果有返回对应IP,没有继续往下。
查找路由器中的缓存(通常路由器中缓存近期访问过的域名信息以及对应的IP信息),如果有返回对应IP,没有继续往下。
查找ISP所缓存的DNS,如果查询到对应记录,返回该记录对应的IP地址。反之,继续往下。
由ISP通过一些列算法找到最近DNS服务器,发起域名解析请求。首先从顶级域名(作为root)开始解析。本质是一颗树的查找,通过搜索找到真正对应的IP。
2.浏览器根据域名解析获取的IP,向服务器发起请求(建立在TCP/IP之上):
请求过程中会将当前网站用户的cookie信息,如果有就会将带入到请求报文中。
3.将服务器端的html反馈回来。
4.如果对于图片、css、js没有缓存则,发起文件的下载,下载到本地缓存目录下。如果有缓存,则通过请求报文和应答报文中的Expire、Cache-control、if-Modified-Since、
Last-Modified、if-none-match、Etag等内容判断当前客户端缓存是否有效,如果有效就304,反之从新从服务端下载。
备注:
另外对于一个细节就是域名后面的“/”如果没有添加这个,服务器会响应一个重定向,结果造成一次不必要的握手。浏览器遇上这种情况会自己添加上一个“/”。
添加一个图