System.Net.ProtocolViolationException:要写入流的字节数超过指定的Content-Length字节数大小。

3

我基于HttpListener编写Web服务器代码,但经常出现如下异常:

“System.Net.ProtocolViolationException

context.Response.Output = System.Text.Encoding.UTF8.GetBytes("xxx");
if (context.Response.Output != null && context.Response.Output.Length > 0)
{
    context.Response.ContentLength64 = context.Response.Output.Length;
    using (var stream = context.Response.OutputStream)
    {
        stream.Write(context.Response.Output, 0, context.Response.Output.Length);
    }
}

这个异常并非每次请求都会发生。 有谁能告诉我如何修复它。谢谢!

1个回答

5
你似乎遇到了下面的问题。你需要检查HttpMethod是否为HEAD请求;在这种情况下,你不能向OutputStream写入字节,否则将会抛出你正在遇到的异常。 使用Chrome时的协议违规异常

但是我在httpMethod中只使用了GET,POST,PUT和DELETE。 - user2677620
客户端仍然可以向您发送头请求。您是否捕获并记录错误并退出?如果没有,那么您需要检查是否在此情况下收到了头请求。 - huntharo
我使用Fiddler发送HEAD请求时,服务器抛出了 ProtocolViolationException 异常。浏览器会自动发送 HEAD 请求吗? - user2677620
是的,浏览器可以向您发送HEAD请求,或者根据您部署和运行的位置,其他东西也可以向您的服务器发送HEAD请求。您是否添加了HttpMethod为HEAD时的日志记录语句?它是否被触发了?看起来是这样的。 - huntharo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接