我已经在服务器(使用CrossoriginFilter的码头)上设置了交叉原始资源共享,并且在IE8和Firefox上完美工作。在Chrome上,它只是...没有。

  $.ajax({ url : crossOriginURL,
    type : "GET",
    error : function(req, message) {
        alert(message);
    },
    dataType :  "json" } );

调用错误函数,并带有有用的消息“错误”。它似乎是在提出请求,但是没有您期望的任何标题。如果URL来自相同的来源,则可以正常工作。

有帮助吗?

解决方案 3

最终对我有用的是 xhr.setRequestHeader('Content-Type', 'text/plain');

其他提示

我以这种方式解决了我的问题:

将其添加到您的PHP代码:

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Credentials: true ");
header("Access-Control-Allow-Methods: OPTIONS, GET, POST");
header("Access-Control-Allow-Headers: Content-Type, Depth, User-Agent, X-File-Size, X-Requested-With, If-Modified-Since, X-File-Name, Cache-Control");

或将这些标头添加到您的响应中。

问题:浏览器在您的主要请求之前向服务器询问选项,以检查该站点是否具有允许具有不同原点的共处的选项,然后如果可以,则可以执行您的帖子或获取请求。

编辑: 尝试此(无黑客攻击),看看您是否正在接收数据...

$.ajax({ url : crossOriginURL,
    type : "GET",
    error : function(req, message) {
        alert(message);
    },
    success : function(data) {
        alert(data);
    },
    dataType :  "text"} );

看来原始海报可能已经解决了他们的问题,但是对于与评论员伊丽莎白相同问题的任何人,我相信问题可能是Chrome拒绝为CORS请求设置一个原始标题本地文件。它甚至不允许您明确覆盖原始标头。这会导致服务器看到“ Origin:Null”,在大多数情况下导致403。 Firefox显然没有这样的限制,正如我在大量发胶后发现的那样。

如果您在这种情况下绝对需要使用Chrome,则可以通过本地运行网络服务器并始终通过HTTP访问您的文件来解决问题:而不是通过文件:。

就我而言,是Localhost:8001(前端)试图在LocalHost:7001(在Server.js上作为节点服务器)调用API。甚至我都安装了CORS插件并打开了Chrome,CORS政策仍然拒绝了它们作为飞行前案件。

我花了半天的时间才解决这个问题。这是“愚蠢的”步骤,信不信由你:

一世。关闭CORS插件,重新加载应用程序,此时您仍然应该获取正确的错误。

ii。将其重新打开,重新加载应用程序,如果API成功,请在此处停下来,无需继续进行III。

iii。但是,如果您仍然会拒绝CORS,请卸载Chrome并安装最新的Chrome。

iv。在新的Chrome上,先前安装的CORS插件仍应在那里,但状态下。

v。重新加载页面,您应该在控制台上获得CORS拒绝消息,这是正确的。

vi。将其重新打开,重新加载页面,错误应该消失。

如果您的情况仍然不起作用,则没有进一步的想法。

我还尝试了以下内容,在server.js(node)上仍然不起作用,因此不用尝试:

var app = express();
var cors = require('cors'); // Already done “npm i cors --save-dev”
app.options('*', cors());

当我更新Chrome时,我正在面临问题,我已经解决了Google扩展名为“ Access-Control-Allow-Crendentials”新版本。如果是旧版本,则无需使用新的Google Chrome版本

https://chrome.google.com/webstore/detail/access-control-allow-cred-/hmcjjjmkppmkpobeokkhgkhgkecjlaobjlaobjldi?hl=en

检查以确保您没有将服务器设置为允许凭据并将允许原始标头设置为 *。如下:

Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true

如果您的服务器正在返回这些标头的这些值,则它将无法使用。如果您设置 Access-Control-Allow-Credentialstrue, ,那你不能使用 *作为价值 Access-Control-Allow-Origin 标题。以下是从MDN WebDocs的摘录(标题)(https://developer.mozilla.org/en-us/docs/web/http/headers/access-control-allow-allow-origin):

For requests without credentials, the literal value "*" can be specified, as a wildcard; 
the value tells browsers to allow requesting code from any origin to access the resource. 
Attempting to use the wildcard with credentials will result in an error.

如果是这样,只需设置 Access-Control-Allow-Credentialsfalse.

Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: false

参考

CORS将在Chrome工作。只需使用Chrome是安全模式,即,使用禁用安全设置。 Google涉及它,或者您甚至可以从命令行开始。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top