cookie会被淘汰吗?一次面试引发的思考

原创:静夜思码(微信公众号ID:jingyesima),欢迎分享,转载请保留出处。


今天面试了一个候选人,当聊到「浏览器本地存储」的时候,候选人提到cookie很快将会被淘汰掉,不远的将来将不会再用Cookie。

那么我们就来聊聊Cookie的前世今生,看看Cookie的存在是为了解决什么样的问题,真的能够被淘汰掉吗?

HTTP协议的「无状态」特性

HTTP是一种无状态的协议,不会保存客户端和服务端之间的通信状态。这样可以处理大量的事物,保证了HTTP协议的伸缩性。

HTTP协议的无状态,意味着服务器无法知道两个请求是否来自同一个浏览器,即服务器不知道用户上一次做了什么,每次请求都是完全相互独立的。

早期互联网只是用于简单的浏览文档信息、查看黄页、门户网站等等,并没有交互这个说法。但是随着互联网慢慢发展,宽带、服务器等硬件设施已经得到很大的提升,互联网允许人们可以做更多的事情,所以交互式Web慢慢兴起,而HTTP无状态的特点却严重阻碍其发展!

如何记录用户的上一次操作呢?通常有两个办法:

  1. 在url中携带token

    通过在url中增加额外的字段,将上一次的请求标识放在url中。

  2. 在交互式表单中增加隐藏字段

    <input type="hidden" name="field_name" value="value">
    复制代码

    一直到近些年,还有很多网站采用这种方式来解决各种问题。

这两种办法可以解决记录用户上一次操作的问题,但是操作起来太复杂,非常容易出错。

cookie诞生的原因?

1994年,NetScape(网景公司)员工Lou Montulli(卢-蒙特利),他试图解决 Web 的第一个购物车应用,为了解决用户网上购物的购物车历史记录,将“cookies”的概念应用于网络通信,NetScape浏览器在第一个版本就开始支持Cookie,目前所有浏览器都支持Cookie了。

Cookie是什么?

cookie 就是浏览器储存在用户电脑上的一小段文本文件。cookie 是纯文本格式,不包含任何可执行的代码。

一个 Web 页面或服务器告知浏览器按照一定规范来储存这些信息,并在随后的请求中将这些信息发送至服务器,Web 服务器就可以使用这些信息来识别不同的用户。大多数需要登录的网站在用户验证成功之后都会设置一个 cookie,只要这个 cookie 存在并可以,用户就可以自由浏览这个网站的任意页面。

cookie 只包含数据,就其本身而言并不有害。

cookie如何解决HTTP无状态的问题

我们将一个用户一次对服务的访问称为会话(session),服务器在第一次接收到这个会话请求的时候,生成一个sessionID存储在服务器,然后通过http的Set-Cookie字段告诉浏览器把这个sessionID存储到浏览器(包括哪个域名、路径可以访问,有效期多久)。然后下次再发起请求的时候,将浏览器cookie中存储的sessionID通过Cookie这个字段传给服务,服务通过http请求带过来的sessionID在服务器中匹配是否有对应的sessionID,从而知道发起这个请求的用户是谁。

image.png

cookie的滥用

cookie的诞生主要是为了解决记录用户的目的,但是很多人网站对cookie滥用进行数据的存储,从而带来一些性能问题和安全问题。

大量的个人数据存储在cookie中,会导致cookie很庞大,那么每一次http请求都会将cookie信息完整带上,对服务造成了很大压力。同时由于个人数据明文存储在cookie中,一旦网站出现xss漏洞,很容易将个人信息泄漏。

不过,html5定义了localStorage/sessionStorage,专门用来解决在浏览器端进行数据存储的问题,从而让Cookie可以专心做该做的事情。

最后

cookie不会被淘汰,最起码,在HTTP协议的无状态特性没有改变的前提下,cookie不会被淘汰。


原创:静夜思码(微信公众号ID:jingyesima),欢迎分享,转载请保留出处。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享