我正在使用angularJS在symfony 2中调用restfull API。
我的angularJS应用网址为angular.me.dev
我的symfony2 api url是api.me.dev
我跟着this tutorial做了我的restfull api。
问题是当我尝试调用此api时
$http.({
method: 'GET',
url: 'http://api.me.dev/api/articles',
headers: {
'Authorization': 'Bearer ' + token
}
})
发生错误:(此处为谷歌浏览器):
XMLHttpRequest cannot load http://api.me.dev/api/articles. Response for preflight has invalid HTTP status code 405
(在Firefox上):
The Same Origin Policy disallows reading the remote resource
我对此发现了什么?
然后我决定在我的服务器上允许标题,来源......如下:
Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Credentials "true"
Header always set Access-Control-Allow-Methods "PUT, DELETE, POST, GET, OPTIONS"
Header always set Access-Control-Allow-Headers "*"
没有变化
我添加到AngularJS
#coffee script
app.config ['$httpProvider', ($httpProvider) ->
$httpProvider.defaults.useXDomain = true
delete $httpProvider.defaults.headers.common['X-Requested-With']
]
然后我决定在我的symfony api中安装NelmioCorsBundle,但我没有看到任何变化。
最后,我注意到一个电话有效
$http.({
method: 'GET',
url: 'http://api.me.dev/api/articles',
})
这里呼叫返回401响应(好,我需要记录)
$http.({
method: 'GET',
url: 'http://api.me.dev/public/api/users',
})
这里我有一个电话不需要授权,它的工作原理。 我发现只有当我删除标题时它才有效,当我有任何标题(例如内容类型或授权)时,就会发生错误。
任何人都可以帮助我吗?谢谢!
答案 0 :(得分:4)
好的,我的坏。
我说NelmioCors似乎没有用,但我做错了。
我使用此配置再次尝试使用nelmio cors包。
nelmio_cors:
paths:
'^/':
allow_origin: ['http://angular.me.dev']
allow_headers: ['Authorization', 'X-Requested-With', 'Content-Type', 'Accept', 'Origin', 'X-Custom-Auth']
allow_methods: ['POST', 'PUT', 'GET', 'DELETE', 'OPTIONS']
max_age: 3600
它正在运作! NelmioCorsBundle解决了这个问题。