从 Azure App Service 到 Azure Function 的文件上传失败,但不是每次都失败
File upload from Azure App Service to Azure Function fails, but not every time
我们使用 React 网络应用作为前端,使用 Azure Function 作为后端。用户可以通过我们的前端上传文件。然后,前端通过 REST 调用将文件发送到 Azure 函数。
我观察到一个我无法解释的奇怪行为:我打开网络应用程序并上传一个 2 MB 大的文件。我通过单击按钮触发 REST 调用。什么都没发生。约 2.1 分钟后,呼叫停止,没有收到任何响应。
当我打开网络应用程序并上传一个非常小的文件(~ 120 kb)时。我通过单击按钮触发 REST 调用。大约 20 秒后响应为 200 -ok。然后我上传之前的相同文件(2MB 大)并触发 rest 调用,我在 < 30 秒内收到状态代码为 200 -ok 的响应。所以一般后端可以处理文件大小。
为什么会这样?
可能的原因是 azure 函数冷启动吗?
Azure 诊断工具中没有错误。
经过反复试验,我自己弄明白了。我看到我在 Azure 应用程序服务中的一个插槽没有问题。它正在使用另一个 azure 函数槽。然后我在我的工作函数槽和我不工作的函数槽之间做了一个区别。有一个不同的设置:设置 -> 配置 -> 通用配置 -> 传入客户端证书
您可以进行两种设置:
- 客户端证书模式
- 证书排除路径
客户端证书模式在函数上设置为“Allow”没有问题。
在有问题的函数上,客户端证书模式设置为“忽略”。
设置为“忽略”后,无需重置连接即可上传大文件。我不清楚此设置如何影响文件上传,但确实如此。
正确且安全的方法是将证书模式设置为“必需”并添加允许的证书路径。
我们使用 React 网络应用作为前端,使用 Azure Function 作为后端。用户可以通过我们的前端上传文件。然后,前端通过 REST 调用将文件发送到 Azure 函数。
我观察到一个我无法解释的奇怪行为:我打开网络应用程序并上传一个 2 MB 大的文件。我通过单击按钮触发 REST 调用。什么都没发生。约 2.1 分钟后,呼叫停止,没有收到任何响应。
当我打开网络应用程序并上传一个非常小的文件(~ 120 kb)时。我通过单击按钮触发 REST 调用。大约 20 秒后响应为 200 -ok。然后我上传之前的相同文件(2MB 大)并触发 rest 调用,我在 < 30 秒内收到状态代码为 200 -ok 的响应。所以一般后端可以处理文件大小。
为什么会这样?
可能的原因是 azure 函数冷启动吗?
Azure 诊断工具中没有错误。
经过反复试验,我自己弄明白了。我看到我在 Azure 应用程序服务中的一个插槽没有问题。它正在使用另一个 azure 函数槽。然后我在我的工作函数槽和我不工作的函数槽之间做了一个区别。有一个不同的设置:设置 -> 配置 -> 通用配置 -> 传入客户端证书
您可以进行两种设置:
- 客户端证书模式
- 证书排除路径
客户端证书模式在函数上设置为“Allow”没有问题。 在有问题的函数上,客户端证书模式设置为“忽略”。
设置为“忽略”后,无需重置连接即可上传大文件。我不清楚此设置如何影响文件上传,但确实如此。
正确且安全的方法是将证书模式设置为“必需”并添加允许的证书路径。