http状态码301和302详解及区别

 

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

 一直对http状态码301和302的理解比较模糊,在遇到实际的问题和翻阅各种资料了解后,算是有了一定的理解。这里记录下,希望能有新的认识。大家也共勉。

 

官方的比较简洁的说明:

        301 redirect: 301 代表永久性转移(Permanently Moved)

        302 redirect: 302 代表暂时性转移(Temporarily Moved )

        ps:这里也顺带记住了两个比较相近的英语单词(permanently、temporarily),嘻哈!

 

        详细来说,301和302状态码都表示重定向,就是说浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取(用户看到的效果就是他输入的地址A瞬间变成了另一个地址B)——这是它们的共同点。他们的不同在于。301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址;302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。

 

 

      这里开启傻瓜自问自答模式(自己可能想到的疑问):

1、什么是重定向啊?

        就是地址A跳转到地址B啦。百度百科的解释:重定向(Redirect)就是通过各种方法将各种网络请求重新定个方向转到其它位置(如:网页重定向、域名的重定向、路由选择的变化也是对数据报文经由路径的一种重定向)。

 

2、可是,为什么要进行重定向啊?什么时候需要重定向呢?

        想跳就跳,就跳的漂亮。还是借鉴百度百科:

1)网站调整(如改变网页目录结构);
2)网页被移到一个新地址;
3)网页扩展名改变(如应用需要把.php改成.Html或.shtml)。
这种情况下,如果不做重定向,则用户收藏夹或搜索引擎数据库中旧地址只能让访问客户得到一个404页面错误信息,访问流量白白丧失;再者某些注册了多个域名的网站,也需要通过重定向让访问这些域名的用户自动跳转到主站点等。
3、那么,什么时候进行301或者302跳转呢?
当一个网站或者网页24—48小时内临时移动到一个新的位置,这时候就要进行302跳转,打个比方说,我有一套房子,但是最近走亲戚去亲戚家住了,过两天我还回来的。而使用301跳转的场景就是之前的网站因为某种原因需要移除掉,然后要到新的地址访问,是永久性的,就比如你的那套房子其实是租的,现在租期到了,你又在另一个地方找到了房子,之前租的房子不住了。
清晰明确而言:
使用301跳转的场景:
1)域名到期不想续费(或者发现了更适合网站的域名),想换个域名。
2)在搜索引擎的搜索结果中出现了不带www的域名,而带www的域名却没有收录,这个时候可以用301重定向来告诉搜索引擎我们目标的域名是哪一个。
3)空间服务器不稳定,换空间的时候。
使用302跳转的场景:
--尽量使用301跳转!
4、为什么尽量要使用301跳转?——网址劫持!
这里摘录百度百科上的解释:
        从网址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 劫持。你辛辛苦苦所写的内容就这样被别人偷走了。302 重定向所造成的网址URL 劫持现象,已经存在一段时间了。不过到目前为止,似乎也没有什么更好的解决方法。在正在进行的谷歌大爸爸数据中心转换中,302 重定向问题也是要被解决的目标之一。从一些搜索结果来看,网址劫持现象有所改善,但是并没有完全解决。
我的理解是,从网站A(网站比较烂)上做了一个302跳转到网站B(搜索排名很靠前),这时候有时搜索引擎会使用网站B的内容,但却收录了网站A的地址,这样在不知不觉间,网站B在为网站A作贡献,网站A的排名就靠前了。
301跳转对查找引擎是一种对照驯良的跳转编制,也是查找引擎能够遭遇的跳转编制,它告诉查找引擎,这个地址弃用了,永远转向一个新地址,可以转移新域名的权重。而302重定向很容易被搜索引擎误认为是利用多个域名指向同一网站,那么你的网站就会被封掉,罪名是“利用重复的内容来干扰Google搜索结果的网站排名”。
自问自答模式先告一段落,这里分享下我在NodeJs中实现跳转的场景:

 

        之前做过一个重构的项目,由于各种原因,我们的网站的登录以及注册部分需要剥离为另一个网站,域名和之前的不同,所以,我们需要保证旧的地址也能重定向到地址中去,我们就在旧的系统的node层中作了一个重定向,代码类似这样:

 

这里没有设置状态码,发现默认是302跳转,然后我们设置了301状态码,类似这样:

 

用fiddle抓包(上面的302调整我就不上图了),看到效果:

 

以上是使用Express,用nodejs原生的代码实现类似这样:

 

        先到这里了,路漫漫其修远兮,下班回家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/449761.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

哪些编程语言需要修复?

摘要:编程语言有十全十美的吗?每种语言都有缺陷吗?这不,Java、C、C、Python都中枪了。语言之间也可相互“掐架”,一起来看下。 原文作者Kevin Kelleher采用一种比较新颖的方式来比较编程语言:即描述每个编程…

时间修改,学习

设定时间格式 import datetime print datetime.datetime.now().strftime("%Y-%m-%d %H:%M") # 2018-05-08 16:54 时间增加 import datetime print (datetime.datetime.now()datetime.timedelta(days1)).strftime("%Y-%m-%d %H:%M:%S") days改为hours m…

Python标准库

《Python标准库》基本信息原书名: The Python Standard Library by Example 原出版社: Pearson Education 作者: (美)Doug Hellmann 译者: 刘炽 出版社:机械工业出版社 ISBN:9787111378105上架时间&#xf…

