不按套路出牌

standard

“我说你这个人儿不讲究儿,你不按套路出牌啊,出脑筋急转弯你得按3呐?”

——小品《功夫》

前一段时间,为了在校局域网外(比如,使用手机)访问校内局域网的某个站点,我使用了Apache 2的代理功能,而要访问的站点在发现经由了一个不受信任的代理后会给出非法入口的提示,不能看到站内具体内容。

Apache 2的代理功能会发送HTTP_X_FORWARDED_FOR和HTTP_VIA,这是一种规范的做法,网站一般通过检查这两个HTTP头信息来判断用户是否使用了代理和用户的真实IP地址。

为了解决问题,我首先想到在Apache 2的配置文件中说明要禁用HTTP_X_FORWARDED_FOR等信息的发送,结果配置文件不完整的选项(只能禁用HTTP_VIA,但是这不够)。后来在Apache的邮件列表中发现,Apache 1的时候还没有发送HTTP_X_FORWARDED_FOR的这个功能,有一位开发者认为加上这个功能会比较好,大家都同意,于是就变成现在这个样子 :-|。

这时候,很容易想到让Apache 1和Apache 2一起运行来达到目的,这样子会有很多部署和配置工作要做,很麻烦。Apache 2中的代理功能由mod_proxy提供,也没有隐秘的参数配置可以供使用。

如果允许使用各种手段达到目的,那么这个事情就好办了,我找到了Apache 2中负责HTTP代理的二进制文件mod_proxy_http.so,直接用二进制编辑器把其中的X_FORWARDED_FOR改了一个字母,重启Apache之后,问题立即解决 :-)

前几天室友说他的闪存盘复制进来的文件都被填满了字符’0’,让我帮忙解决,否则就抢走我的闪存盘 :-? 现在闪存多使用FAT32文件系统,而在Linux下对于FAT32文件系统的检查修复功能比较弱,没有查出错误,换用Windows下的工具也没有检查出来,估计磁盘检查工具都是只测试读取没有写入数据再读进行验证,或者是由于系统缓存,刚写入的数据再读取会发现是一样的。
后来我就用了这样一种办法,用文件把坏块填住:

for (( i=1; i < 314; i++ )); do cp xxx /mnt/flash/tmp/$i.xxx; done
umount /mnt/flash
mountfor i in /mnt/flash/tmp/*.xxx; do md5sum $i | grep yyyyyy && rm $i; done

再把文件分区表弄乱,使得占住坏块的文件不能被删除,虽然这种做法看起来很愚蠢,但是实际上比较好地解决了问题。

这些解决问题的方法我并没有很快想到,是绞一绞脑汁才想到的,也许会根本想不到。我认为是各种标准、规范束缚了创造力,而由于是创造力带来进步,标准可能会是前进的阻力,又因为事物应该是一直在进步的,所以我觉得没有必要事事遵循标准,或者geek于某几个软件,用户体验感觉好就很好。

写到这里并不是提倡大家去无视标准乱来,标准是很重要的,它提供了一套统一的接口,为人们的交流、合作带来了可能和方便。只是希望大家在沧桑岁月中记得自己还有这样和那样的创造力,偶尔也能因为小创意而想到这个表情:  :-P

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>