- 刚刚开始了一个新项目,Symfony 4作为API,Vue作为前端/应用程序。
- Vue 开始抱怨 CORS,所以我开始发送所需的 CORS 标头(
Access-Control-Allow-Origin
)。 - 然后它开始说"预检响应没有 HTTP 正常状态"。
我现在破解了我的 API,强制状态代码始终为 200,但我正在寻找一个长期的解决方案。为什么我的API是用Symfony 4构建的,没有响应OK状态?
https://github.com/nelmio/NelmioCorsBundle ->它很容易配置
nelmio_cors:
defaults:
allow_credentials: false
allow_origin: []
allow_headers: []
allow_methods: []
expose_headers: []
max_age: 0
hosts: []
origin_regex: false
forced_allow_origin_value: ~
paths:
'^/api/':
allow_origin: ['*']
allow_headers: ['X-Custom-Auth']
allow_methods: ['POST', 'PUT', 'GET', 'DELETE']
max_age: 3600
'^/':
origin_regex: true
allow_origin: ['^http://localhost:[0-9]+']
allow_headers: ['X-Custom-Auth']
allow_methods: ['POST', 'PUT', 'GET', 'DELETE']
max_age: 3600
hosts: ['^api.']
要手动响应,您可以阅读 https://developer.mozilla.org/en-US/docs/Glossary/Preflight_request 中的定义
->它基本上声明一个选项请求将包含至少 3 个标头:
- 访问控制请求方法
- 访问控制请求标头
- 起源
要使请求成功,您必须通过返回具有以下标头的空响应来响应此请求:
- 访问控制-请求-方法 - 您允许的方法列表(即"发布,获取,选项")
- 访问控制允许源 - 请求的源
或非 2xx 状态(如果 CORS 请求应被拒绝)
由于预检请求使用 OPTIONS 请求方法,因此您的 Web 服务器很可能没有设置为开箱即用地支持它们 - 许多默认仅支持 GET、POST 和 HEAD。
如果是这种情况,它可能就像更改标志以允许 OPTIONS 请求一样简单。好吧,并且还返回正确的 CORS 响应标头...