UrlFetchApp.fetch vs提取

时间:2019-02-05 15:50:15

标签: javascript google-apps-script web-applications cors

我使用Google Apps脚本创建了web app

使用服务器端代码,当我使用UrlFetchApp.fetch进行get请求时

UrlFetchApp.fetch("URL", {headers: {Authorization: "Bearer #ID"})

返回正确的响应,一切正常!

这是问题所在,在前端,当我使用fetch函数时,我会遇到一些错误。这是我使用fetch

的方式
fetch(URL,  {headers: {Authorization: "Bearer #ID"})

这是我收到的错误:

  • 获取URL 401(未经授权)-我传递的是与服务器端的UrlFetchApp.fetch请求相同的凭据。
  • CORS错误:CORS策略阻止从来源“ google apps脚本Web URL”获取“ URL”的访问:请求的资源上没有“ Access-Control-Allow-Origin”标头。如果不透明响应满足您的需求,将请求的模式设置为“ no-cors”以在禁用CORS的情况下获取资源。
  • 未捕获(承诺)TypeError:无法提取

我正在研究与CORS相关的大量信息,并尝试了一些解决该问题的步骤,例如:

  • fetch的可选参数中,我添加了mode:"cors"和文档中列出的其他变体。
  • 我部署了Google Apps脚本网络应用
  • 当我尝试从chrome控制台发出请求时,遇到相同的错误...但是当我在邮递员中发出请求时,一切正常。
  • 我在标头字段中添加了"Content-Type": "application/json"字段,并收到了相同的错误。

我知道我还有很多与CORS相关的研究需要吸收。我的主要问题是,为什么从Google Apps脚本服务器环境中可以进行提取,为什么从那里发送的请求与使用浏览器API fetch方法发出的请求相比,不会收到相同的CORS错误?

documentation指出:

  

使用此服务发出的请求来自一组IP范围池。如果您需要白名单或批准这些请求,则可以查找IP地址的完整列表。

我猜这意味着来自服务器端代码的请求在此列表中被接受或批准,而不是使用相同的凭据发出客户端请求。

0 个答案:

没有答案