我正在尝试做一个CORS GET,它会发送cookie。我已经在服务器中设置了所有的头(access-control-allow-origin
、access-control-allow-credentials
、access-control-allow-headers
),并在jquery ajax请求中使用withCredentials: true
和crossDomain: true
。当我告诉浏览器允许第三方cookie时,一切都正常。有没有办法做到这一点而不强迫访问者允许第三方cookie?我甚至尝试过重定向用户并重定向回,但CORS会拒绝发送cookie。:/
我尝试过通过ajax和iframe来完成CORS请求。
我认为这是不可能的。请参阅我的(旧的但相关的)博客文章。唯一的防弹方法是使用第一方cookie(即,在顶级窗口中打开窗口,如单独的选项卡,或重定向当前窗口)。
但在某些情况下,这是不必要的。浏览器对第三方cookie的概念略有不同,默认行为也有所不同。这篇文章对这些细节有一个很好的概述。因此,在某些情况下,您可以使用一些技巧来启用(或至少检测)页面上的cookie。
其他解决方案包括将一台服务器放在另一台服务器的子域下(子域通常不被视为第三方),或者更改流,以便通过cookie以外的其他方式对用户进行身份验证。
如果你设置了cookie(origin 2设置cookie),你应该知道会使用第三方cookie,但如果你只得到cookie(只发送origin 2的cookie,而没有设置响应),那么第三方cookie就没有理由发挥作用。
所以我认为你在origin 2中设置了一个cookie,因为这个力,你启用了第三方cookie。
请注意,CORS响应中设置的cookie受正常第三方cookie策略。在上面的示例中,页面被加载来自foo.example,但第19行的cookie是由bar.other发送的,并且如果用户的浏览器被配置为拒绝所有第三方cookie。跨来源资源共享mozilla.org