Home > IT > The Free Lunch is Not Delicious-HTTP Header Restriction

The Free Lunch is Not Delicious-HTTP Header Restriction

分享家:Addthis中国

作为一个穷人而言,总是希望能寻找到一点免费的午餐。当然这种行为也是很可以理解的。不可否认的是,我就是这个大队伍里面的一员。
我似乎更觉得,也许哪天我不再是一个穷人了,我仍然寻找免费的午餐。因为现在我身处这个大队伍中,并没有觉得有什么不好。

在开源、免费的世界中徘徊,我不是开源信徒,我只是希望自己能自豪的说:我现在用的东西,要么是自己买的,要么就是免费的,我不用盗版。

废话说了一堆,言归正传。
前段时间,在提到过我的Blog换服了。在换服之前,我也做了一些调研,发现口碑最好的两个是000webhost000space。网上关于他们的文章可谓是铺天盖地了。

这两个免费主机供应商,前者比后者更为老牌。
000webhost也见识到了中国网民对免费的热情。面对中国网民疯狂的注册,000webhost不堪重负,限制了中国的IP,因为中国IP段的朋友们想注册000webhost的服务,只能通过代理了。而且000webhost还对部分代理进行了屏蔽。笔者曾通过代理申请过,最后很点背地使用到了一个被屏蔽的代理,导致我的域名被000webhost放入了黑名单。最后我通过美国IP的朋友申请到了空间也是徒劳,黑名单中的域名不再允许绑定,凄惨啊。

无奈之下,我注册了000space,并且沿用至现在。000space的使用也让我深深体会到了,免费的午餐并不是非常可口。
最近有朋友向我反映,只要在机器上没有我站点的缓存,通过外链点击到我的风云阁就会出现403错误,并被强制跳转到一个http://xxxx.xxxx.com/notify/2.php页面,让人很是抓狂。一开始我并没有注意,直到几天之内不止一个人向我反映了这个问题,我开始关注了,同时注意到我的Google Analytics出现一个很漂亮的低谷。

很有钻研精神的Solrex同学发现,000space的服务器MS对HTTP Header严格的限制。比方说,非同域名的Referer,就会403跳转;非Mozilla的标准浏览器User Agent,它也会跳转。这个让我非常的崩溃。

关于这个问题,万恶的懒惰的客服也没有给予我答复,看来只能自己解决了。为了防止跳转到别的域名,首先我得自己定义一个403页面,来防止跳转。但是就算定义了自己的403页面,但每次只能别人通过外链点击进来就是个403页面也不是个办法啊。

一开始我很天真地认为如果在403加了个301重定向

<?php
Header( "HTTP/1.1 301 Moved Permanently" );
Header( "Location: http://".$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"] );
?>

事实证明,这个想法相当的蠢,在Firefox下直接提示“发现循环重定向”,IE和Chrome则是不停地重定向到403页面,没完没了了。

其实目前的问题就是外链点击进去,就会403,但是直接在地址栏输入地址就完全没有问题。于是我再次考虑,如果用Javascript模拟输入地址,是否可以达到效果。

<script>
	location.href="<?php echo "http://".$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"]; ?>";
</script>

出现了一样的结果,不停地重定向到了403页面。

朋友曾和我提到过,网站只要缓存过了,通过外链就可以转到我的站点了,我设想难道是403页面被缓存了,理论上来说,通过javascript这样子跳转是不属于Referer的,应该不会被403。只能在前面添加一个清空客户端缓存的代码试试看了。

<?php
	header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
	header("Last-Modified: ". gmdate("D, d M Y H:i:s")."GMT");
	header("Cache-Control: no-store, no-cache, must-revalidate");
	header("Cache-Control: post-check=0, pre-check=", false );	
	header("Pragma: no-cache");	
?>
<script type="text/javascript">
	location.href="<?php echo "http://".$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"]; ?>";
</script>

事实证明,我的想法没错,这次成功了。
然后,我还曾试过一次在前面提到的301重定向前面再加一个清空缓存操作,但是事与愿违,并没有达到效果,依然是不停地重定向到403页面,让我着实费解。
因为403页面也属于是在我域名,从我的域名页面301重定向到同域名的页面,理论上来说是不会出现403了呀。如果是因为403页面被缓存了,那我在重定向之前也做了清空缓存的操作了,为什么还是会不断的重定向到403呢?

现在虽然解决了外链点击过来不能正常显示的问题。但是毕竟用的不是301重定向,因为对于SEO还是很不友好的。如果哪位朋友能明白前面301重定向的思路有什么问题的话,请告知,我会非常感激!

最后,非常感谢在我调试的时候,Gu Jun和Solrex不厌其烦的帮我测试。

You don't feel like leaving comments? Please leave your palm-print.
懒得留言?那留下您的掌印吧。
  1. August 14th, 2009 at 11:44 | #1

    呵呵,你这个鬼问题的确是很恶心。不过呢,说实话,000webhost也不省油。6000文件数限制。你想想看一个WP的模板的文件数就多少个了,外加WP系统,呵呵,其实接近三分之一已经去掉了。免费的终究是免费的,呵呵

    • August 14th, 2009 at 12:35 | #2

      可见免费的午饭都不可口啊。不过既然是免费了那就先忍了

  1. November 14th, 2009 at 10:24 | #1

:D 8) :down: 8O :!: :halo: :evil: :heart: :kiss: :lol: :money: :mrgreen: :x :| :pirate: :?: :oops: :roll: :P :( :) :o :up: :vangry: :twisted: ;) :? :cry:

也许您会觉得ReCAPTCHA验证码很繁琐,会认为他和其他所有的验证码一样让你厌烦。那请点击这里,您会了解到ReCAPTCHA为人类文化的传承做出了多大的贡献。请您也为人类知识的保存和传递也出一份力吧,谢谢!
 
    Posts Nav.