HTTP协议相关浅谈

Cookie和Session

HTTP协议是一种无状态协议,即每次服务端接手到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录;Session和Cookie的主要目的就是为了弥补HTTP的无状态特性。

Session

1
2
客户端请求服务端,服务端会为这次请求开辟了一块内存空间,这个对象便是Session对象,存储结构为ConcurrentHashMap。
Session弥补了HTTP无状态特性,服务器可以利用Session存储客户端在同一个会话期间的一些操作记录。

Session如何判断是否是同一个会话

1
2
服务器第一次接收到请求,开辟了一块Session空间(创建了Session对象),同时生成一个sessionId,并通过响应头的 Set-Cookie: JSESSIONID=xxxx 命令,向客户端发送要求设置Cookie的响应;
客户端接收到响应后,在本机客户端设置了一个JSESSIONID=xxxx的Cookie信息,该Cookie的过期时间为浏览器会话结束。

mark

1
接下来客户端每次向同一个网站发送请求时,请求头都会带上Cookie信息(包含sessionId),服务器通过读取请求头中的Cookie信息,获取名称为JSESSIONID的值,得到此请求的sessionId

Session的缺点

1
2
比如A服务器存储了Session,就是做了负载均衡后,假如一段时间内A的访问量激增,会转发到B进行访问。
但是B服务器并没有存储A的Session,会导致Session的失效。

Cookies是什么

1
2
3
4
5
6
7
8
HTTP协议中的Cookie包括Web Cookie和浏览器Cookie,它是服务器发送到Web浏览器的一小块数据。
服务器发送到浏览器的Cookie,浏览器会进行存储,并与下一个请求一起发送到服务器。
通常,它用于判断两个请求是否来自同一个浏览器,例如用户保持登录状态。

HTTP Cookie机制是HTTP协议无状态的一种补充和改良。

Cookie曾经用于一般的客户端存储。虽然这是合法的,因为它们是在客户端上存储数据的唯一方法,但如今建议使用现代存储 API。
Cookie随每个请求一起发送,因此它们可能会降低性能(尤其是对于移动数据连接而言)。
Cookie主要下面3个目的
  • 会话管理
1
登录、购物车、游戏得分或者服务器应该记住的其他内容
  • 个性化

    1
    用户偏好、主题或者其他设置
  • 追踪

    1
    记录和分析用户行为

创建Cookie

1
2
当接收到客户端发出的 HTTP 请求时,服务器可以发送带有响应的 Set-Cookie标头。
Cookie 通常由浏览器存储,然后将 Cookie 与 HTTP 标头一同向服务器发出请求。
1
2
3
有两种类型的 Cookies,一种是 Session Cookies,一种是 Persistent Cookies,如果 Cookie 不包含到期日期,则将其视为会话 Cookie。
会话 Cookie 存储在内存中,永远不会写入磁盘,当浏览器关闭时,此后 Cookie 将永久丢失。
如果 Cookie 包含有效期 ,则将其视为持久性 Cookie。在到期指定的日期,Cookie 将从磁盘中删除。
会话Cookies
1
2
创建的是会话Cookie有个特征,客户端关闭时Cookie会删除,因为它没有指定Expires或 Max-Age 指令。
但是,Web 浏览器可能会使用会话还原,这会使大多数会话Cookie保持永久状态,就像从未关闭过浏览器一样。

永久性Cookies

1
永久性Cookie不会在客户端关闭时过期,而是在特定日期(Expires)或特定时间长度(Max-Age)外过期
-------------本文结束感谢您的阅读-------------
原创技术分享,感谢您的支持。