请求在CURL中工作但不在Ajax中工作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请求在CURL中工作但不在Ajax中工作相关的知识,希望对你有一定的参考价值。
我有一台运行Scrapyd服务器并尝试安排工作。
当我在下面尝试使用CURL时它工作正常
curl http://XXXXX:6800/schedule.json -d project=stackoverflow -d spider=careers.stackoverflow.com -d setting=DOWNLOAD_DELAY=2 -d arg1=val1
之后,我在角度上做了一个小代码UI,为此设置了一个GUI,
我做了上面的AJAX请求。
var baseurl = GENERAL_CONFIG.WebApi_Base_URL[$scope.server];
var URI = baseurl +"schedule.json"; //http://XXXXX:6800/schedule.json
var headers = {'content-type': 'application/x-www-form-urlencoded'}
console.log(URI)
$http.post( URI,data = $scope.Filters, headers).success(function (data, status) {
console.log(data)
}).error(function (data, status) {
console.log(status);
alert("AJAX failed!");
});
但我得到No 'Access-Control-Allow-Origin' header is present on the requested resource.
错误。
任何人都可以帮我解决这个问题吗?
为什么它在CURL中工作而在我的AJAX中工作。
谢谢,
答案
这是因为浏览器保护称为同源策略。它可以防止跨方案,主机名和端口号的不同组合的Ajax请求。 Curl没有这样的保护。
为了防止它,您要么必须将api和客户端应用程序放在同一个域和端口上,要么将CORS头“Access-Control-Allow-Origin”添加到服务器。
另一种选择是使用JSONP。在这种情况下,这可能适合于获取json数据。它不适合休息api。在角度使用$http.jsonp为此
以上是关于请求在CURL中工作但不在Ajax中工作的主要内容,如果未能解决你的问题,请参考以下文章
Android Geolocation在模拟器中工作但不在手机中工作
Web Api 2.0 在邮递员中工作但不在 HTML 页面中