iframe cookie p3p

问题

参与一个客户端产品的开发,这个产品有几个模块的开发方式是这样的,C++代码调用浏览器组件加载本地一个html页面,这个页面主要是展现一些边框、条幅,为的是跟C++开发的模块的风格看起来像,这个页面的主要内容是通过iframe调用别的web服务器的页面的。

今天一个模块的出问题了,经过定位,问题是这样的:iframe引入的页面设置了一个cookie,但后续的js请求数据时却没有发送这个cookie,而服务器会检查这个cookie,所以验证失败,在客户端表现为没响应。

问题缘由

IE6/IE7支持的P3P(Platform for Privacy Preferences Project (P3P) specification) 协议默认阻止第三方无隐私安全声明的cookie。

在默认情况下IE会自动禁用第三方站点(不同域的站点)的cookie, 也就是在请求第三方站点的某url时在HTTP header里不发送它们的cookie。

在这个客户端产品里,浏览器组件首先加载的是本地的html页面,然后用iframe加载web服务器的一个页面,那么web服务器的页面所在的域与于本地的页面所在的域是不同的,就存在跨域了,所以浏览器组件阻止发送cookie。

继续阅读