2017-06-13 70 views
-3

我得到使用AJAX以下错误调用的API对UPS访问控制允许来源错误解决方法 - 无法访问服务器

的XMLHttpRequest无法加载https://wwwcie.ups.com/rest/Ship。对 预检请求的响应未通过访问控制检查:否“访问控制 - 允许 - 原始”标头存在于请求的资源上。原因 'http://localhost:63786'因此不允许访问。

AJAX调用:

$.ajax({ 
    url: "https://wwwcie.ups.com/rest/Ship", 
    type: "POST", 
    dataType: 'json', 
    crossDomain: true, 
    contentType: 'application/json', 
    data: JSON.stringify(message), 
    success: function (result) { 
       //code to execute on success 
    } 
    error: function (result) { 
       //code to execute on error 
    } 
}) 

我有过API服务器无法控制,所以我不能修改标题被送回。我试过了JSONP,改变了我发送的头文件,还有一些其他的解决方案无济于事。我读过,使服务器端代理可能是一个可能的适合,但我不知道我会如何去做这件事。任何建议/代码样本可能的解决方案将不胜感激。提前致谢。

+1

您需要一个服务器端代理。编写发送该请求并转发响应的服务器代码。 – SLaks

+1

代理是您唯一的选择。而且,由于您没有指定使用的服务器,因此无法给出具体的答案。 – Brad

+0

[如何绕过Access-Control-Allow-Origin?]的可能重复(https://stackoverflow.com/questions/7564832/how-to-bypass-access-control-allow-origin) –

回答

-1

什么是阻止恶意网站发送请求到您的银行的网络应用程序和转移所有的钱?为防止这些类型的恶意攻击,如果您使用的是Web浏览器,则服务器必须明确指出允许哪些远程源访问特定资源(如果有)。

如果您需要一个密钥来访问它,那么CORS可能未启用。您始终可以通过查看响应标题进行复查。看到这一点:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin

所以当别人已经提到的,你可以解决这个问题通过使从你自己的服务器的请求(其中头不将其识别为一个浏览器和受限制CORS) ,并将其代理到您的客户端应用程序。

您正在使用节点/快递假设,这样的事情应该工作:

const express = require('express'); 
const app = express(); 

const myHeaders = new Headers(); 

const myInit = { method: 'GET', 
       headers: myHeaders, 
       mode: 'cors', 
       cache: 'default' }; 

app.get('/ups/stuff/stuff', (req, res) => { 
    fetch('/ups/api/stuff', myInit) 
    .then(response => response.json()) 
    .then(json => res.json(json); 
}); 

app.listen(3000); 

天然提取API是整洁的,因为你可以在客户端和服务器上使用它,它支持的承诺像jQuery。

https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch

相关问题