6

我遇到了 HttpListener 的问题,它工作得很好(包括返回 404),但是如果我向输出流写入任何内容(返回 404 的自定义 html),那么即使我设置状态代码 = 404,萤火虫也会显示状态 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;
4

1 回答 1

7

由于 HTTP 协议要求在内容之前发送状态代码,因此一旦您写入输出流,状态 200 会自动为您发送,然后是您写入流中的任何内容。如果在写入输出流后尝试设置状态码,已经太晚了。

于 2014-11-14T21:28:28.297 回答