为什么我的前端请求总是报错”Blocked by CORS”,即使后端设置了Access-Control-Allow-Origin?
我在做前后端分离项目时遇到个怪问题:fetch('/api/data')请求总是被浏览器拦截,显示”Blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header present”。
但后端明明在响应头里写了Access-Control-Allow-Origin: *。我尝试过用POSTMAN测试接口,直接访问API路径都能正常返回数据。用浏览器开发者工具看,请求头里有Origin: http://localhost:3000,可响应头里就是看不到CORS相关的头信息。
后端是PHP写的,响应头代码如下:
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');
最奇怪的是GET请求偶尔能成功,但POST请求百分百失败。难道是预检请求的问题?可我明明设置了OPTIONS方法…
试试在PHP里加个判断,专门处理OPTIONS请求:
另外,浏览器缓存可能也会搞事,清一下缓存或者换个隐身模式试试,应该能用。