我遇到了HttpListener的问题,它运行得很好(包括返回404)但是如果我向输出Stream写任何东西(为404返回自定义html)那么即使我设置状态代码= 404 firebug显示状态200 ok,一旦我删除了自定义html,它就会看到预期的404。
因为我得到了404,如果我取消注释2个注释行,我得到我想要显示的HTML但是200,而我期望404:
//var buffer = System.Text.Encoding.UTF8.GetBytes("<html><head></head><body><h1>404 not found</h1></body></html>");
//ctx.Response.OutputStream.Write(buffer, 0, buffer.Length);
ctx.Response.StatusCode = 404;
答案 0 :(得分:5)
由于HTTP协议要求在内容之前发送状态代码,因此一旦您写入输出流,就会自动为您发送状态200,然后是您写入流中的任何内容。如果您在写入输出流后尝试设置状态代码,则已经太晚了。