MDN 有一些关于 CORS 和 fetch 的非常好的文档。
当您使用 CORS 标志在不同的来源上调用 fetch 时:
fetch(url, {method: 'GET', mode: 'cors'})
如果 url 来自不同的来源,fetch 将首先发出带有标头的OPTION 请求:
Origin: http://foo.example
Access-Control-Request-Method: GET
服务器必须确认允许此类请求的来源,并发送响应:
Access-Control-Allow-Origin: http://foo.example
Access-Control-Allow-Methods: GET
您的服务器很可能没有启用 CORS。这可以通过浏览器控制台网络请求轻松检查。检查OPTIONS 是否已由服务器发送和回复,并且您的站点是否存在于返回的Access-Control-Allow-Origin: 标头中。
请注意,如果您的服务器需要授权,您应该调用fetch 和{credentials: 'include'}:
fetch(url, {method: 'GET', mode: 'cors', credentials: 'include'})