子域名间CORS配置为什么还是被拦截?
我在做子域名间的数据交互时遇到了CORS问题。主域名是example.com,后端接口在api.example.com,前端在www.example.com发起请求。按照教程设置了Access-Control-Allow-Origin为www.example.com,但控制台还是报跨域被拦截的错误,提示”Response to preflight request doesn’t pass access check”。
后端用的是PHP,配置了这样的响应头:
header('Access-Control-Allow-Origin: https://www.example.com');
header('Access-Control-Allow-Methods: GET,POST');
但依然不行。试过把origin设为通配符*能成功,但这样不安全。是不是子域名需要特殊配置?或者还有其他响应头没配全?
在WordPress环境下,你需要额外处理OPTIONS请求,并且把相关头部都加上去。给你一个完整的解决方案:
几个关键点说一下:首先你得处理OPTIONS请求,这是浏览器在正式请求前会发的预检;其次要加上Allow-Headers,特别是如果你用了自定义header或者带认证的话;最后别忘了Allow-Credentials,这个在子域名场景下经常需要。
如果嫌麻烦,插件可以搞定这个事。安装"WP CORS"插件,它能帮你自动处理这些配置。不过建议还是自己写代码控制,毕竟涉及到安全问题。
记得清空浏览器缓存再测试,有时候浏览器会缓存错误的CORS配置,搞得人怀疑人生。我之前就在这上面浪费了大半天时间。