万维网(www:World Wide Web)的诞生起源自1990年12月15日蒂姆·伯纳斯·李利用网际网络实现了超文本传输协议(http:Hyper Text Transfer Protocol)客户端和服务器的第一次通讯。
http是运行在TCP之上的一种简单的请求、响应协议,所谓的协议就是形成了固有的套路,客户端指定向服务器发送什么信息,然后服务器就会做出与之对应的回应。举个例子:GET、POST、HEAD等方法中,post一般用于客户端提交表单数据给服务器,或者上次文件给服务器,而head、get则是获取URL中指定的资源。在使用get时请求的参数、值需要附加在URI(URI时URL的一种扩张,在HTTP协议中URI一般都是指URL)后面,利用”?”将资源的URI和请求参数、值隔离开来,参数、值之间使用“&”隔开。万维网的发展历史要彻底理解session、cookie、token之间的区别,就不得不去翻开过去尘封的历史。仅30年web发生了翻天覆地的变化。早期的web其实是非常简陋的,仅仅实现的是基本的文本浏览而已。用寒酸的表格来做框架定位还仅仅是后话。仅仅只是文本和文本包含的超链接而已,服务器仅仅只是机械式的请求,然后响应,并不需要记录谁在某一个时间段里浏览了什么内容,也不需要记住是谁发的HTTP请求。慢慢的网站就需要登录、留言、发表内容、内容管理、在线购物等等交互,这时web就需要引入会话管理机制,记录谁登录了系统,谁又将商品放入了购物车中等等。由于早期的web本身就是无状态请求,于是有人就想出了一个办法,给每个访问的人发一个不会重复的号码牌,也就是session id(会话标识)。由于session id是服务器发给每个接收端的一串随机字符串,这样就能够区分谁是谁了。session id看似解决web无状态请求的问题,但也造成了不小的困扰。比如在负载均衡组成的集群中,当大家通过机器A登录,session id就会保持在机器A上。但如果下次请求转发到了机器B,就需要将机器A的session id复制到机器B上,所以总是在session复制、粘贴的过程,如果保存了session的机器挂了新的问题接着又产生了。除此之外每个人的设备确实是保存了属于自己的session id,但服务器却要保存所有的session id,这可不一定是几个几十个了,二十成千上万,甚至几十、上百万个。session其实也特别不安全,如果有人伪造了你的session id,也就意味着他可以为所欲为了。可以通过cookie的方式来保存session id,但cookie的区别在于其主要内容包括了名字、值、过期时间、路径、域等信息,cookie可以实现类似于访问者离开店铺或者关闭浏览器,再打开店铺就能马上回复购物车的功能。但cookie一旦过期就会被清理,当访问者再次打开网站时又会重新分配cookie。这么看来session id和cookie在本质上并没有完全的区别,别人想伪造很容易伪造。于是token就出现了,比如用HMAC-SHA256算法加上一个密钥来对数据进行签名,那么别人不知道密钥,那么就没有办法伪造了,签名和数据组合在一起就是token了。token并不需要保存,只需要将发过来的token用同样的HMAC-SHA256算法和密钥再算一次比对相同就表示这个用户已经登录了,并且可以直接取到用户的userID,相反不相同,则会提示认证失败。token的优势是非常明显的,服务器只生产token和验证token,所以服务器就变得非常轻松,没有了各种附带的状态。但由于token中的数据也是明文保存,所以一旦某个人的token被人偷走了,和本人是一样的。总之cookie依旧在,使用web api的互联网大厂更加热衷于token,token相对于session id、cookie会更加安全,并且无状态、可扩展,支持移动设备,可以跨程序调用。以上个人浅见,欢迎批评指正。认同偶的看法,请点个赞再走,感谢!喜欢偶的,请关注偶,再次感谢!