在浏览器输入url,按下回车后究竟发生了什么
这是一个经典的网络问题:在浏览器输入url,按下回车后究竟发生了什么?
浏览器输入域名后
1、浏览器通过DNS将url地址解析为ip(如果有缓存直接返回缓存,否则递归解析)
2、通过DNS解析得到了目标服务器的IP地址后,与服务器建立TCP连接
ip协议:选择传输路线,负责找到 tcp协议:三次握手,分片、可靠传输、重新发送的机制
TCP3次握手连接:浏览器所在的客户机向服务器发出连接请求报文(SYN标志为1);服务器接收报文后,同意建立连接,向客户机发出确认报文(SYN,ACK标志位均为1);客户机接收到确认报文后,再次向服务器发出报文,确认已接收到确认报文;此处客户机与服务器之间的TCP连接建立完成,开始通信。
3、浏览器通过http协议发送请求(增加http的报文信息)
浏览器向主机发起一个HTTP-GET方法报文请求。请求中包含访问的URL,也就是输入的网址。Cookies如果是首次访问,会提示服务器建立用户缓存信息,如果不是,可以利用Cookies对应键值,找到相应缓存,缓存里面存放着用户名,密码和一些用户设置项。
4、某些服务会做永久重定向响应
重定向的作用:重定向是为了负载均衡或者导入流量,提高SEO排名。
5、浏览器跟踪重定向地址 当浏览器知道了重定向后最终的访问地址之后,重新发送一个http请求,发送内容同上。
6、服务器接收请求后,查库,读文件,拼接好返回的http响应 返回状态码200 ,表示服务器可以响应请求,返回报文,由于在报头中Content-type为“text/html”,浏览器以HTML形式呈现,而不是下载文件。
7、释放TCP连接
- 浏览器所在主机向服务器发出连接释放报文,然后停止发送数据;
- 服务器接收到释放报文后发出确认报文,然后将服务器上未传送完的数据发送完;
- 服务器数据传输完毕后,向客户机发送连接释放报文;
- 客户机接收到报文后,发出确认,然后等待一段时间后,释放TCP连接;
8、浏览器收到html,开始渲染,解析,浏览器显示页面
9、浏览器发送获取嵌入在HTML中的其他内容 比如一些样式文件,图片url,js文件url等,浏览器会通过这些url重新发送请求,请求过程依然是HTML读取类似的过程,查询域名,发送请求,重定向等。不过这些静态文件是可以缓存到浏览器中的,有时访问这些文件不需要通过服务器,直接从缓存中取。