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字段,就会请求所指的位置。

posted @ 2012-04-24 22:38  菜园仔  阅读(3049)  评论(0编辑  收藏  举报