【计算机网络】二应用层补充
cookie、session、token
一、cokkie、session、token、JWT
1、cookie
HTTP协议是无状态的,这样的话,客户每一次都需要重新告知服务器自己的身份,这样就很麻烦,所以知道、存放信息也是很重要的一部分,可以很好的提高用户的体验。比如我们进入一个网站系统需要账号密码登陆,然后我们操作完之后,把这个页面不小心关掉了,那么再次点击网页,如果需要我们再次登陆就会显得很麻烦,可事实上,当我们再次点进去网页的时候,我们的账号仍然是在登陆着的。
所以,在客户端请求的时候,如果服务器需要记录下来客户的信息,那么久可以对客户端发送一个cookie进行标识,这样的话,客户端浏览器可以将这个cookie保存下来,在之后对该服务器请求的时候,就会携带上这个cookie,这样的话,服务器就可以识别到客户的身份了。
在cookie的属性中有一个是过期时间,不过不对其进行设置,那么默认的就是会话结束的时候,也就是浏览器窗口关闭也就意味着cookie就会过期,这个时候cookie是保存在浏览器的内存中的。但是如果设置了过期时间,那么cookie就会保存在浏览器的硬盘的缓冲目录里面,这样的话,就算是关闭了浏览器页面,在过期时间内打开仍然是有效的。
使用setMaxAge()里面的参数,为正则是设置过期时间,为负就是会话cookie。
cookie的作用:身份认证、购物车、推荐、用户会话状态。
cookie的特性:
1)不可跨域名性:cookie是保存在客户端的浏览器中的,浏览器可以保证不同域名的cookie之间不会相互影响。
2)使用unicode字符时需要对unicode字符进行编码,否则会乱码。
3)BASE64编码:保存二进制图片。
cookie中的value,当是unicode字符的时候需要为字符编码;当是二进制数据的时候,需要使用BASE64编码。
cookie应用场景:会话状态管理、个性化设置、浏览器行为跟踪。
但是正是因为cookie是保存在客户端浏览器上的,所以很容易被盗取、被利用。这个时候。session就发挥了它的作用。
2、Session
与cookie不同,session是保存在服务器上的。当客户端浏览器访问服务器的时候,服务器就会把客户端的信息存下来,也就是session。当客户端再次请求的时候,服务器就会从session中查询客户的状态。这个时候,服务器和客户端之间是存在一个sessionid的,跟cookie类似的是,在之后的请求中。是需要携带着sessionid的,将sessionid放在cookie中,这样的话,发过去的请求才能帮助服务器进行状态查询。
但是因为session是放在服务器上的,所以会给服务器带来很大的压力。
同样的。因为sessionid是存放在cookie中的,所以sessionid仍然是有可能“过期”的。
3、Token
1)token机制是支持跨域访问的,但是前提是传输的用户认证信息要通过HTTP头传输。
2)无状态:不需要存储session信息,因为token自身包含了所有登陆用户的信息,在客户端存储状态信息就好。
3)更适合CDN
4)标准化:Token是以Json的形式保存在客户端的,所以JWT是跨语言的。
4、JWT
JWT是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。
可以理解成JWT里面是自带Token和加解密之后的信息的。
分为:头部、载荷、签证。
头部里面包括类型和加密的算法。载荷里面就是有效信息了,包括标准中注册的声明(包括一些注册时间、签发时间之类的)、公共的声明和私有的声明。
签证部分里面有牵扯到一个secret,这个就是用来进行jwt的签发和验证的,很类似信息安全数字签名里面的密钥,是服务器端的私钥,是要秘密保存的。
头部和载荷都需要分别进行加密,签证部分是由前面部分加密之后再加上secret加密形成的。
二、HTTP
1、HTTP1.1
引入了通过单个TCP连接的多个流水线连接。
1)头部没有进行压缩,这样的话,首部信息越大,延迟就越大。
2)发送相同的首部,会造成浪费(且不能进行压缩 )
3)服务器按顺序进行响应,可能会形成阻塞
4)FCFS,小对象可能会在大对象后面进行排队
5)没有请求优先级控制
2、HTTP/2
提高了服务器向客户端发送对象的灵活性
1)头部可以进行压缩,而且可以去除重复的部分。这时只会生产一个索引号。
2)可以给予优先级,基于优先级来进行对象的传输
3)服务器推送,将未请求的对象推送到客户端
4)可将对象划分为帧来使用二进制进行表示,可以减轻阻塞。
但是,HTTP/2是多个HTTP请求在重复使用同一个TCO连接,并且下层TCP协议是不知道有几个请求的,这样的话,如果发生了丢包现象,那么这个连接里面的嗯u搜友请求都要等待这个包重传回来。
同样的,HTTP/1.1里面,因为是按顺序的,所以一个请求阻塞了,那么它之后的请求都要进行等待。
3、HTTP/3
前面提到的问题都是基于TCP传输层的问题,所以在HTTP/3里面,将HTTP下层的TCP协议改成了UDP协议。
因为UDP是无连接的,也不是按序的,包括丢包重传等等,所以不会出现上述的一些问题。
虽然UDP是不可靠的,但是通过其他的一些协议比如基于UDP的QUIC协议也可以实现类似TCP的可靠性传输。

浙公网安备 33010602011771号