Azure 应用服务某些请求 returns 400 错误请求。由于语法格式错误,服务器无法理解该请求
Azure app service some requests returns 400 Bad Request. The request could not be understood by the server due to malformed syntax
所以我们有一个简单的 .net core 5.0 服务,它只提供一些带有 mvc 的简单页面。我们开始收到一些请求的 400 错误(详情如下)。我们的前端嵌入在 iframe 中,这迫使我们使用自己的域进行 api 调用。当我们使用 azure internal-urls 时,400 错误消失了。 (*.azurewebsites.net 而不是 *.ourdomain.net)。当我进入“诊断和解决问题”->“可用性和性能”-> HTTP 4XX 错误时,我可以看到以下错误。关于导致此错误的原因有什么想法吗?
Bad Request. The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.
所以,上面最大的问题是我们没有得到正确的错误信息。经过大量实验后,我们为 Kestrel 激活了 ConnectionLogging。
WebHost.CreateDefaultBuilder(args)
.UseKestrel(options =>
{
options.ConfigureEndpointDefaults(listenOptions =>
{
listenOptions.UseConnectionLogging();
});
})
然后我们发现了一些更有趣的日志。一个说:
Connection id "0HMFSA73IA4LS" bad request data: "Malformed request: invalid headers."
Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException: Malformed request: invalid headers.
经过更多调查后,我们可以区分成功的请求和失败的请求。并且问题与*.ourdomain.se的证书有关。在证书的一部分中,我们有一个名为“Stockholms län”的字符串,在失败时将字符串解码为 l�n,成功时将字符串解码为 l%C3%A4n。我们现在正在调查这是否是负载均衡器问题。但是这个应用程序是 运行 hostingmodel outofprocess。通过将其更改为 inprocess 并将我们的 Kestrel 包装在 IIS 中,错误消失了。
所以我们有一个简单的 .net core 5.0 服务,它只提供一些带有 mvc 的简单页面。我们开始收到一些请求的 400 错误(详情如下)。我们的前端嵌入在 iframe 中,这迫使我们使用自己的域进行 api 调用。当我们使用 azure internal-urls 时,400 错误消失了。 (*.azurewebsites.net 而不是 *.ourdomain.net)。当我进入“诊断和解决问题”->“可用性和性能”-> HTTP 4XX 错误时,我可以看到以下错误。关于导致此错误的原因有什么想法吗?
Bad Request. The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.
所以,上面最大的问题是我们没有得到正确的错误信息。经过大量实验后,我们为 Kestrel 激活了 ConnectionLogging。
WebHost.CreateDefaultBuilder(args)
.UseKestrel(options =>
{
options.ConfigureEndpointDefaults(listenOptions =>
{
listenOptions.UseConnectionLogging();
});
})
然后我们发现了一些更有趣的日志。一个说:
Connection id "0HMFSA73IA4LS" bad request data: "Malformed request: invalid headers."
Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException: Malformed request: invalid headers.
经过更多调查后,我们可以区分成功的请求和失败的请求。并且问题与*.ourdomain.se的证书有关。在证书的一部分中,我们有一个名为“Stockholms län”的字符串,在失败时将字符串解码为 l�n,成功时将字符串解码为 l%C3%A4n。我们现在正在调查这是否是负载均衡器问题。但是这个应用程序是 运行 hostingmodel outofprocess。通过将其更改为 inprocess 并将我们的 Kestrel 包装在 IIS 中,错误消失了。