惭愧了,很久之前被面试的时候也有面试官问了我这个问题,但是当时回答的很不满意,于是回头看了很多资料,现在也整理一下。
大致可总结为以下几个步骤:
1. DNS解析。
2. TCP链接。
3. 发送HTTP请求。
4. 服务器处理并且返回HTTP请求。
5. 浏览器渲染界面。
6. 连接结束
一 DNS解析
简单点说就是寻找域名对应的IP的这个过程。在这个过程中经历了一下几个环节,浏览器缓存=>系统缓存=>路由器缓存=>IPS服务器缓存=>根域名服务器缓存=>顶级域名服务器缓存=>主域名服务器缓存。
1. 浏览器缓存。在谷歌浏览器下搜索chrome://net-internals/#dns,可以看到dns缓存信息。
2. 系统缓存。系统缓存可以在命令行中输入 vi /etc/hosts (linux中),查看,并且设置,当然可以设置假的,用于本地调试。
DNS负载均衡
DNS可以返回一个合适的机器的IP给用户,例如可以根据每台机器的负载量,该机器离用户地理位置的距离等等,这种过程就是DNS负载均衡,又叫做DNS重定向。大家耳熟能详的CDN(Content Delivery Network)就是利用DNS的重定向技术,DNS服务器会返回一个跟用户最接近的点的IP地址给用户,CDN节点的服务器负责响应用户的请求,提供所需的内容。
二 TCP连接
三次握手,确保连接可靠性。
三 HTTP相关
当服务器与主机建立了连接之后,下面主机便与服务器进行通信。网页请求是一个单向请求的过程,即是一个主机向服务器请求数据,服务器返回相应的数据的过程。
-
浏览器根据 URL 内容生成 HTTP 请求,请求中包含请求文件的位置、请求文件的方式等等;
-
服务器接到请求后,会根据 HTTP 请求中的内容来决定如何获取相应的 html 文件;
-
服务器将得到的 HTML 文件发送给浏览器;
-
在浏览器还没有完全接收 HTML 文件时便开始渲染、显示网页;
-
在执行 HTML 中代码时,根据需要,浏览器会继续请求图片、CSS、JavsScript等文件,过程同请求 HTML ;