http://google.com/a/bogus/url
为什么这种行为优先于重定向到单个404页面网址,例如http://google.com/pagenotfound
或类似的内容?
我首先在我们实现的Drupal站点中注意到了这种行为。如果您访问非现有页面,即:http://mysite.com/a/bogus/url/
,则会显示“找不到页面”消息。如果您使用TELNET获取页面,您会看到返回了正确的HTTP 404错误代码,但不会重写URL。我很震惊,所以我在Drupal.org上打开了一个错误报告。在写下错误报告时,我想用Google作为(我认为)应该发生的事情的一个例子。令我沮丧的是,谷歌做了同样的事情!
为什么要关心?你可能会问。好吧,假设我在我的网站上安装了Google Analytics。如果按照我的预期重写了404页面网址,那么我应该能够运行一个报告,看看我的访问者看过我的一个页面,而且只有404页面。然后,我可以看到他们来自哪里,并希望找到有问题的链接。
就目前而言,Google Analytics脚本将从http://mysite.com/a/bogus/url/
执行,并很乐意报告有人刚刚看到此页面。我怎么知道有人看到404页面的时候?我并不是在寻找我的特定编程问题的答案,而是深入了解为什么重定向不是常见的做法。
任何想法都会非常感激。
答案 0 :(得分:4)
将重定向返回到包含错误消息的页面不正确。你告诉客户端页面确实存在,位于不同的地址,然后告诉他们它毕竟不存在。或者,更糟糕的是,并且非常普遍地,您的错误页面将作为200 OK响应返回,因此您声称页面确实存在而不存在。
这会降低浏览器的速度,迫使他们提出额外的完全不必要的请求,并且可能会混淆自动化工具。这也意味着如果您随后将文件放在地址a/bogus/url
,则用户将无法点击重新加载来获取它,因为它们最终会出现一个只显示错误的地址。这也可能与缓存有关,因为重定向响应可能是可缓存的。
虽然404s的情况并不像将所有服务器端错误(500)重定向到单独的错误页面地址这样的常见错误一样糟糕。
使用重定向而不是仅仅返回响应中的不同页面通常是服务器端脚本语言的一个假象,它将传入的URL绑定到视图,如.asp(*)。 Google没有使用要求他们指定将在URL中返回的视图的框架,因此他们不需要发出重定向。他们可以以更有效和正确的方式做到这一点。
(*:虽然即使在ASP [.NET]中你也可以将Server.Transfer推送到不同的页面而不发出重定向。不幸的是,这不是ASP编码器中常见的做法;有文化偏好 - 我会称之为疾病 - 重定向,通常最终导致可怕的重定向循环并调试祸患。)
当有人看到404页面时我怎么知道?
任何体面的网络日志分析器都允许您根据HTTP响应进行搜索。事实上,你会以这种方式获得更好,更准确的结果,并且在每种情况下都会给出确切的错误链接,而重定向不会发生这种情况。
为什么重定向不是常见做法。
是一种常见做法。这是一种常见的错误的做法,需要避免。
答案 1 :(得分:0)
为什么这种行为优先于重定向到单个404页面网址,例如http://google.com/pagenotfound或类似的内容?
有人可能打错了。知道/看看是否是这种情况会很高兴。
此外:
如果按照我的预期重写了404页面网址,那么我应该能够运行一个报告,看看我的访问者看过我的一页,只有404页。
网络服务器的日志中不是404
吗?