`

HTTP返回码中301与302的区别

阅读更多
一.官方说法
301,302 都是HTTP状态的编码,都代表着某个URL发生了转移,不同之处在于:
301 redirect: 301 代表永久性转移(Permanently Moved)。
302 redirect: 302 代表暂时性转移(Temporarily Moved )。
这是很官方的说法,那么它们的区别到底是什么呢?
二.现实中的差异
2.1.对于用户
301,302对用户来说没有区别,他们看到效果只是一个跳转,浏览器中旧的URL变成了新的URL。页面跳到了这个新的url指向的地方。
2.2.对于引擎及站长
2.2.1 302
302转向可能会有URL规范化及网址劫持的问题。可能被搜索引擎判为可疑转向,甚至认为是作
弊。
网址规范化
请参见:http://www.chinamyhosting.com/seoblog/2006/04/10/url-canonicalization/
网址劫持
302重定向和网址劫持(URL hijacking)有什么关系呢?这要从搜索引擎如何处理302转向说起。从定义来说,从网址A做一个302重定向到网址B时,主机服务器的隐含意思是网址A随时有可能改主意,重新显示本身的内容或转向其他的地方。大部分的搜索引擎在大部分情况下,当收到302重定向时,一般只要去抓取目标网址就可以了,也就是说网址B。
实际上如果搜索引擎在遇到302转向时,百分之百的都抓取目标网址B的话,就不用担心网址URL劫持了。
问题就在于,有的时候搜索引擎,尤其是Google,并不能总是抓取目标网址。为什么呢?比如说,有的时候A网址很短,但是它做了一个302重定向到B网址,而B网址是一个很长的乱七八糟的URL网址,甚至还有可能包含一些问号之类的参数。很自然的,A网址更加用户友好,而B网址既难看,又不用户友好。这时Google很有可能会仍然显示网址A。
由于搜索引擎排名算法只是程序而不是人,在遇到302重定向的时候,并不能像人一样的去准确判定哪一个网址更适当,这就造成了网址URL劫持的可能性。也就是说,一个不道德的人在他自己的网址A做一个302重定向到你的网址B,出于某种原因, Google搜索结果所显示的仍然是网址A,但是所用的网页内容却是你的网址B上的内容,这种情况就叫做网址URL劫持。你辛辛苦苦所写的内容就这样被别人偷走了
2.2.2 301
当网页A用301重定向转到网页B时,搜索引擎可以肯定网页A永久的改变位置,或者说实际上不存在了,搜索引擎就会把网页B当作唯一有效目标。
301的好处是:
第一,   没有网址规范化问题。
第二,   也很重要的,网页A的PR网页级别会传到网页B。
三.Apache中实现301、302
方法一,url rewrite,mod_rewrite
Rewriteengine on
RewriteCond %{HTTP_HOST} ^cmp.soso.com [NC]
RewriteRule ^/js/(.*) http://www.soso.com/js/$1  [R=301]
ServerName cmp.soso.com
将cmp.soso.com中js目录的下所有访问重定向到http://www.soso.com/js/,指定跳转返回码为301。
对于[R=301]的详解:
‘redirect|R [=code]‘ (强制重定向 redirect)
以http://thishost[:thisport]/(使新的URL成为一个URI) 为前缀的Substitution可以强制性执行一个外部重定向。如果code没有指定,则产生一个HTTP响应代码302(临时性移动)。 如果需要使用在300-400范围内的其他响应代码,只需在此指定这个数值即可,另外,还可以使用下列符号名称之一: temp (默认的), permanent, seeother. 用它可以把规范化的URL反馈给客户端,如, 重写“/~”为 “/u/”,或对/u/user加上斜杠,等等。
注意: 在使用这个标记时,必须确保该替换字段是一个有效的URL! 否则,它会指向一个无效的位置! 并且要记住,此标记本身只是对URL加上 http://thishost[:thisport]/的前缀,重写操作仍然会继续。 通常,你会希望停止重写操作而立即重定向,则还需要使用’L'标记.
方法二 Redirect ,涉及模块:mod_alias
例:
<VirtualHost 10.1.146.163:80>
DocumentRoot /home/qmhball/web/mybranches/stat_3276/oa/
ServerName oalogin.com
Redirect 301 /login.php http://www.soso.com
</VirtualHost>
将oalogin.com下对login.php的访问重定向到http://www.soso.com,返回码301。
如果没有指定redirect的返回值(上例中的301),则默认重定向是”临时性的”(HTTP status 302)。
参考:
1.rfc2616
10.3.2 301 Moved Permanently
10.3.3 302 Moved Temporarily
2. 从HTTP状态 301,302,200 来看页面跳转
http://blog.joycode.com/ghj/archive/2007/09/21/108696.aspx
3. HTTP中的301重定向和302暂重定向重定
http://blog.csdn.net/xuhui_7810/archive/2009/03/06/3962603.aspx
4. apache手册
分享到:
评论

相关推荐

    TCP-HTTP-操作系统.pdf

    301永久重定向,302临时重定向 304资源为修改,读取缓存 4xx:客户端错误,服务器无法处理 403服务器禁止访问 404资源没有在服务器找到 5xx:服务器处理请求发生错误 501客户端请求功能还不支持 502服务器网关出错 ...

    千方百计笔试题大全

    187、JAVA SERVLET API中forward() 与redirect()的区别? 44 189、Can a Java Thread be started from Servlet class, and what will be the implications? 45 190、What is HTTP Session tracking and why is it ...

    java面试宝典

    187、JAVA SERVLET API中forward() 与redirect()的区别? 44 189、Can a Java Thread be started from Servlet class, and what will be the implications? 45 190、What is HTTP Session tracking and why is it ...

    TCP/IP详解

    第4章 IP网络中的名字和地址 29 4.1 IP寻址 29 4.1.1 二进制和十进制数 30 4.1.2 IPv4地址格式 30 4.2 子网的出现 34 4.2.1 分子网 35 4.2.2 可变长子网掩码(VLSM) 37 4.3 无类域前路由(CIDR) 38 4.3.1 无类地址 38 ...

    delphi 开发经验技巧宝典源码

    5.1 ASCII码与编码转换 100 0150 如何获得汉字的区位码 100 0151 通过区位码获取汉字 100 0152 根据ASCII码获得字母 101 0153 获得字母的ASCII码 101 5.2 字符中的转换 101 0154 如何将数字转换成字符...

    delphi 开发经验技巧宝典源码06

    5.1 ASCII码与编码转换 100 0150 如何获得汉字的区位码 100 0151 通过区位码获取汉字 100 0152 根据ASCII码获得字母 101 0153 获得字母的ASCII码 101 5.2 字符中的转换 101 0154 如何将数字转换成字符...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例051 前置运算符和后置运算符的区别 82 实例052 使用位运算对数字进行加密和解密 83 2.3 包含语句 84 实例053 提高代码重用率 84 实例054 包含数据库连接文件 85 实例055 包含网站头文件 86 实例056 包含网站尾...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例051 前置运算符和后置运算符的区别 82 实例052 使用位运算对数字进行加密和解密 83 2.3 包含语句 84 实例053 提高代码重用率 84 实例054 包含数据库连接文件 85 实例055 包含网站头文件 86 实例056 包含网站尾...

    javaSE代码实例

    10.1.3 构造器与返回类型 179 10.2 创建对象 180 10.3 重载构造器 181 10.4 级联调用的构造器 182 10.4.1 构造器的调用流程及默认构造器 182 10.4.2 自定义构造器需要注意的问题 185 10.4.3 不能继承...

    C#编程经验技巧宝典

    88 &lt;br&gt;0136 如何进行文本加密与解密 88 &lt;br&gt;0137 如何区别0、空字符串、Null、Empty和Nothing 89 &lt;br&gt;0138 从字符串中分离文件路径、文件名及扩展名 89 &lt;br&gt;0139 如何批量替换某一类字符串 89...

Global site tag (gtag.js) - Google Analytics