[英]Fetch request failing in google apps script ONLY
我正在尝试设置一个将信息发送到我的服务器的谷歌聊天应用程序,但是我遇到了一个问题,即仅在使用 Google Apps 脚本时请求失败并出现 464 错误。 使用 axios 或 fetch,或使用我自己的客户端,或使用 postman 在浏览器中运行请求,同样的请求在 100% 的时间内都有效。 但是一旦我从谷歌应用程序脚本发出这个请求,它就会产生 464,我无法弄清楚为什么。
代码本身在谷歌脚本中非常简单:
const response = UrlFetchApp.fetch('https://dev-core.kalosflorida.com/v1/trelloslackbot',
{
method: "GET",
followRedirects: true,
muteHttpExceptions: true
})
和标准 javascript
fetch('https://dev-core.kalosflorida.com/v1/trelloslackbot')
.then(res => console.log(res))
.catch(err => console.error(err))
我看不出这两个示例之间有什么区别,但谷歌脚本版本总是在我的负载平衡器上失败并出现 464 错误。
亚马逊的故障排除指南中解释了该错误:
HTTP 464 负载平衡器收到与目标组协议的版本配置不兼容的传入请求协议。
可能的原因:
- 请求协议是 HTTP/1.1,而目标组协议版本是 gRPC 或 HTTP/2。
- 请求协议是 gRPC,而目标组协议版本是 HTTP/1.1。
- 请求协议是 HTTP/2,请求不是 POST,而目标组协议版本是 gRPC。
在您的情况下,问题似乎是第一个。 您的负载均衡器的目标组协议是HTTP/2
,而 Apps 脚本发送HTTP/1.1
请求。
您可以使用HTTP2.Pro API对此进行测试:
function test() {
const response = UrlFetchApp.fetch('https://http2.pro/api/v1')
console.log(response.toString())
}
这个 API 返回用作 JSON 字符串的协议。 在 Apps 脚本中,响应是这样的:
{
"http2":0,
"protocol":"HTTP\/1.1",
"push":0,
"user_agent":"Mozilla\/5.0 (compatible; Google-Apps-Script; beanserver; +https:\/\/script.google.com; id: [...])"
}
同时使用 Javascript 访问浏览器中的端点或仅输入 URL 将返回以下内容:
{
"http2":1,
"protocol":"HTTP\/2.0",
"push":1,
"user_agent":"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/100.0.4896.127 Safari\/537.36"
}
如您所见,Google 的 Apps 脚本服务器发送HTTP/1.1
请求,而您的浏览器将使用HTTP/2
。 我查看了UrlFetchApp
文档,看起来没有办法更改 Apps 脚本使用的协议,因此您可能必须将负载均衡器的目标组配置为使用HTTP/1.1
。 亚马逊在这里有一些相关文档。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.