我在解决跨域问题时遇到了一些麻烦 . 特别是我们正在尝试从iframe中的外部域(我们控制)加载内容 . 为了防止用户每次都在iframe中登录,我们希望在iframe上设置用户cookie . 为了做到这一点,我们创建了一个iframe,并对内容进行了ajax调用请求,并使用了一个在请求中设置标头的beforeSend回调 .
但是,我们遇到了一些我们无法解决的问题 . 特别是CORS似乎强加了一个OPTIONS请求,无论如何都要解决这个问题?奇怪的是,如果我们将资源的url直接放入iframe定义中,它不会抱怨OPTIONS请求失败,而是继续正常 . 只有当我们尝试ajax请求或简单的$ .get(“...”)请求时 .
为什么在这种情况下它会允许iframe请求完成而不是ajax调用?
以下是响应标头
Response Headers access-control-allow-credentials:true access-control-allow-headers:* access-control-allow-methods:PUT, DELETE, POST, GET OPTIONS access-control-allow-origin:* access-control-expose-headers:* connection:keep-alive content-length:2474 content-security-policy: content-type:text/html date:Tue, 19 Apr 2016 10:38:07 GMT server:TornadoServer/4.3
1 回答
CORS是出于安全原因:
XMLHttpRequest用于ajax调用,浏览器可能阻塞它 .
作为一种解决方法,如果你控制服务器端,你可以添加
Access-Control-Allow-Origin
标头然后响应,所以浏览器不会阻止这个ajax调用 .例如,在 PHP (我不知道您使用的是哪种服务器技术,请以此为例)您可以(在脚本的顶部):
或者,如果您只想允许来自您网域的来电:
EDIT
您应该/也可以使用 Headers
Access-Control-Allow-Methods
定义您的CORS调用接受的方法: