概述
-
URL解析
-
DNS解析
-
TCP 链接
-
Http 请求
-
浏览器处理响应
-
页面渲染
URL解析
对输入的URL进行解析,判断输入的URL是否合法,并根据输入的词完成字符编码等操作
如果本地有缓存,并且没有过期会直接返回缓存,如果没有进入下一步
DNS解析
对URL中的域名进行解析获取对应的IP地址,首先会到浏览器中查找浏览器缓存,如果找不到就去本地hosts文件,如果还没有找到对应继续去本地路由器再然后运营商DNS,如果自己配置了DNS,就去自己配置的DNS服务器查找对应的IP地址,查找不到的情况下再去运营商的DNS
TCP链接
Http请求的底层就是TCP链接,因此会在通信前与目标服务器建立TCP链接,TCP链接为了保障可靠性,会进行三次握手,确认双方正式建立连接
Http请求
TCP链接建立之后就可以发送http请求了,此时服务端收到http请求进行处理,此处可能有nginx代理或者直接到我们的应用系统服务器进行处理,返回响应。
对于MVC的框架来说,服务器收到请求之后会对请求的URL找到对应的controller,之后调用相应的服务返回一个model,之后再通过视图解析器封装response,通过已经建立好的TCP链接响应给客户端返回给浏览器
浏览器处理响应
-
断开TCP链接
浏览器收到服务器响应之后,会选择关闭TCP链接,或者继续等待下一个请求的发生,如果选择关闭TCP链接,会进行四次挥手
此时情况大概可以描述为:
客户端:我数据传输完了,可以关闭了(发送FIN报文信息)
服务器:(数据还没有传完)你的请求我收到了,但是我还没有处理完,等我处理好了告诉你(发给客户端ACK信息)
客户端:等待服务端FIN报文信息
服务端:我数据传输好了,准备好关闭了
客户端:好的我知道了,发送给服务端ack确认信息之后进入等待关闭状态
服务端:收到ACK之后,关闭链接
客户端:等待一段时间之后,没有收到服务端回复,证明服务端已经正常关闭,此时客户端关闭
页面渲染
根据接口返回的状态码进行不同的响应
浏览器检查响应是否是一个重定向响应或者是一个需要特殊处理的响应(3xx的状态码),或者是需要重新认证(401状态码),或者错误(4xx和5xx状态码)等;浏览器会和正常的响应(2xx)相区别并作出不同的应对。
判断响应是什么文件,比如是HTML页面或者是图片,又或者是声音文件。如果是页面,浏览器会渲染并呈现给用户,又或者是提供认证或者是下载的窗口等,取决于浏览器收到了什么类型的响应。
作为春节前的最后一卷,就不深入了,后续继续推出https的流程,https与http主要就是先进行了SSL的加密,在进行TCP链接。好了,到这本文就结束了,面试遇到时就不再是一句话也说不出来的,不过本文没有深入,具体到TCP协议等,需要自己去搜索一下学习了,本文只能当作是一个索引,起到一个指导方向的作用了。
新的一年也来了,在这祝大家新年快乐了,新的一年我们共同努力,想要一起学习的小伙伴可以点个关注,在接下来的一年里,一起卷,毕竟大家卷才是真的卷,也欢迎有错误的地方指正,共同成长总比一个人成长要快的多吗,好了,就先说这些吧,大家新年快乐,明年见!