HTTP之工作原理

Zss 发表于:
http协议:协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器
http协议是无状态的,一个很好的解释无状态:https://www.cnblogs.com/bellkosmos/p/5237146.html

同一个客户端的这次请求和上次请求是没有对应关系,对http服务器来说,它并不知道这两个请求来自同一个客户端。 为了解决这个问题, Web程序引入了Cookie机制来维护状态.

 

使用Fiddler来加强对工作原理和流程的记忆,在正常的情况下一般也就是客户端的浏览器与服务端的交互,在使用到Fiddler后,它所充当的角色就是代理服务器了

可以理解成转发者,以前觉的很多名词都很高级,现在想想觉得好像也就那么回事而已。。。

画了一张图:画图神器   –  –  -> > >  https://www.processon.com

每一次HTTP操作称之为一个事务,若不去考虑网络中所涉及到的其他协议,单纯的来考虑这个应用层协议是怎么交互的,那么其实HTTP的交互来说是很简单的

因为一次请求涉及到的一般都为一个客户端的request和一个server端的response,反而在工作中所涉及到capwap协议,一次上线的过程都是上十来次交互

 

如上图Fiddler就是在中间充当的代理服务器,那么这个代理服务器可以干嘛呢?

对于Fiddler来说,他是一个抓包工具,所有的HTTP包都会经过他这里,那么它可以将pc发送过来的request做修改发送到服务器,这样就间接的修改了request中所提交的一些参数或者headers,间接的来测试web服务器各个接口是否正常

那么,相反从server端回复给浏览器的数据,当经过Fiddle时。也可以将其数据做修改,这样子测试前段页面的时候,可以使用不同的数据来测试前端页面是否正常

 

当然代理服务器不止这一个,这只是一个概念而已,看自己怎么去理解了,

假若他是一台真实的服务器,代理服务器就是网络信息的中转站,有什么功能呢?

1. 提高访问速度, 大多数的代理服务器都有缓存功能。

2. 突破限制, 也就是FQ了

3. 隐藏身份。

 

然后再画一张在四层模型中是怎么传输的

1)、地址解析
如用客户端浏览器请求这个页面:http://www.testone.top/wp-admin

从中分解出协议名、主机名、端口、对象路径等部分,对于我们的这个地址,解析得到的结果如下:
协议名:http
主机名:www.testone.top
端口:8080
对象路径:/wp-admin

在这一步,需要域名系统DNS解析域名www.testone.top, 得主机的IP地址。

2)、封装HTTP请求数据包
把以上部分结合本机自己的信息,封装成一个HTTP请求数据包

3)封装成TCP包,建立TCP连接(TCP的三次握手)
在HTTP工作开始之前,客户机(Web浏览器)首先要通过网络与服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet。

HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更高层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80

4)客户机发送请求命令
建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可内容。

5)服务器响应
服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
实体消息是服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据

6)服务器关闭TCP连接
一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码
Connection:keep-alive
TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

服务器将响应信息传给客户端,响应体中的内容可能是一个html页面,也可能是一张图片,通过输入流将其读出,并写回到显示器上。