当前位置: 首页 > 后端技术 > Java

面试惊喜72:输入URL后会执行什么流程?

时间:2023-04-01 23:17:51 Java

在浏览器中输入网址后,会执行以下过程:执行DNS域名解析;封装HTTP请求包;封装TCP请求包;建立TCP连接(3次握手);从客户端向服务器端传递参数;服务器端获取到客户端参数后,进行相应的业务处理,然后将结果封装成HTTP数据包返回给客户端;server端和client端交互完成,断开TCP连接(挥手4次);browse服务器通过自己的执行引擎将最终结果渲染并显示给用户。1、DNS域名解析在网络中是靠IP来进行身份定位的,所以URL访问的第一步就是获取服务器的IP地址。要获取服务器的IP地址,需要使用DNS(DomainNameSystem,域名系统)域名解析。DNS域名解析就是通过URL找到对应的IP地址。PS:为什么不直接访问IP地址来请求服务器呢?因为IP地址很长,不方便记忆,而URL地址好记,所以会用URL代替IP地址,URL就像是IP地址的别名,可以用于定位相应的IP地址。DNS域名解析的大致流程如下:首先查看浏览器中的DNS缓存,如果浏览器中有对应的记录,则直接使用,完成解析;如果浏览器没有缓存,则查询操作系统的缓存,如果查询到记录时,直接返回IP地址即可完成解析;如果操作系统没有DNS缓存,它将检查本地主机文件。Windows操作系统下,host文件一般位于“C:\Windows\System32\drivers\etc\hosts”,如果host文件中有记录,则直接使用;如果本地host文件中没有对应的记录,就会请求本地DNS服务器,本地DNS服务器一般由本地网络服务商如中国移动、中国电信等提供。一般情况下可以通过DHCP自动分配,当然也可以手动配置。目前Google提供的公网DNS为8.8.8.8,国内公网DNS为114.114.114.114。如果本地DNS服务器没有对应的记录,就会去根域名服务器查询。目前全球共有13组根域名服务器(这里指的不是13台服务器,而是13个ip地址,用字母a-m编号),为了更高效的完成所有域名的解析请求在世界上。根域名服务器本身不会直接解析域名,而是会将不同的解析请求分配给下面的其他服务器来完成。下面是DNS域名系统的树形结构图:2.封装HTTP请求包。一个HTTP请求对象包含4个部分:请求行、请求头、空行、请求文本,其基本格式如下:获取服务器IP后,将本地请求封装成一个HTTP数据包,如上图。3.TCP请求包的封装HTTP的底层是通过TCP/IP协议实现的,所以在传输底层数据时,HTTP请求包会被进一步封装成TCP包。4、建立TCP连接(3次握手)HTTP通信的基础是TCP连接。TCP连接需要3次握手。3次握手是验证客户端的发送和接收能力,以及服务端的生成和接收能力,就像打电话一样,平时的对话是这样开始的:_我_:你好,你能不能听我说?_对方_:我能听到你,你能听到我吗?(证明了对方的接收能力和我的发送能力)_I_:我也能听到,谈正事吧。(证明对方的发送能力和我的接收能力)经过以上3次握手,可以证明客户端的发送能力和接收能力,以及服务器的生成能力和接收能力,这样可以正式开始通信了。5、服务端获取到HTTP请求参数数据并通过TCP传输给服务端程序后,会将TCP数据包转换为HTTP数据包(这一切都是TCP/IP协议的功劳),让服务端可以获取客户端发送的请求数据。6、服务端进行业务处理并返回数据。服务器端收到客户端的请求参数后,会进行相应的业务处理。处理完成后,将处理结果返回给客户端。返回过程与发送过程类似。首先,将结果封装到HTTP数据包中。HTTP数据包可以分为以下四部分:状态行、响应头、空行响应文本,其基本格式如下:状态行用于描述服务器的返回状态,由3部分组成:HTTP版本号,例如HTTP/1.1;状态码,如200;状态描述信息,如OK;常见状态码如下:200:返回成功;301:永久重定向;302:临时重定向;404页面不存在;500:服务器程序错误。响应文本是返回给客户端的所有数据。7、断开TCP连接(4次挥手)一次请求和一次响应后,客户端与服务器的“通信”结束,此时可以进行断开TCP连接的过程,需要4次挥手的次数:_Client_:我们分手吧;_Server_:好的,让我准备一下。_ServerSide_:我准备好了,我们分手吧。_客户_:好的。经过以上过程,TCP连接就断开了。8、浏览器渲染显示结果TCP交互后,客户端也拿到服务器返回的数据,然后使用浏览器自身的执行引擎将最终结果显示给用户,整个执行过程就结束了。Reference&Acknowledgeszhuanlan.zhihu.com/p/58108010判断是非在自己,听别人说,得失看数字。公众号:Java面试真题分析面试合集:https://gitee.com/mydb/interview