步骤
1- 输入网址
2- 缓存解析
3- 域名解析
4- tcp连接,三次握手
5-服务器收到请求
6-页面渲染
7-服务器收到请求
8-开始解析html
9-四次挥手断开TCP连接
一:输入网址
输入你要访问的网站网址了,俗称url;
二:缓存解析
浏览器获取了这个url,当然就去解析了,它先去缓存当中看看有没有,从 浏览器缓存-系统缓存-路由器缓存 当中查看,如果有从缓存当中显示页面,然后没有那就进行步骤三; 缓存就是把你之前访问的web资源,比如一些js,css,图片什么的保存在你本机的内存或者磁盘当中。 (1) 在chrome浏览器中输入网址: chrome://chrome-urls/ chrome-urls是一个看到所有的Chrome支持的伪RUL,找到其中的chrome://appcache-internals/ 可以看见chrome的本地缓存地址:Instances in: C:\Users\User\AppData\Local\Google\Chrome\User Data\Default (0) (2)在chrome中访问www.baidu.com/,打开开发者模式,不勾选 Disable cache
三: 域名解析
在发送http之前,需要进行DNS解析即域名解析。 DNS解析:域名到IP地址的转换过程。域名的解析工作由DNS服务器完成。解析后可以获取域名相应的IP地址
和步骤二一样,做一个访问新页面的操作juejin.im/timeline,同样打开开发者模式,,不勾选 Disable cache
通过域名查找对应的服务器IP
- 在本地vhosts文件中查找
- 在本地DNS服务器中查找
- 本地DNS服务器向根DNS服务器发送请求,根DNS服务器会返回一个域服务器(.com服务器)地址
- 本地DNS服务器向域服务器发送请求,域服务器返回一个域名解析服务器地址
- 本地DNS服务器向域名解析服务器发送请求,获得服务器ip地址
- 本地DNS服务器缓存查询结果,并告知浏览器
四:tcp连接,三次握手
在域名解析之后,浏览器向服务器发起了http请求,三次握手,浏览器与服务器建立TCP连接。TCP协议是面向连接的,所以在传输数据前必须建立连接
注意:三次握手的目的是确保通讯双发的发送、接收消息的功能都正常
(1)客户端向服务器发送连接请求报文; (2)服务器端接受客户端发送的连接请求后后回复ACK报文,并为这次连接分配资源。 (3)客户端接收到ACK报文后也向服务器端发生ACK报文,并分配资源。 这样TCP连接就建立了。 在此之后,浏览器开始向服务器发送http请求,请求数据包。请求信息包含一个头部和一个请求体。
五:服务器收到请求
服务器收到浏览器发送的请求信息,返回一个响应头和一个响应体。
发送HTTP请求到达服务器,nginx作为反向代理服务器会将请求分发给web服务器
六:页面渲染
nginx作为web服务器处理请求,如果是静态请求js、css、图片等,直接将静态资源返回给客户端;如果是动态请求.php,通过fast-cgi转交给php-fpm,php-fpm调用cgi脚本解释器解析脚本,得到的结果再经由fast-cgi返回给nginx,nginx将结果返回给客户端
七、 客户端接收到response返回结果,开始解析html,以及内嵌资源。发现有远程资源,继续向服务器请求资源
八、四次挥手断开TCP连接
四次挥手的目的:确认双发都收到断开连接的请求。 C 发出断开连接的请求 S ack 这个断开请求,确保自己的数据传输完毕,再发送断开连接的请求, C 收到断开请求进入TIME-WAIT状态,发送ack,等待2MSL后没有再收到S的请求则完全断开连接 S 收到C的ack后关闭连接