You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何前端Fetch调用REST API遇CORS错误,curl调用却正常?

为什么前端fetch请求REST API报CORS错误,但curl/PowerShell调用正常?
  • CORS是浏览器独有的安全限制
    浏览器为了防范恶意网站盗用用户数据,有一套同源策略:只有请求的协议、域名、端口和当前页面完全一致时,才允许跨域请求。如果你的前端页面和目标API不在同一个源,浏览器就会触发CORS校验,直接拦截响应。而PowerShell/CMD里的curl是在终端环境发起请求,根本不受浏览器的同源策略和CORS规则约束,所以能正常拿到结果。

  • CORS有专属的预检检查流程
    浏览器发起跨域请求前,会自动发一个OPTIONS预检请求给API服务器,确认是否允许当前源的请求。如果服务器没返回正确的CORS响应头(比如Access-Control-Allow-Origin),或者返回的规则和当前请求不匹配,浏览器就会抛出CORS错误——但其实这时候服务器已经处理了请求,只是浏览器不让前端拿到数据而已。curl这类工具不会自动发这个预检请求,直接发送实际请求,服务器返回什么就接收什么,自然不会被拦截。

  • 请求携带的凭证差异
    浏览器发起请求时,会自动带上当前页面的Cookie、本地存储等凭证(如果请求开启了credentials: include),这也是CORS检查的一部分。如果服务器没配置允许携带凭证,也会触发错误。而终端里的curl默认不会携带浏览器的这些凭证,请求更“干净”,不会触发这类限制。

更新:有人建议参考的旧问题年代久远(提及IE7),答案表述不够清晰;而本主题下的答案对我而言更易懂。

内容的提问来源于stack exchange,提问作者nonlinear

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 22:45:56