我从我控制的远程服务器获取json时遇到问题.我有2个Web应用程序,一个服务数据并在端口3311上运行,另一个请求数据,正在端口5000上运行.
使用jquery以下工作:
$.ajax({
url: "http://localhost:3311/get-data",
type: 'GET',
dataType: 'json',
beforeSend: function(xhr) {
xhr.setRequestHeader("x-some-header", "some-value");
}
})
.done(function(data) {
$rootScope.$apply(function() {d.resolve(data); });
})
.fail(function(data) {
$rootScope.$apply(function() {d.reject(data); });
});
Run Code Online (Sandbox Code Playgroud)
当使用angular尝试相同的get请求时
$http
.get("http://localhost:3311/get-data", { headers: {"x-some-header": "some-value"} })
.success(function(data) { d.resolve(data);})
.error(function(data) { d.reject(data); });
Run Code Online (Sandbox Code Playgroud)
我收到错误
Origin http://localhost:5000 is not allowed by Access-Control-Allow-Origin.
Run Code Online (Sandbox Code Playgroud)
控制台日志显示OPTIONS请求返回HTTP200后发生的错误
OPTIONS http://localhost:3311//get-data 200 (OK) angular.min.js:99
(anonymous function) angular.min.js:99
l angular.min.js:95
m angular.min.js:94
(anonymous function) app.js:78
b.extend.each jquery-1.9.1.min.js:3
b.fn.b.each jquery-1.9.1.min.js:3
(anonymous function) app.js:76
d angular.min.js:28
instantiate angular.min.js:28
(anonymous function) …Run Code Online (Sandbox Code Playgroud) 这已经通过Stackoverflow进行了讨论,但我无法找到使其工作的解决方案.我甚至尝试过这篇文章中讨论的很多内容(CORS问题.烧瓶< - > AngularJS),因为它与我的设置完全相关,但我仍然很丢失.
我有一个本地运行的python flask api服务器.我已将此域名命名为bac-api.这是vhost的样子.
<VirtualHost *:80>
ServerName bac-api
WSGIDaemonProcess bacapi python-path=/home/lumberjacked/workspace/bas/development/lib/python2.7/site-packages
WSGIScriptAlias / /home/lumberjacked/workspace/bas/development/bac-api/bacapi.wsgi
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept, application/json"
Header set Access-Control-Allow-Methods "POST, GET, OPTIONS"
<Directory /home/lumberjacked/workspace/bas/development/bac-api>
WSGIProcessGroup bacapi
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
#SSLEngine on
#SSLCertificateFile /etc/apache2/ssl/bac_api_ssl.crt
#SSLCertificateKeyFile /etc/apache2/ssl/bac_api_ssl.key
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
我有一个angularjs站点作为我的前端运行在一个名为manage.bac的独立域上.我正在编写一个连接到bac-api的身份验证服务,并发布api密钥和/或用户凭据,询问服务器用户是否经过身份验证.
我可以卷曲到服务器,这可以工作并返回一个响应.
curl -X POST -H "Content-Type: application/json" -d '{ "api": "7f3d6d7338b921ae4ca95cecc452ef1790005ec10c2343fabe5a59ea" }' http://bac-api/authenticated/
response -- {"authenticated": false}
Run Code Online (Sandbox Code Playgroud)
还要管理.bac和我的登录信用卡email@email.com和密码我得到相同的响应,但我已经配置它返回401如果您没有使用存储的会话进行身份验证.
POST http://bac-api/authenticated/ 401 (UNAUTHORIZED) bac-api/authenticated/:1 …Run Code Online (Sandbox Code Playgroud)