当输入url到地址栏中,敲下回车客户端浏览器与服务器是怎么传输数据交互
主要就是这四个方面:
主要流程如下: 客户端根据域名查找对应的IP地址; 客户端根据IP地址与服务器建立连接; 客户端与服务器通信; 客户端与服务端断开连接。
1.查找IP 当我们在地址栏中输入url,首先浏览器会通过url去寻找要建立连接的服务器,但是一般我们都会使用域名搜索 例如 www.baidu.com 就是通过域名来访问, 通过向DNS服务器查询目的服务器的IP地址,查询IP具体步骤是先通过浏览器的DNS缓存中查找是否有符合的IP地址,如果没有就到操作系统中的一个hosts文件中查找是否有对应的IP地址,如果没有,才是真正的到DNS服务器上查询,首先到距离最近的本地域名服务器中查询,如果找到就返回(一般都在这里找得到),没找到继续向根域名服务器(root Name Server)发送请求,根域名服务器返回一个顶级域名服务器地址,此时本地域名服务器就会给顶级域名服务器发送请求,顶级域名服务器找到对应的IP返回给本地域名服务器,本地域名服务器收到后会缓存一份域名和对应IP,最后返回给浏览器
2.建立连接 拿到目标服务器的IP地址后就会向该服务器发起连接,也就是TCP三次握手
3.通信过程 连接建立完成之后,浏览器就会向服务器发送请求页面资源的http请求,该请求数据会经过应用层、传输层、网络层、数据链路层一路封装转发,最后达到服务器的物理层在层层解封拿到数据内容,服务器根据请求内容找到对应的Servlet代码,执行代码根据请求构造响应(状态行、消息报头、响应正文),把相应回传给客户端,这其中当服务器访问量较大时,会先发送到Nginx负载均衡器,然后这个负载均衡器通过一定的负载均衡算法来找到当前状态最佳的WEB服务器来处理这个请求,然后返回给Ngnix,再由Nginx传给客户端(其中如果是静态页面会先从Nginx缓存中查找) 客户端收到服务器的响应,浏览器的渲染引擎会将HTML文档构成一个DOM文档对象模型,解析加载样式CSSOM(层叠样式表模型) ,最后创建渲染树,包含一系列要被渲染的对象,而这个渲染树的最终通过绘制呈现到页面
4.断开连接 客户端浏览器和服务器通信完成之后,便会断开连接,即四次挥手
|