当CURL获得HTTP 200时,Chrome获取CORT的HTTP 400

时间:2016-11-30 12:31:12

标签: cors symfony

我在用Symfony 3编写的简单REST API中使用NelmioCorsBundle

在前端,我使用dropzone.js上传文件。请求上传API服务器被拒绝,在控制台中我可以看到以下内容:“预检的响应具有无效的HTTP状态代码400 ”。但是,当我使用CURL发送完全相同的请求时,我得到200(使用chrome 复制为cURL 实用程序)。

虽然返回了CORS标头。我可以在之前提到的回复中看到它们:

Access-Control-Allow-Headers:x-custom-auth
Access-Control-Allow-Methods:POST, PUT, GET, DELETE
Access-Control-Allow-Origin:https://example.com
Access-Control-Max-Age:3600

我无法使用xdebug对其进行调试,因为 Chrome在请求CORS时不会发送Cookie 。您还有其他想法如何为CORS标头启用xdebug吗?我可以尝试自己调试它。

对于 NelmioCorsBundle ,我根据他们的例子使用以下配置:

nelmio_cors:
    defaults:
        allow_credentials: false
        allow_origin:
            - '^admin\.project(\.|$)'
            - '^subdomain\.project\.(.*\.|)(lab|int|test|prep)\.nds$'
            - '~^subdomain\.project\.cz$'
        allow_headers: []
        allow_methods: []
        expose_headers: []
        max_age: 0
        hosts: []
        origin_regex: true
    paths:
        '^/':
            allow_origin: ['*']
            allow_headers: ['X-Custom-Auth']
            allow_methods: ['POST', 'PUT', 'GET', 'DELETE']
            max_age: 3600

最后 - 项目/ var / log / * .log 中没有任何内容。

1 个答案:

答案 0 :(得分:0)

问题出在allow_headers配置选项中。浏览器只能在发送CORS时发送 Access - * 标头,并且所有其他标头必须列入白名单。

无论如何,我不明白为什么通过cURL的请求有效。当我在Chrome中使用复制为cURL 工具时,我认为我可以重现相同的请求。