我开发了一个管理工具,我使用一个简单的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生成或未执行此操作的错误是什么?
由于
答案 0 :(得分:5)
我知道它有点太晚了,但我刚刚遇到这个问题(不是Chrome)并且发现了这个问题。 当您尝试向OutputStream写入内容以响应HEAD请求时,这个看似防弹的代码会失败。然后将ContentLength64设置为0,并且由于某种原因,当您尝试更改它时不会抛出异常,只会默默忽略新值。