HTTP协议中的301与302状态的区别【转】
众所周知,在http协议中200代表成功,404代表没有找到,403代表禁止访问。要查找所有HTTP状态代码所示的含义,可以问一下Google哦。
http://www.google.com/support/webmasters/bin/answer.py?hl=zh-Hans&answer=40132
那么,301和302都是页面重定向,会有什么区别吗?
301:请求的网页已被永久移动到新位置。服务器返回此响应(作为对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302:服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置。
简单的来说:
301: 永久转移(Permanently Moved)
302: 暂时转移(Temporarily Moved)
我们在《godaddy虚拟主机不能绑定多个域名的解决方案》一文中就是用到301的永久重定向,就是这个道理。
那么,如果才能产生301或302重定向呢?除了上文提到的可以使用.htaccess进行rewrite进行URL重写之外呢,还可以编写程序。代码如下:
301程序示例:(PHP)
<?php
header('HTTP/1.1 301 Moved Permanently');
header('Location:http://92lib.info/ ');
exit;
?>
302程序示例:(PHP)
<?php
header('Location:http://92lib.info/ ');
exit;
?>
看,是不是很简单。
解释一下。其实无论用什么方法,只是向http协议中的头部添加了重定向location代码。
具体的HTTP头部可以看到:
Date | Mon, 14 Nov 2011 05:42:38 GMT |
Server | Apache |
Vary | Accept-Encoding,Cookie |
X-Pingback | http://92lib.info/xmlrpc.php |
Location | http://92lib.info/ |
Content-Length | 0 |
Keep-Alive | timeout=15, max=100 |
Connection | Keep-Alive |
Content-Type | text/html; charset=UTF-8 |
浏览器查找HTTP头部有这个location字段,就会请求所指的位置。