​ 做数据产品时,我们会经常遇到用户隐私问题(如,禁止追踪)。在最新的Chrome浏览器中该选项已被默认选中设置=>显示高级设置=>随浏览流量一起发送”不跟踪”请求开启该选项后,请求头中会增加DNT:1的字段。

​ 然而,大多数产品都希望提供一个类“免责声明”的文档,然后主动管理该DNT。所以我们只能借助其他方式(这里常用的方式是第三方Cookie,见文档Cookie章节)去实现,下述主要描述了一些用以进行客户端识别的机制。

写在前面

​ HTTP是无状态协议,通常情况下Web服务器几乎没有什么信息可以用来判断是哪个用户发送的请求。然而,现代的Web站点希望能够有更多的个性化接触,希望对连接的另一端有更多的了解。根据这些了解,可以做一些个性化接触。如,特别的问候语、特别推荐、存档信息、记录会话等等。

HTTP提供一些用以进行客户端识别的机制:

  • 承载客户身份信息的HTTP首部
  • 客户端IP地址跟踪,通过用户的IP地址对其进行识别
  • 用户登录,用认证方式来识别用户
  • 胖URL, 在URL中嵌入识别信息
  • cookie, 功能强大且高效的持久身份信息识别技术

HTTP首部

首部名称 首部类型 描述
From 请求 用户的E-mail地址
User-Agent 请求 用户的浏览器软件
Referer 请求 用户是从这个页面上依照链接挑战过来的
Authorization 请求 用户名和密码
Client-IP 扩展(请求) 客户端的IP地址
X-Forwarded-For 扩展(请求) 客户端的IP地址
Cookie 扩展(请求) 服务器产生的ID标签

(1)Form
​ 包含用户的Email地址,每个用户都有不同的E-mail地址。由于担心服务器会收集Email,很少浏览器会携带该字段。
(2)User-Agent
​ 将用户所有浏览器的相关信息告知服务器。通常可以利用User-Agent来进行设备和浏览器等判断。
(3)Referer
​ 提供用户来源页面的URL。
注意,部分情况下,从网站跳出的链接有时不会携带Reffer,可以强制指定!

<meta name="referrer" content="always">

客户端IP地址

在HTTP首部并不提供客户端的IP地址,但Web服务器可以找到承载HTTP请求的TCP连接另一端的IP地址。需要注意,使用客户端IP地址标识用户会有如下几个问题:(1)多人公用同一台电脑;(2)每次使用,动态分配IP地址;(3)共享的防火墙地址,将真实地址隐藏;(4)HTTP代理;

用户登录

为了使Web站点的登录更加简便,HTTP中包含了一种内建机制,可以用WWW-Authenticate首部和Authorization首部向Web站点传送用户的相关信息。一旦登录,浏览器可以不断地在每条发往这个站点的请求中发送这个登录信息。如果服务器希望在为用户提供对站点访问之前,先行登录,可以向浏览器回送一条HTTP响应代码401 Login Required,浏览器端会弹出一个登录对话框。

胖URL

有些Web站点会向每一个用户生成特定版本的URL(通常是向真正的URL中添加一些客户端识别信息进行扩展), 我们称之为胖URL。这看起来是一个不错的客户端识别机制,但是在实际使用中会有如下几个问题:(1)无法共享URL;(2)URL根据用户特定生成,破坏缓存;(3)额外的服务器负荷;(4)用户在访问一些特定URL时,可能就无意中离开了胖URL会话;(5)会话非持久,退出时所有信息丢失。

Cookie

​ Cookie分为:会话Cookie和持久Cookie。会话Cookie是临时性的,用户退出浏览器会话Cookie就被删除了;持久Cookie会存储在硬盘上,浏览器退出、计算机重启都会存在。如果设置了Discard参数,或者没有设置Expires或Max-Age参数来说明扩展的过期时间,则为会话Cookie。

不同站点使用不同的Cookie

(1)cookie的域属性

产生cookie的服务器可以向Set-Cookie响应首部添加一个Domain属性来控制哪些站点可以看到该cookie。

Set-cookie: user="ligang"; domain="xxx.com"

数据行业中,针对浏览器级别的浏览器DNT(Do Not Track,禁止追踪),使用第三方Cookie实现,是一种常规解决方案。如,采集域名为collect.xxx.com,可以在其官网www.xxx.com下,设置Cookie表示DNT,指定其domain为xxx.com。在采集发包时,会在请求头中携带该Cookie信息(因为同域)。

(2)cookie的路径属性

Cookie规范允许用户通过Path属性将cookie于部分Web站点关联起来。

Set-cookie: user="ligang"; domain="xxx.com"
Set-cookie: age="25"; domain="xxx.com"; path="/settings/"
  • 访问http://www.xxx.com/settings/(xxx.com域下的settings路径)时,会携带user和age;
  • 访问http://www.xxx.com/index.html(xxx.com域下的非settings路径)时,只会携带user。

Cookie常规操作

