Javascript 将Ajax请求上的Cookie设置到域外
我在处理跨域问题时遇到一些问题。特别是,我们试图从iframe中的外部域(我们控制)加载内容。为了防止用户每次登录iframe,我们希望在iframe上设置一个用户cookie。为了做到这一点,我们创建了一个iframe,让ajax调用请求内容,并使用beforeSend回调来设置请求的头 然而,我们遇到了一些我们无法解决的问题。特别是CORS似乎强加了一个选项请求,有没有办法绕过这个问题?奇怪的是,如果我们将资源的url直接放入iframe定义中,它不会抱怨选项请求失败,而是正常继续。只有当我们尝试ajax请求或简单的$.get(“…”)请求时,才会出现这种情况 在这种情况下,为什么它允许完成iframe请求而不是ajax调用 下面是响应标题Javascript 将Ajax请求上的Cookie设置到域外,javascript,jquery,iframe,cookies,cors,Javascript,Jquery,Iframe,Cookies,Cors,我在处理跨域问题时遇到一些问题。特别是,我们试图从iframe中的外部域(我们控制)加载内容。为了防止用户每次登录iframe,我们希望在iframe上设置一个用户cookie。为了做到这一点,我们创建了一个iframe,让ajax调用请求内容,并使用beforeSend回调来设置请求的头 然而,我们遇到了一些我们无法解决的问题。特别是CORS似乎强加了一个选项请求,有没有办法绕过这个问题?奇怪的是,如果我们将资源的url直接放入iframe定义中,它不会抱怨选项请求失败,而是正常继续。只有当我
响应头
访问控制允许凭据: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');