我使用AJAX在UPS上调用API
时出现以下错误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,更改我发送的标题,以及其他一些解决方案无济于事。我已经读过,制作服务器端代理可能是合适的,但我不确定如何解决这个问题。任何有关可能解决方案的建议/代码示例都将不胜感激。提前谢谢。
答案 0 :(得分:-1)
什么是阻止恶意网站向您银行的网络应用发送请求并转移所有资金?要防止这些类型的恶作剧,如果您使用的是Web浏览器,则服务器必须明确说明允许哪些远程源访问某个资源(如果有)。
如果您需要密钥来访问它,则可能未启用CORS。您始终可以通过查看响应标头进行双重检查。见:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin
正如其他人已经提到的那样,您可以通过从您自己的服务器发出请求来解决这个问题(标题不会将其标识为浏览器并受到CORS限制),并将其代理到您的客户端应用程序
假设你正在使用Node / Express,这样的东西应该可以工作:
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这样的promise。
https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch