Jar*_*ron 5 c# kestrel-http-server asp.net-core
我有一个 IP 摄像机,我正在尝试从中接收事件。例如,如果它检测到帧的特定部分的运动,我想了解它并获取随事件捕获的图像。
问题是它使用 HTTP/1.0 POST 来发送此信息。根据规范(https://www.w3.org/Protocols/HTTP/1.0/draft-ietf-http-spec.html#BodyLength),正文长度可以通过 Content-Length 标头或通过关闭来传达所有内容都发送到服务器后的连接。IP 摄像机采用两种方法中的后者。
Kestrel 的 Web 服务器不支持此功能,如此处所示 Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.Http1MessageBody.For() 包含以下内容(https://github.com/aspnet/KestrelHttpServer/blob/2191327b59f87f23f69fff2ac0dba9e58b67141b/ src/Kestrel.Core/Internal/Http/Http1MessageBody.cs,第 308-318 行):
// Avoid slowing down most common case
if (!object.ReferenceEquals(context.Method, HttpMethods.Get))
{
// If we got here, request contains no Content-Length or Transfer-Encoding header.
// Reject with 411 Length Required.
if (context.Method == HttpMethod.Post || context.Method == HttpMethod.Put)
{
var requestRejectionReason = httpVersion == HttpVersion.Http11 ? RequestRejectionReason.LengthRequired : RequestRejectionReason.LengthRequiredHttp10;
BadHttpRequestException.Throw(requestRejectionReason, context.Method);
}
}
Run Code Online (Sandbox Code Playgroud)
结果,Kestrel 每次都会抛出 BadHttpRequestException。
关于如何解决这个问题有什么想法吗?
可以在 Kestrel 旁边运行的 TCP 服务器吗?
添加内容长度的低级挂钩?
| 归档时间: |
|
| 查看次数: |
951 次 |
| 最近记录: |