我收到了Firefox的问题。我使用HttpListener实现了Web服务。 工作得很好,我现在遇到的唯一问题是,firefox似乎没有正确解释我的404。
我对HttpResponse对象的所有操作都将StatusCode设置为404并关闭它。 没别了。
Internetexplorer正确显示标准404页面,Firefox显示空白页面,或者如果网址以xml结尾,则会出现XML-Parsing错误。
我做错了什么?
这里的代码并没有真正做到,但这可能是问题,我不知道。
void handlePageNotFound(HttpListenerResponse response)
{
response.StatusCode = 404;
response.Close();
}
我为firefox安装了一个插件来检查状态代码是否正确接收。它是。
答案 0 :(得分:1)
通常,Web服务器会保留单独的html文件,以便在找不到页面时显示,例如404.html。因此,除了发送此消息之外,我认为Mozilla会等待Web服务器提供适当的内容,而不是显示默认页面。
所以我在response.StatusCode = 404
中添加了额外的行try
{
context.Response.ContentType = "text/html";
string str = "<center>404 - Page not found</center>";
byte[] bytes = new byte[str.Length * sizeof(char)];
System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
context.Response.OutputStream.Write(bytes, 0, bytes.Length);
context.Response.OutputStream.Flush();
context.Response.StatusCode = (int)((e is FileNotFoundException || e is DirectoryNotFoundException) ? HttpStatusCode.NotFound : HttpStatusCode.InternalServerError);
context.Response.StatusDescription = e.Message;
}
catch
{
Logger.LogError("Exception processing request 'ProcessFileRequest' - Catch block: {0}", e);
}
更好的方法可能是拥有404.html文件并为此类案例提供内容。