gpt4 book ai didi

python - Google Cloud Functions (Python) 中的随机连接错误

转载 作者:行者123 更新时间:2023-12-01 21:46:00 24 4
gpt4 key购买 nike

因为过去几周我在浏览器控制台中遇到了一些意外的 CORS 错误,所以我在 Google Cloud Functions 中设置了一个带有单个函数的 super 简单的 Python 脚本:

def prepData(request):

if request.method == 'OPTIONS':
headers = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'POST',
'Access-Control-Allow-Headers': 'Content-Type',
'Access-Control-Max-Age': '3600'
}
return ('', 204, headers)

headers = {
'Access-Control-Allow-Origin': '*'
}
return ("", 200, headers)

它看起来与 Google 在其 documentation page 上提供的功能非常相似有一个主要区别:我使用的是 POST 而不是 GET。

调用函数时,我在大约 50% 的情况下看到一条成功消息(函数执行耗时 13 毫秒,完成状态代码:200)和连接错误(Function在所有其他情况下,执行耗时 11 毫秒,完成状态为:“连接错误”)。每当我在 GCF 中遇到连接错误时,Chrome 的控制台都会记录错误:No 'Access-Control-Allow-Origin' header is present on the requested resource。

我目前正在考虑三个可能的原因:

  1. GCP 基础设施。我发现了一些相关问题,其中 Google 承认了一些基础设施问题。
  2. Python 错误
  3. CORS 错误(用户 sideshowbarker 说:不太可能)

问题的原因是什么,我该如何解决?


调用Python脚本的JS代码如下:

    const xhr = new XMLHttpRequest();
xhr.open("POST", "[URL]");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(stringified_serialized_data);

20 年 4 月 2 日编辑:

我发现了一种触发错误的方法:在两个返回语句之间添加一些代码。我还没有弄清楚需要什么样的代码,但 d = request.get_json() 似乎就足够了。新代码如下所示:

def prepData(request):

if request.method == 'OPTIONS':
headers = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'POST',
'Access-Control-Allow-Headers': 'Content-Type',
'Access-Control-Max-Age': '3600'
}
return ('', 204, headers)

d = request.get_json() #THIS LINE IS NEW

headers = {
'Access-Control-Allow-Origin': '*'
}
return ("", 200, headers)

最佳答案

更新

经过进一步挖掘,我们意识到问题实际上是 Google Cloud Function 服务中的一个错误。此错误会特别影响使用 Python 运行时的云函数。如果这些函数收到正文大于 ~10 KB 的 HTTP POST 请求,它们将引发连接错误(并将返回代码 500)。有趣的是,这不会发生在每个具有此类特征的请求中,但会发生在大多数请求中。

Google 支持服务已获悉此问题,他们承认了该错误。他们创造了 a public issue in their issue tracker应根据解决方案的进度使用其他信息更新。在撰写本文时,该问题已标记为"new"。

解决方法:正如@Timon 所建议的,似乎在函数中调用 request.get_json() 似乎可以解决带有 JSON 主体的请求的问题。如果您的请求正文使用不同的格式,这将不起作用。


旧答案

我刚刚使用您提供的完全相同的代码设置了一个干净的 GC 函数,并且它运行完美。我可以通过浏览器(使用您的 JS 代码)发出请求,它们永远不会失败。

这给我们留下了两个选择:

  1. 您的浏览器或 Internet 连接中存在某些问题,导致您的某些请求失败。
  2. 您的 GCF 中有某些东西导致了错误。

对于选项 1,请检查:

  • 失败的请求是否批量发生?或者他们是随机抽样的?如果它们成批出现,则问题可能出在您的互联网连接上。
  • 您使用的是某种 VPN 或代理吗?尝试禁用它。
  • 您尝试过多种浏览器吗?如果没有,请尝试。所描述的行为在所有这些行为中都相同吗?

对于选项 2,检查这个:

  • 您的函数与您发布的代码完全相同吗?如果不是,并且它有更多代码,则可能是问题所在。
  • 您是否使用某些命令行工具部署函数?是的,尝试通过 GCP 网站中的内联编辑器来完成。
  • 在您的功能的网络设置中(在高级设置中),务必选择“允许所有流量”

关于python - Google Cloud Functions (Python) 中的随机连接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60640852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com