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

Google Apps Script Web App带路径调用触发CORS策略问题求助

解决Google Apps Script Web App带路径请求的CORS问题

问题核心是带路径的请求触发了浏览器的OPTIONS预请求,而你的Google Apps Script只实现了doGet方法,没有处理OPTIONS请求,导致预请求失败,触发CORS错误。直接访问基础URL时属于浏览器的简单请求,不会触发预校验,所以能正常返回数据。

解决步骤:

1. 添加doOptions方法处理预请求

专门响应浏览器的OPTIONS预请求,返回必要的CORS头:

function doOptions(e) {
  return ContentService.createTextOutput('')
    .setMimeType(ContentService.MimeType.TEXT)
    .setHeaders({
      'Access-Control-Allow-Origin': '*', // 生产环境建议替换为你的实际域名,比如https://your-site.com
      'Access-Control-Allow-Methods': 'GET, OPTIONS',
      'Access-Control-Allow-Headers': 'Content-Type'
    });
}

2. 修改doGet方法,给响应添加CORS头

确保实际的GET请求响应也包含跨域允许头:

function doGet(e) {
  let output = "";
  const path = e.pathInfo.split("/"); // 用const避免全局变量污染
  switch(path[0]) {
    case "Employees":
      output = path.length > 1 ? getEmployeeByName(path[1]) : getAllEmployees();
      break;
    case "Tasks":
      output = getAllTasks();
      break;
    default:
      output = { error: "无效的请求路径" }; // 处理未知路径的情况
  }
  
  return ContentService.createTextOutput(JSON.stringify(output))
    .setMimeType(ContentService.MimeType.JSON)
    .setHeaders({
      'Access-Control-Allow-Origin': '*', // 和doOptions保持一致,生产环境替换为指定域名
      'Access-Control-Allow-Methods': 'GET, OPTIONS'
    });
}

3. 优化前端fetch配置(可选但建议)

GET请求不需要设置Content-Type为text/plain,可以移除该头或改为application/json,减少预请求触发的概率:

try {
  fetch(this.url + "/Employees", {
    redirect: "follow",
    method: "GET",
    headers: {
      "Accept": "application/json" // 指定接受JSON格式
    },
  })
  .then(response => response.json())
  .then(data => {
    // 处理返回的数据
    console.log(data);
  })
} catch (err) {
  console.log(err);
}

关键注意点:

  • 修改代码后必须重新部署Web App并更新版本,否则修改不会生效
  • 生产环境不要用*作为允许源,替换为你的实际业务域名,提升安全性
  • 浏览器直接访问属于简单请求,不会触发OPTIONS预校验,所以能正常返回,但前端脚本的跨域请求必须通过预校验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 01:50:08