P3P 这种跨域技术现在的情况如何?为何感觉并不是很流行……

2016-02-02 20:36:43 +08:00
 eastpiger

最近想造个 SSO 的轮子,查 UCenter 的代码的时候发现他们在实现同步登陆的技术上,应用了 P3P 这个技术实现跨域 cookie 。查了一下发现这个技术据说很吊的样子,但是也发现似乎最近提到的非常少啊……这个技术最近的情况是什么样子的。有没有哪位给普及下……是有什么缺陷么?

3431 次点击
所在节点    问与答
9 条回复
explon
2016-02-03 00:38:17 +08:00
因为用 JS 调用的解决方式还是兼容性更好
explon
2016-02-03 00:39:10 +08:00
补充 JS 调用: Script 标签载入跨域 Cookie
Vi
2016-02-03 02:45:03 +08:00
因为这是 ms 的。。
emric
2016-02-03 03:35:42 +08:00
P3P 不是跨域技术,而是 IE 浏览器隐私设置中的一个协议,相当于严格版本 “禁止跟踪”。
不通过 P3P 申报网站的私隐政策,就不允许跨域设置 Cookie 。
tabris17
2016-02-03 07:47:01 +08:00
ie 私有的,兼容性不行
jugelizi
2016-02-03 09:04:19 +08:00
p3p 是为了兼容 ie 的
现代浏览器用 cors
cszchen
2016-02-03 09:13:47 +08:00
UCenter 同步登陆的技术用 js 轮询实现的吧?
比不上 auth2.0 的方式
andy12530
2016-02-03 11:17:29 +08:00
p3p 就是为解决 cookie 携带问题的。
现在场景如下:客户网站为 a.com ,投放代码 b.com/b.js ,展现<iframe src="b.com/b.html"></iframe>广告。需要在展现广告时,由 b 域下面的请求,给 b 域种上对应 cookie 以做统计追踪等。

前提:
客户访问 a.com 前,从未访问过 b.com ,即 b.com 下 cookie 是空的。
问题:
1 、 b.html 在 header 上附上 cookie 能写入进去吗?
2 、 b.html 页面里的 ajax 或者 json 请求的 header 上附上 cookie ,能写入进去吗?

结论:
在高级浏览器下,是可以写进去的。 chrome 上甚至可以通过 ajax 请求写入 cookie 。
但在 IE8 ( 9 好像也有)以下, a 域下的来自 b 域的 iframe ,是无法写入 cookie 的。这种 cookie 叫第三方 cookie ,不信你可以去看浏览器设置(浏览器设置为全放行第三方 cookie 的话,可以正常写入), IE 右下文会有一个小标识,提示有第三方 cookie 写入被拒绝。

这时想正常写入,就需要 P3P header ,类似『 P3P:CP=" OTI DSP COR IVA OUR IND COM "』里面的第个词都有应的意思。而且完整的 p3p header 会有相应的隐私策略 xml, IE 用户可以点进去看对应的隐私条款。
p3p header 必须由 b.html 携带, cookie 也从此条请求 response 中下发才可以, b.html 里面的 ajax header 中携带,或者在前端 setCookie 都是无效的。


——————————————
不信?把浏览器所有 cookie 全清掉,然后访问个挂百度联盟的小电影网站,看看 baidu.com 下是不是被写入了一堆 cookie 。你自己不加 p3p ,在 IE 下打死都写不进去。

这个场景算是 cors 里面的一种,和 Oauth 没有半毛钱关系(你可曾见过,你访问挂联盟广告的网站,弹个 oauth 确认?)。
andy12530
2016-02-03 11:20:25 +08:00
抱歉,有错别字。上面『 JSON 』修改为『 JSONP 』

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/255075

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX