说说个人对http的了解
Posted Java开发小驿站
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了说说个人对http的了解相关的知识,希望对你有一定的参考价值。
什么是http,什么是无状态,怎么解决
http是超文本传输协议,可以在两点之间传递文本、图片、音频、视频等等内容;
http本身是无状态的,客户端对于http事务是无记忆的,也就是说客户端多个http之间的调用其实没有任何关系,也不会保存用户的操作记录;
可以通过cookie来添加事务的记忆;在当今前后端分离非常主流的场景下,可以采用jwt的token机制来添加用户标识,其中cookie只能在本域或子域当中有效,token则支持跨域;
get与post 的区别
get和post的区别在各大论坛其实众说纷纭;
有人认为没啥区别,有人认为使用方式大不相同;
以下是我个人观点:
从使用的角度
get 一般旨在于向服务器拉取的方式,而post则表明是向服务器推送数据;
get 发送一个数据包,而post会发送两个(就是要跑两趟,任性);
get 请求的数据是会被浏览器自动缓存的,post不会(也可以手动缓存);
get 多次重复提交,理论上对于服务是无害的,而post在某些场景下需要避免重复消费问题;
透过现象看本质
通过上面的对比,可以发现,很多东西都只是表面上不一样,实际上也是可以让他们一样的,比如:
是拉数据还是提交数据,我也可以使用get提交数据,也可以使用post拉取数据;
本质上,他们都是通过建立tcp连接来完成数据的交互,本质上还是tcp,该握手还是握手,该道别还是道别,通过定义get和post来敲定一个约定,大家一起去遵守,让一切看起来井然有序,就好像快递公司运小件,物流公司运大件;
tcp 三次握手
tcp建立连接会经过三次握手:
(此处偷个图,哈哈哈)
客户端发送一个
SYN
报文加一个随机数x;服务端接收到
SYN
报文,将x+1,生成一个随机数y,返回一个SYN-ACK
报文;客户端接收到
SYN-ACK
报文,校验x,将y+1,向服务端发送一个ACK
,服务端接收到ACK
,建立连接;
注:
SYN
=> Synchronize Sequence Numbers 同步序列编号
ACK
=> Acknowledge characte 确认字符
tcp 四次挥手
握手才三次,挥手却要四次?
客户端发起断开连接,发送一个
FIN
报文给服务端,我要断开连接啦,然后进入到FIN_WAIT_1
的等待状态;服务端收到之后,给客户端返回一个
ACK
表示我晓得了,但是我事还没干完,你再等等;客户端收到之后就进入FIN_WAIT_2
状态,那我就再等等咯;服务端在完成手头工作之后,给客户端发送一个
FIN
报文,表明,ok啦,我也搞完了,可以关闭咯;客户端接收到
FIN
之后,给服务回一个ACK
,表明已收到,可以关闭,客户端关闭连接;服务端收到ACK
之后,那就see you next time
;
说一说四层、五层、七层网络模型
四层
应用层
传输层
网络层
网络接口层
五层
五层在4层的基础上把网络接口层裁缝成了链路层和物理层;
应用层
运输层
网络层
链路层
物理层
七层
七层则是在运输层前添加了表现层和会话层
应用层
表现层
会话层
运输层
网络层
链路层
物理层
http和https的区别
https
在http
的基础上套了一层SSL/TLS
,在tcp
握手的过程当中加了一系列的证书,加密操作;
所以在使用上,https
安全的,可以防止恶意拦截和篡改。
握手图如下(偷来的)
TLS完整流程如下
(1) 客户端开始新的握手,并将自身支持的功能提交给服务器。
(2) 服务器选择连接参数。
(3) 服务器发送其证书链(仅当需要服务器身份验证时)。
(4) 根据选择的密钥交换方式,服务器发送生成主密钥的额外信息。
(5) 服务器通知自己完成了协商过程。
(6) 客户端发送生成主密钥所需的额外信息。
(7) 客户端切换加密方式并通知服务器。
(8) 客户端计算发送和接收到的握手消息的MAC并发送。
(9) 服务器切换加密方式并通知客户端。
(10) 服务器计算发送和接收到的握手消息的MAC并发送。
本文参考链接如下
TLS握手协议详解: https://www.jianshu.com/p/81efc02b2f29
以上是关于说说个人对http的了解的主要内容,如果未能解决你的问题,请参考以下文章