凌晨两点,网站报错我盯着屏幕上那个旋转的网站报错加载图标,已经转了快半分钟。网站报错然后它停了,网站报错跳出一行字:404 Not Found。网站报错我下意识按了刷新,网站报错同样的网站报错结果。再刷,网站报错还是网站报错一样。那一刻我感觉自己像个站在别人家门口的网站报错快递员,门牌号明明没错,网站报错但房子消失了。网站报错
404大概是网站报错互联网上最诚实的错误代码。它不绕弯子,网站报错直接告诉你:你要找的网站报错东西,不在这儿。相比之下,403说“我知道你要什么,但我不给你”,500说“我坏了但我不告诉你怎么坏的”,只有404坦坦荡荡——没有就是没有。
我后来查了一下,这个代码的正式名称叫“HTTP 404 Not Found”,属于客户端错误。意思是请求发出去了,服务器收到了,但服务器翻遍了所有角落,找不到对应的资源。注意,是客户端错误,不是服务器错误。换句话说,服务器在说:这锅我不背,是你找的东西本来就不存在。
第一次遇到404的人可能会慌,以为是自己网络出了问题。多遇几次就习惯了,甚至会产生一种奇怪的默契感。你知道那个页面曾经存在过,可能是一篇文章、一张图片、一个商品链接,但现在它被删了、被移走了、或者链接拼错了。你来的太晚,或者太早,或者走错了门。
我有个做运维的朋友说,他们最怕的不是404本身,而是404出现的方式。如果用户访问一个不存在的页面,服务器返回404,这是正常的。但如果用户访问一个明明存在的页面,服务器也返回404,那就是配置出了问题。更糟的是,有些网站把所有错误都返回200状态码,页面上却写着“页面不存在”。这种做法在技术上叫“软404”,对搜索引擎极不友好。Google的爬虫会以为这个页面是正常的,反复来抓,结果抓到的全是空内容。
他还跟我讲过一个案例。某电商网站大促前夜,运维团队发现商品详情页的404错误率突然飙升。排查了半天,发现是一个CDN节点的缓存配置写错了,把正常的商品页当成了不存在的资源。用户点进去看到404,以为商品下架了,转头就去了竞品平台。那一晚损失的订单,够买好几台服务器。
404页面本身也是一门学问。有些网站把它做得特别无聊,就一行黑字白底,连个返回首页的链接都没有。用户到了这里,基本就是死胡同,只能手动改地址或者关掉页面。有些网站则花心思设计,放个卡通形象、讲个冷笑话、或者推荐几个热门内容。我见过一个独立博客的404页面,上面写着:“这篇文章可能被我删了,也可能被外星人劫持了。你可以试试搜索,或者去首页看看。”下面配了一张飞碟的图。这种处理方式,至少让用户没那么恼火。
从技术角度说,自定义404页面需要在服务器配置里指定。Apache用ErrorDocument 404 /not-found.html,Nginx用error_page 404 /404.html。配置本身不难,难的是有人忘了配,或者配了之后路径写错了,导致404页面本身也404。那就真的成了一个笑话。
我自己的博客也经常出现404。有时候是改了文章的固定链接,忘了做重定向。有时候是清理了旧文件,没检查有没有外部链接引过来。每次在搜索引擎后台看到404的抓取记录,我都会顺手补一个301跳转,把旧地址指向新地址。301是永久重定向,告诉搜索引擎和用户:这个东西搬到别处了,以后别来这儿找了。这比直接返回404要友好得多。
不过话说回来,404也不全是坏事。它至少说明你的请求被服务器处理了,只是没找到目标。比起连接超时、DNS解析失败、SSL握手错误这些更底层的问题,404已经算是很体面的失败了。它就像图书馆管理员告诉你:“这本书我们馆藏系统里没有。”而不是图书馆直接关门了。
下次再看到404,别急着关页面。看看那个页面上有没有搜索框,有没有返回首页的按钮,有没有推荐内容。有时候迷路反而能发现一些计划外的东西。当然,如果那个404页面本身做得敷衍了事,那就当我没说。