Fuck 404

在一篇介绍 HTTP 监控框架的推文中, 作者针对监控框架常见玩法的弊端进行了分析, 提出了相应结合业务特性的解决方案. 在实际的应用中效果如何, 鄙人这般弱鸡暂时还没有接触过, 因此暂时不讨论这个问题.
其文中提到「 HTTP 状态码监控的弊端」使我产生了一番兴趣. 为了不产生阅读障碍, 我将文章部分摘抄在下面. 
原文地址:   100行代码,搞定http监控框架

__提问__: 常见的 HTTP 非 200 状态码, 以及响应时间监控有什么弊端 ?<br> __回答__: 每个公司都有自己的 404 页面,例如 58到家 的404页面大概长这样:

image.png
这个页面的 HTTP 状态码是 200. 且返回速度极快, 根本不能代表 HTML 页面的真实运行情况, 很难起到真正的监控作用.
_画外音:  不是说http状态码监控没用,相反,http状态码的监控是很有必要的,http状态码404说明系统一定有问题,但http状态码200不能说明系统没有问题。_

上面这段话应该阐述的比较清楚了。当用户请求了一个服务器端不存在的资源时,正常情况下服务器会抛异常,返回状态码为 404. 但近乎所有的网站为了优化用户的体验都不会选择直接返回那串异常信息,而会定制一个 error.html。以你能读懂的方式告诉你:你要的东西,我这里没有!
想到我的同窗苍老师(是同窗没错!) 在学 Web 相关的东西,因此打算跟他一起讨论一下这个问题。

addpass : @苍老师, HTTP 状态码404说明系统一定有问题,但 200 不能说明系统没有问题。为什么?
5分钟后….
苍老师: 200是系统成功处理了请求, 你说不能说明系统没得问题. 可能还有其他问题?

addpass: 不对不对… (画外音: 说不能是什么鬼..好吧)

addpass: 等等等等, 我说错了, 不是不对,是不在点子上… 详细一点,举个例子?

苍老师: 不清楚具体的,只是这样想的话可能是数据被盗取了之类的吧

addpass: 不是不是, 这个扯太远了。http://blog.sslocal.cn/404/ 这是我的404 ,返回码是200.

苍老师: 这是?404页面还能有其他东西的?

addpass: 为了优化用户体验,如果请求页面404,会统一返回 error.html。举个例子:
http://www.addpass.me/fuck , 用户要 /fuck.
但你知道我这是正经网站,没有这个页面。此时服务器应该返回404状态码。不过
既然是正经网站,那么也应该是注重用户体验。考虑到别人访问网页,就得到一串报错的信息太
不友好,所以凡是404的请求,都返回一个error页面,善意提醒他走错了片场。
因为有这个 HTML 返回了,因此状态码就 200 了。

苍老师: 一个表面意思404, 我以为请求这边会验证你接受到的网页

addpass: 嗯,对!看这个就是不加处理,直接返回404了。image.png这个就是优化后的404 image.png

苍老师: 系统真的是收到 HTML 就200吗 ?

addpass: 正常情况应该是那样.但看知乎返回了 HTML 文件, 但状态是404. 你觉得可能是怎么实现的? image.png

苍老师: 他下面有个404.js , 会不会是这个导致?image.png

addpass: 看一下代码,应该不是这个js的原因。这个 js 看起来像是搜集数据用的,
track 非正常请求。返回了 HTML, 而状态码又是 404 。我猜应该是在后端做了处理。404
的请求,返回 error.html ,这时候再处理一下,修改状态码为404,这样就方便 HTTP 监
控了?改天跟老大求证一下。image.png

addpass: 你看百度的 not found , 感觉就不如知乎的严谨了, 这一点上,知乎和谷歌看齐了. /斜眼笑





苍老师: 休息了 image.png

addpass: 好,走!