五种世界顶级思维-20190303

一、墨菲定律: 你越害怕什么,就越会发生什么。 二、吉尔伯特定律:工作中最大的困难就是没人跟你说如何去做。 三、吉德林法则:把问题清楚的写下来,就已经成功一半了。 四、沃尔森法则:把信息和金钱排在第一…

状态码301和302的区别

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 定义如下: 301 Moved Permanently 被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应…

Perl迎来25岁生日

摘要:Perl迎来了它的第25岁生日,普天下Perlist都冒泡同庆一下,很多开发者喜欢它的理由是因其具备强力、稳定、成熟、可移植性等特点,Perl的爱好者们赶快送上你的祝福吧! 昨天,Perl迎来了它的第25岁生日&…

20165114 《网络对抗技术》 Exp0 Kali安装与配置 Week1

目录: 一、kail的下载与安装 二、kali的网络设置 三、安装vmware-tools。 四、更新软件源。 五、共享文件夹 六、安装中文输入法 一、kail的下载与安装 VMware workstation的安装 因为之前的课程已经涉及,所以本机已经安装好了VMware workstation&#x…

大数据:互联网大规模数据挖掘与分布式处理

《大数据:互联网大规模数据挖掘与分布式处理》基本信息原书名:Mining of Massive Datasets作者: (美)拉贾拉曼(Rajaraman,A.) (美)厄尔曼(Ullman,J.D.) [作译者介绍]译者: 王斌丛书名: 图灵程序设计丛书出版社:人民邮电…

pip 切换源安装

https://pypi.tuna.tsinghua.edu.cn/simple/ # 清华大学 https://mirrors.aliyun.com/pypi/simple/ # 阿里云 https://pypi.douban.com/simple/ # 豆瓣 https://pypi.mirrors.ustc.edu.cn/simple/ # 中国科学技术大学 https://pypi.hustunique.com/ # 华中科技大学 代码…

String... 参数定义中有三个点的意思

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 有一个方法: protected void addMessage(String... messages) { ... } String... 是指参数的长度是可以变化的&#xff0…

SpringCloud框架搭建+实际例子+讲解+系列五

(4)服务消费者,面向前端或者用户的服务 本模块涉及到很多知识点:比如Swagger的应用,SpringCloud断路器的使用,服务API的检查、token的校验,feign消费者的使用。大致代码框架如下: 先…

软件开发者最重要的四大技能

摘要:现如今,可供选择的技术、语言及平台可谓五花八门,因此要弄明白哪里是花时间训练的最佳投资点也就难上加难…… 现如今,可供选择的技术、语言及平台可谓五花八门,因此作为软件开发者,要弄明白哪里是花时…

数据缺失的补充与修改

1查看数据情况 df.shape df.info() 2.用指定值填充 df df.fillna(x) 3.判断是否缺失 df.isnull() 4.删除缺失数据 df df.dropna() 5.补充平均值 df df.fillna(df.mean()) 6.填充他前面一个元素值(ffill向前填充,bfill向后填充)(limit:可以…

其他-私人♂收藏(比赛记录 Mar, 2019)

OwO 03.03 [USACO19JAN] A. Redistricting 题意:给 \(g\) ,求 \(f(n)\) 。 \(f(i)f(j)[g(i)\ge g(j)],j \in (i-k,i]\) 。 离散化之后线段树优化 DP ;或者发现额外贡献最多只有 \(1\) ,单调队列。 B. Exercise Route 题意&#xf…

JSR 303 - Bean Validation 简介及使用方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 一、JSR-303简介 JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是Hibernate Valida…

POJ 3683 Priest John's Busiest Day(2-ST)

题目链接:http://poj.org/problem?id3683 题意:有n个婚礼要举行,但是只有一个牧师。第i个婚礼使用牧师的时间长为leni,可以在开始时或结束时使用。问能否使得n个婚礼均举行? 思路:对于婚礼i,i*2-1表示在开…

12个git实战建议和技巧

摘要:git无疑是现在最热门的版本控制工具,而且正在进一步侵占SVN以及CVS的市场。本文作者从国外技术问答社区Stack Overflow整理的12个很实用的git使用技巧和建议,希望对你有帮助。 1.使用“git diff”来折叠多行 用git diff经常会出现很多内…

python读写json和txt

读写json #数据保存如json文件 import json jsObj json.dumps(code_sec) fileObject open(jsonFile.json, w) fileObject.write(jsObj) fileObject.close() #读取json文件 # 将类文件对象中的JSON字符串直接转换成 Python 字典 with open(jsonFile.json, r, encoding…

Java 12 将于3月19日发布,8 个最终 JEP 一览

开发四年只会写业务代码,分布式高并发都不会还做程序员? JDK 12 已于2018年12月进入 Rampdown Phase One 阶段,这意味着该版本所有新的功能特性被冻结,不会再加入更多的 JEP 。该阶段将持续一个月,主要修复 P1-P3 级…

股票期货数据的resample处理

​ import pandas as pd stock_day pd.read_csv("stock_day.csv") stock_day stock_day.sort_index() # 对每日交易数据进行重采样 (频率转换) stock_day.index# 1、必须将时间索引类型转换成Pandas默认的类型 stock_day.index pd.to_datet…