我在用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 中没有任何内容。
答案 0 :(得分:0)
问题出在allow_headers
配置选项中。浏览器只能在发送CORS时发送 Access - * 标头,并且所有其他标头必须列入白名单。
无论如何,我不明白为什么通过cURL的请求有效。当我在Chrome中使用复制为cURL 工具时,我认为我可以重现相同的请求。