使用Google Chrome和HTTPListener时出现ProtocolViolationException异常

5
我开发了一个管理工具,使用简单的HTTPListener返回HTML页面。在IE和FF中一切正常,但是在使用Google Chrome时会出现ProtocolViolationException异常。
下面是产生错误的简化代码(从listener.BeginGetContext提升):
byte[] buffer = System.Text.Encoding.UTF8.GetBytes("<html><body>response sent!</body></html>");
context.Response.ContentLength64 = buffer.Length;
context.Response.OutputStream.Write(buffer, 0, buffer.Length); //<-- crashes here
context.Response.OutputStream.Close();
context.Response.Close();

这个异常

即将写入流的字节数超过了指定的Content-Length字节数大小。

这个异常是由以下代码所在的行引发的:

context.Response.OutputStream.Write(buffer, 0, buffer.Length);

Chrome浏览器出现这个错误的原因及解决方法如何?

谢谢

1个回答

5

我知道可能有点晚了,但我刚遇到了这个问题(不是在Chrome上),并找到了这个问题。 这段代码看起来很坚固,但在响应HEAD请求时,如果尝试向OutputStream写入内容,它会失败。这时ContentLength64将被设置为0,而当你尝试更改它时,没有任何异常被抛出,新值只是悄无声息地被忽略。


2
记录一下,当收到 HEAD 请求时,您必须至少在响应流上调用 close,否则您将会被卡住。 - pierrecouzy

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