/*** 设置Cookie* @param name 名称* @param value 值* @param days 有效期(天)*/
function writeCookie(name, value, days) {var expires = '';if(days) {var date = new Date();date.setTime(date.getTime()+(days*86400000));expires = "; expires=" + date.toGMTString();}document.cookie = name+"="+value+expires+"; path=/; domain=xxx.com";
}/*** 获取Cookie* @param name 名称*/
function getCookie(name){var pattern = RegExp(name + "=.[^;]*");matched = document.cookie.match(pattern);if(matched){var cookie = matched[0].split('=');return cookie[1];}return "";
}

【HTTP】客户端识别与cookie机制相关推荐

  1. 前端学HTTP之客户端识别和cookie

    前面的话 Web服务器可能会同时与数千个不同的客户端进行对话.这些服务器通常要记录下它们在与谁交谈,而不会认为所有的请求都来自匿名的客户端.本文主要介绍客户端识别及cookie机制 HTTP首部 HT ...

  2. Http协议(2)—客户端的识别与cookie机制

    一.Http用户识别的机制 1.承载用户身份的http首部 2.客户端IP地址跟踪,根据客户端IP地址进行识别 3.用户登录,用认证方式识别用户 4.胖URL,一种在URL中嵌入识别信息的技术 5.c ...

  3. Go 语言 Session机制和 Cookie机制

    一.会话机制 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie 通过在客户端记录信息确定用户身份,Sessio ...

  4. 告别手动输入验证码!Web自动化测试带你解锁验证码处理和Cookie机制,跨越测试瓶颈!

    Web自动化之验证码处理及cookie机制 在Web自动化测试中,验证码的处理一直是一个难点.如果没有自动化处理方式,手动输入验证码将会非常耗时且容易出错.本文将为大家介绍如何通过Python实现验证 ...

  5. JWT的初步了解以及session、cookie机制

    1.什么是状态保持? 想要了解JWT,首先需要知道什么是状态保持,举一个例子来说:无论是在web上还是在手机app上,我们都可以以游客的身份访问,此时都会有登录/注册字眼,当我们登录之后,就会是我们的 ...

  6. WordPress中的cookie 机制

    2019独角兽企业重金招聘Python工程师标准>>> WordPress中的cookie机制 WordPress使用cookies技术(能够让网站服务器把少量数据存储到客户端的硬盘 ...

  7. 服务器会自动创建cookie,网站的cookie机制是什么

    cookie与session应用于互联网中的一项基本技术--会话(用户与客户端的交互)跟踪技术,用来跟踪用户的整个会话.简单来说,cookie是通过在客户端记录信息确定用户身份的,而session则通 ...

  8. HTTP Session、Cookie机制详解

    一.什么是http session,有什么用 HTTP协议本身是无状态的,本身并不能支持服务端保存客户端的状态信息,于是,Web Server中引入了session的概念,用来保存客户端的状态信息. ...

  9. session机制和cookie机制

    一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案.同时我们也看到,由于才服务器端保持状态的方 ...

最新文章

  1. 1.4-puppet配置证书
  2. 集成电路:迎国产替代浪潮,设计领域机会凸显
  3. android 双时区,理查德米勒推出RM 11-02自动机芯双时区飞返计时码表
  4. 编写高质量JavaScript代码的基本技巧
  5. ElasticSearch 数据类型keyword和text的区别
  6. opencv python 图片腐蚀和膨胀
  7. python开发windows界面_python适合windows的桌面应用程序开发吗?
  8. centos 5.8 mysql_linux centos5.8装yum安装mysql
  9. 08CMS之标识还原
  10. [Node.js] rsaaes 加密解密
  11. 华盛顿大学计算机专业gpa,华盛顿大学计算机专业基本信息全盘点 学习来这里就对了...
  12. git 一个分支完全覆盖另一个分支
  13. 计算机应用格式工厂部分教案,格式工厂教学案.doc
  14. 从0到N建立高性价比的大数据平台
  15. 关系代数中的除操作怎么用SQL语句表示?
  16. 利用P2P软件(Murder)大规模分发大文件
  17. 最新官方水晶报表实例 - 报表,应用程序
  18. 方舟开服务器教程——开服配置常见问题及解决方法
  19. 3GPP R18确定27个研究项目,看看包含哪些?
  20. 如何显示计算机语言栏,win10语言栏不见了,win7如何显示语言栏

热门文章

  1. 居然要周末加班才解决这个问题
  2. 关于arp攻击,网页跳转到另外一个网页的解决方案
  3. CSDN每日一练:寻因找祖
  4. 华为nova5pro有没有搭载鸿蒙系统,华为nova 5 Pro现身GeekBench数据库:搭载麒麟980+8G内存...
  5. win7系统运行极品飞车10出现卡顿该如何解决?
  6. CTR模型:WideDeep 网络
  7. 语雀新表格——数据表
  8. APP的缓存文件放在哪里?
  9. js 四舍五入保留小数
  10. 最美的时光在路上 - 记第一次深马