cookies 在网页应用上有着非常广泛的用途。比如说,线上购物网站就需要依赖 cookies 来判断用户的身份,才能向用户展示可能感兴趣的产品,或者记录用户的购物车。
接下来我们将一步一步慢慢讲解什么是 cookies,以及其他配套的其他概念。
HTTP 协议
HTTP 协议的全称为 HyperText Transfer Protocol,被用来进行网页数据的传输。比如说,今天我们打开一个网页,这个网页包含了许多文件:
- html 文件
- css 文件
- js 文件
- 静态图片等等
那么我们的浏览器就会发送 HTTP 请求给服务器,接着服务器就会根据 HTTP 请求的内容返回相应的文件。
无状态的 HTTP 协议 (stateless)
我们之所以需要使用 cookies 来辨识用户,是因为我们平常上网时所使用的 HTTP 协议是无状态的(stateless)。也就是说 HTTP 请求只包含了当前请求的信息,而对于之前发生的 HTTP 请求一无所知。简单来说,对于每个 HTTP 请求而言,都是如初恋一般懵懂。
因此问题来了,网站要如何才能知道发送这个 HTTP 请求的人是谁?当然我们可以通过 IP 地址来判断是否为同一个人,但是这个方法有很大的局限性。考虑以下因素:
- 动态IP
用户每次重新连接网络时,很有可能会被分配一个不同的IP地址。 - 共享IP
公司,家庭以及学校通常都是大家共用一个外网IP上网,因此 IP 便无法细分共用一个 IP 上网的人群。至于为什么可以共享一个IP上网,感兴趣的朋友可以搜搜 Network Address Translation。 - 移动端
用户拿着手机上网,在学校使用学校网络,去商场蹭免费 Wifi,去公司上班时使用公司 Wifi,在不同的位置都会使用不同的 IP,然而用户却还是那同一个用户。
这里有一个表非常好地列出了 IP 追踪与 cookies 追踪的差异。
图片来源: http://www.woshipm.com/data-analysis/871818.html
既然 IP 追踪这么多限制,那我们用什么来追踪用户?
于是人们开始思考,如果 IP 追踪个人用户的效果这么有限的话,那我们还有没有什么好办法呢?
仔细想想,虽然用户会共享 IP 上网,或是更换地点使用不同的 Wifi 上网,但有一样东西却是不会经常更换的,那就是网络浏览器。那我们就可以在浏览器上面存储关于用户的信息,然后在每一个 HTTP 请求里都带上这些信息。如此一来,网站就能通过 cookies 里的信息来判断当前用户的状态。
cookies 简易原理图:
Cookies 的隐私隐患
欧盟的法律规定,如果网站会搜集用户的 cookies,则必须明确告知用户。
这么做的原因是因为,滥用 cookies 会带来隐私问题。由于 cookies 的作用就是让网站可以辨认出你是谁,那么网站也可以搜集所有关于你的信息,包括你访问了哪些网页,搜索了哪些关键字,在每个网页上停留了多久等等信息。
广告商可以通过这些信息向你投放精准广告。比如说,你经常在网上搜索关于 NBA 的新闻,那么你就有很大的机会见到诸如篮球鞋,篮球衣,篮球训练营之类的广告。这也是 cookies 的功劳。
毫不夸张的说,利用 cookies,网站也可以根据你平时的上网习惯,推测出你的性别,收入,职业,以及你的健康情况。随着大数据技术的进步,网站能够开始拼凑出一个真实的你。
想想看如果这些数据落入的不法之徒的手上会有什么后果?精准的诈骗手段?或者是毫无止境的推销电话,广告邮件等等。
因此,立法限制 cookies 的使用范围是很有必要的,用户也很有必要了解 cookies 可能带来的隐患,才能够更好地保护自己。这也是我写这篇博文的目的,希望能够让大家通俗易懂地了解 cookies。文章不严谨之处,还请多多包涵。