Javascript 将Ajax请求上的Cookie设置到域外

Javascript 将Ajax请求上的Cookie设置到域外,javascript,jquery,iframe,cookies,cors,Javascript,Jquery,Iframe,Cookies,Cors,我在处理跨域问题时遇到一些问题。特别是,我们试图从iframe中的外部域(我们控制)加载内容。为了防止用户每次登录iframe,我们希望在iframe上设置一个用户cookie。为了做到这一点,我们创建了一个iframe,让ajax调用请求内容,并使用beforeSend回调来设置请求的头 然而,我们遇到了一些我们无法解决的问题。特别是CORS似乎强加了一个选项请求,有没有办法绕过这个问题?奇怪的是,如果我们将资源的url直接放入iframe定义中,它不会抱怨选项请求失败,而是正常继续。只有当我

我在处理跨域问题时遇到一些问题。特别是,我们试图从iframe中的外部域(我们控制)加载内容。为了防止用户每次登录iframe,我们希望在iframe上设置一个用户cookie。为了做到这一点,我们创建了一个iframe,让ajax调用请求内容,并使用beforeSend回调来设置请求的头

然而,我们遇到了一些我们无法解决的问题。特别是CORS似乎强加了一个选项请求,有没有办法绕过这个问题?奇怪的是,如果我们将资源的url直接放入iframe定义中,它不会抱怨选项请求失败,而是正常继续。只有当我们尝试ajax请求或简单的$.get(“…”)请求时,才会出现这种情况

在这种情况下,为什么它允许完成iframe请求而不是ajax调用

下面是响应标题


响应头
访问控制允许凭据:true
访问控制允许标头:*
访问控制允许方法:放置、删除、发布、获取选项
访问控制允许来源:*
访问控制公开标头:*
连接:保持活力
内容长度:2474
内容安全策略:
内容类型:text/html
日期:2016年4月19日星期二10:38:07 GMT
服务器:TornadoServer/4.3

出于安全原因:

出于安全原因,浏览器限制跨源HTTP请求 从脚本中启动。例如,XMLHttpRequest如下 同一原产地政策。因此,使用XMLHttpRequest的web应用程序 只能向其自己的域发出HTTP请求

XMLHttpRequest用于ajax调用,浏览器可能正在阻止它

作为一种解决方法,如果您控制服务器端,您可以添加
访问控制允许源文件
头文件,然后进行响应,这样浏览器就不会阻止此ajax调用

例如,在PHP中(我不知道您使用的是什么服务器技术,请以此为例),您可以(在脚本顶部)执行以下操作:

或者,如果只允许来自域的调用:

header('Access-Control-Allow-Origin: http://yourdomain.com');
编辑

您应该/也可以使用头
访问控制允许方法
定义CORS调用接受哪些方法:

header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');

我们的服务器端使用django,我们可以控制tornado头的设置,并且添加了所需的头。相反,我们看到它返回405,这可能意味着我们需要在代码中实现一个options端点。但是,我们不能控制代码,只能控制配置选项。
header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');