【发布时间】:2015-01-22 06:23:58
【问题描述】:
在我的 sinatra 应用程序的服务器上,我有以下设置:
before do
headers 'Access-Control-Allow-Origin' => '*',
'Access-Control-Allow-Methods' => ['OPTIONS', 'GET', 'POST'],
'Access-Control-Allow-Headers' => ['Content-Type', 'Accept', 'X-Requested-With', 'access_token']
env['rack.errors'] = error_logger
end
在我的前端应用程序中,我执行以下 http 请求:
$.ajax({
type: "POST",
url: "http://findaspot.multimediatechnology.at/api/",
data: json,
dataType: "json",
success: function (data) {
console.log('Success!');
console.log(data);
},
error: function(xhr, status, error) {
var err = eval("(" + xhr.responseText + ")");
alert(err.Message);
}
})
我总是收到此错误消息:
XMLHttpRequest cannot load http://findaspot.multimediatechnology.at/api/. Invalid HTTP status code 404
该错误与对服务器的预检 OPTIONS 请求有关 - 因为我正在发送 JSON - 我已经尝试将 jQuery.ajax 选项“异步”设置为 false - 也不起作用。
到目前为止,我不知道如何解决这个问题。如果你们能帮帮我就好了。
【问题讨论】:
-
我的理解是,标头 Access-Control-Allow-Origin 应该由您向其发出请求的主机提供,而不是由发出 XHR 请求的客户端提供。另一种选择是让他们启用 CORS 并将引用者设置为您的域,他们必须设置 CORS 以允许您的域进行调用。