一个http请求从浏览器发出去,经历的过程(即上网流程)

步骤

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:UsersUserAppDataLocalGoogleChromeUser DataDefault (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后关闭连接
原文地址:https://www.cnblogs.com/guojieying/p/13751578.html