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

CORS是否仅作用于JavaScript?如何简单复现跨域请求错误?

CORS相关问题解答

1. HTML锚点发起的GET请求是否不受CORS限制?

对,完全不受限制。HTML锚点(<a>标签)的跳转属于浏览器的原生导航行为,本质上和手动在地址栏输入URL跳转一致——浏览器的核心功能就是支持跨网站导航,所以这类请求不会触发CORS校验。

2. CORS是否仅适用于通过Fetch API等客户端JavaScript发起的编程式GET请求?

更准确的说法是:CORS规则管控的是浏览器环境下由JavaScript主动发起的跨域HTTP请求:

  • 包含Fetch API、XMLHttpRequest这类编程式请求;
  • 也包括<script>、<img>、<link>这类标签的跨域资源加载(不过这类属于“简单请求”,浏览器有默认宽松规则,通常不会触发预请求,但如果服务器返回不允许的头,依然会被拦截)。
    而浏览器原生的导航(a标签跳转、地址栏输入)、普通表单提交(跳转式的POST/GET)这类非JavaScript驱动的行为,都不在CORS的管控范围内。

3. 如何在简单环境中复现CORS错误?

作为后端开发者,不用复杂前端框架,纯HTML+JS就能快速复现:

  • 第一步:用你的C++服务器在localhost:8080启动服务,返回如下HTML页面:
    <!DOCTYPE html>
    <html>
    <body>
      <button onclick="testCrossDomain()">触发跨域请求</button>
      <script>
        function testCrossDomain() {
          // 请求另一个端口的API接口
          fetch('http://localhost:8081/api/hello')
            .then(res => res.text())
            .then(msg => alert('响应内容:' + msg))
            .catch(err => alert('CORS错误:' + err.message));
        }
      </script>
    </body>
    </html>
    
  • 第二步:在localhost:8081启动另一个你的C++服务器,提供/api/hello接口,但不要添加任何CORS相关响应头(比如Access-Control-Allow-Origin)。
  • 第三步:打开浏览器访问http://localhost:8080,点击页面上的按钮。此时浏览器会通过JavaScript发起跨域Fetch请求,因为服务器8081没返回允许跨域的头,浏览器会直接拦截请求,并在开发者工具(F12)的控制台里抛出CORS错误——这就是你要复现的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:32:46