浏览器访问www.baidu.com的过程
1.将url转换成ip地址
我们如果想要访问百度网,肯定得先知道百度的ip地址,但是用户可记不住这么复杂的ip地址,baidu这个拼音就容易得多。但这样就必须有一种手段自动的将url转换成ip地址。在计算机中有一个DNS协议,它是用于将url转换成ip地址的,DNS是一个分布式的数据库,存储着所有有效的url对ip的映射。当我们往浏览器网址中输入url之后,浏览器首先会查看自己的缓存,即以前是否访问过该url,如果有则直接返回。如果没有,操作系统则会检查该url是否存在于本地DNS,如果有则返回,否则会查看host文件,如果有则返回,否则向本地DNS服务器发起请求,如果有则返回,否则,本地DNS服务器会请求根域名服务器获得顶级域名服务器ip,然后向顶级域名服务器请求返回得到权威域名服务器ip,再向权威域名服务器请求得到url->ip的映射返回给本地DNS服务器,本地DNS服务器将ip返回给操作系统并做缓存。
2.建立连接
得到了ip地址之后我们就需要建立http连接了。因为http是基于tcp的,所以我们需要通过三次握手来建立连接,客户端将SYN置为1,将tcp报文发送给服务器,序列号为x,服务端收到了这个包,识别出是一个请求连接的包,如果同意连接,服务器也将SYN置为1,将ACK置为1,确认号为x+1,序列号为y,将该tcp包发送给客户端,客户端收到了这个包并识别,发现确认号为x+1,就知道了这个是回应包,于是再发送一个确认号为y+1的tcp包,表示自己确认收到了服务端的回应,请求建立成功。三次握手的作用是为了确保客户端和服务端双方都具有发送和接受数据的能力,同时可以防止脏连接的建立。
3.发送http请求
接下来一步是发送http请求了,http请求包括请求行,请求头,请求体,但是一个http请求能够正确的到达服务器。是需要经过很多步骤的,比如必须要通过路由协议才能将这个http请求传达到服务器,路由协议的作用是找到最佳的一条路径快速的传送请求。
4.服务端执行代码并返回http响应
因为建立tcp连接的机器可能只是一个代理服务器,所以可能需要将http请求转发到真实的web服务器中,web服务器收到了请求,会执行服务端代码,得到数据之后将会封装到一个http响应中,会传送给客户端(该响应可能会通过代理服务器也可能不需要通过代理服务器)
5.浏览器收到http请求并进行渲染
以springmvc为例,http响应为ModelAndView,首先返回一个页面,然后再将数据渲染到页面形成我们的界面
6.断开连接
因为现在的http请求都是长连接的,并不会马上关闭,在一段时间没有进行交互之后,就会自动断开,时间大概为300秒左右。
大家一起快乐学Java 文章被收录于专栏
本人2021届应届本科生毕业于浙江海洋大学,校招拿到BAT等大厂offer,本专栏的目的是分享一些校招面试过程中的一些重要知识点,以及当前比较流行的技术底层原理和一些面试问的较多的知识点的剖析。后续也会分享一些在阿里工作过程中遇到的一些问题,把问题抽象出来给出我的思路,大家可以一起来思考,互相促进,互相学习。