当在浏览器地址栏输入一个地址并按回车时会发生什么?

这里先看三张图,然后再具体说下

34696-dpyxljk651.png


98671-8zlkmfg1dlb.png


09109-yr99x4l6e9p.png


第一步 浏览器地址栏输入URL

在浏览器地址栏中输入内容后按回车键,浏览器首先会检查输入的内容是否是合法的URL,如果不合法,浏览器会使用默认的搜索引擎去搜索输入的内容,如果合法,会先在浏览器中查找是否有缓存,如果有直接使用缓存,没有则进行下一步。


第二步 DNS域名解析

在浏览器中找不到缓存后,则会解析URL中的域名拿到对应的IP地址,解析时会以这样一个顺序去查找,找到则停止
首先会搜索浏览器自身的DNS缓存
如果浏览器自身的缓存里面没有找到,那么浏览器会搜索系统自身的DNS缓存
还找不到,就会尝试从hosts文件中查找
前面三个都找不到的话,就会通过DNS域名服务器解析


第三步 建立HTTP连接

浏览器解析URL拿到协议,IP和端口后,通过TCP与对应服务器建立连接,这个过程称为3次握手,如下图,SYN,ACK 表示存放在TCP的标志位
21968-s6rrcw5e9fc.png


第一次握手:
首先客户端发起请求,带着SYN=1,表示我想要创建连接
第二次握手:
服务器收到请求后,告诉客户端:我收到了,回复 ACK=1,此时标识位就变为 SYN=1,ACK=1
第三次握手:
到第2步服务器回复时,理论上就已经创建连接成功了,但为了防止意外,客户端又做了一次确认,告诉服务器我收到你的回复啦,此时只用发送ACK=1标志位就可也了
到此HTTP连接成功。


第四步 服务器处理和响应请求

连接成功后,TCP就开始传输数据到服务器端,它会解析URL中的路径和相关参数,执行对应的程序,返回处理结果


第五步 浏览器处理响应

浏览器接收服务器的响应并进行处理,比如后端返回一个HTML页面,浏览器就会渲染加载显示出来


第六步 HTTP请求响应完毕

看到这里,一次HTTP请求的过程就算完成了,但是还有后续的事要做,请求完成后HTTP连接需要断开,不然连着没发挥作用就是浪费资源了


第七步 断开HTTP连接

HTTP建立连接时只能由客户端发起,而断开时可以由客户端和服务器端任意一方发起
35503-j1bsigwuii.png


第一次挥手:
主机A(可以为客户端或服务器端)向主机B发送一个FIN标志位,表示我没事做了请求关闭连接
第二次挥手:
主机B收到FIN后,向主机A发送一个ACK回复,表示我也没数据发送了,可以关闭连接
第三次挥手:
因为连接是双向的,此时主机B也会向主机A发送FIN标志位,请求客户端关闭连接
第四次挥手:
主机A收到主机B发送的FIN后,向主机B发送ACK回复,此时主机B收到后会关闭连接,主机A在长时间等不到主机B的回复后,自己也就关闭了连接


以上就是整个HTTP请求的全过程了!


浏览器地址栏DNShttpurl三次握手四次挥手tcp/ip

我来吐槽

*

*