使用Angular JS,CORS调用Symfony 2 Rest API

vincent_chapron

我正在使用angularJS在symfony 2中调用restfull API。

我的angularJS应用网址是angular.me.dev我的symfony2 api网址是api.me.dev

我按照本教程制作了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',
})

在这里,我有一个不需要授权的电话,它可以正常工作。我只有在删除标题时才发现它起作用,并且当我拥有任何标题(例如,内容类型或授权)时,都会发生错误。

谁能帮我 ?谢谢 !

vincent_chapron

好吧,我的坏。

我说NelmioCors似乎不起作用,但是我做错了。

我使用此配置,再次尝试使用nelmio cors bundle。

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解决了该问题。

https://github.com/nelmio/NelmioCorsBundle

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章