状态码301和302区别

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wen_binobject/article/details/97940280

1. 首先分析下相同点和不同点。

相同点
301和302状态码都表示重定向,客户端浏览器的URL都会改变(用户看到的效果就是他输入的地址A瞬间变成了另一个地址B)。

不同点
301 redirect: 301 代表永久性转移(Permanently Moved)
301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址;
302 redirect: 302 代表暂时性转移(Temporarily Moved )
302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。

2. 应用场景呢?什么情况下需要重定向?

2.1应用场景
  1. 场景一 想换个域名,旧的域名不用啦,这样用户访问旧域名时用301就重定向到新的域名。其实也是告诉搜索引擎收录的域名需要对新的域名进行收录。
  2. 场景二 登录后重定向到指定的页面,这种场景比较常见就是登录成功跳转到具体的系统页面。
  3. 场景三 有时候需要自动刷新页面,比如5秒后回到订单详细页面之类。
  4. 场景四 有时系统进行升级或者切换某些功能时,需要临时更换地址。
  5. 场景五 像微博之类的使用短域名,用户浏览后需要重定向到真实的地址之类。
  6. 场景六 也是我实际遇到过的 通过cas统一认证登录时 请求一个url 通过重定向 到对应系统的某个模块下。
2.2什么情况下需要重定向?

当一个网站或者网页24—48小时内临时移动到一个新的位置,这时候就要进行302跳转,打个比方说,我有一套房子,但是最近走亲戚去亲戚家住了,过两天我还回来的。而使用301跳转的场景就是之前的网站因为某种原因需要移除掉,然后要到新的地址访问,是永久性的,就比如你的那套房子其实是租的,现在租期到了,你又在另一个地方找到了房子,之前租的房子不住了。

使用301跳转的场景:
1.域名到期不想续费(或者发现了更适合网站的域名),想换个域名。
2. 在搜索引擎的搜索结果中出现了不带www的域名,而带www的域名却没有收录,这个时候可以用301重定向来告诉搜索引擎我们目标的域名是哪一个。
3. 空间服务器不稳定,换空间的时候。

3. 301和302需要了解的关键问题

301与302在选择上注意的问题——302 重定向和网址劫持(URL hijacking)

描述如下
从网址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重定向很容易被搜索引擎误认为是利用多个域名指向同一网站,那么你的网站就会被封掉。

总之,除非真是临时重定向使用302,其他的情况最好还是使用301.

参考文章
https://blog.csdn.net/grandpang/article/details/47448395
https://www.cnblogs.com/zhuzhenwei918/p/7582620.html
https://www.cnblogs.com/lanqiu5ge/p/9457074.html

展开阅读全文

如何判断301或者302的转向?

07-31

[code=Delphi(Pascal)]rnfunction CheckUrl(url:string):boolean;rnvarrn hSession, hfile, hRequest: hInternet;rn dwindex,dwcodelen :dword;rn dwcode:array[1..20] of char;rn res : pchar;rnbeginrn //检查URL是否包含http://,如果不包含则加上 rn if pos('http://',lowercase(url))=0 then rn url := 'http://'+url; rn rn Result := false; rn rn hSession := InternetOpen('InetURL:/1.0', rn INTERNET_OPEN_TYPE_PRECONFIG,nil, nil, 0); //建立会话句柄 rn if assigned(hsession) then rn begin rn hfile := InternetOpenUrl(hsession, pchar(url), nil, 0, rn INTERNET_FLAG_RELOAD, 0); //打开URL所指资源 rn rn dwIndex := 0; rn dwCodeLen := 10; rn HttpQueryInfo(hfile, HTTP_QUERY_STATUS_CODE, rn @dwcode, dwcodeLen, dwIndex); //获取返回的HTTP头信息 rn rn res := pchar(@dwcode);rn ShowMessAge(pchar(@dwcode));rn result:= (res ='200');rn rn if assigned(hfile) then rn InternetCloseHandle(hfile); //关闭URL资源句柄 rn InternetCloseHandle(hsession); //关闭Internet会话句柄 rn end;rnend;rn[/code]rnrn[code=Delphi(Pascal)]rnvarrn IMGHttp:TIDHttp;rnbeginrn IMGHttp:=TIDHttp.Create(nil);rn Tryrn IMGHttp.Disconnect;rn IMGHttp.HandleRedirects:= True;rn IMGHttp.ReadTimeout:= 10*1000;rn IMGHttp.Request.UserAgent:='Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)';rn IMGHttp.Get('http://127.0.0.1/301.asp');rn ShowMessAge(IntToStr(IMGHttp.ResponseCode));rn Finallyrn IMGHttp.Free;rn End;rnend;rn[/code]rnrn使用以上两种方式均无法判断301或者302.而是直接返回了转向后的地址状态200 rn请问各位大牛有什么方法判断么? 论坛

android 下http请求返回不了302状态

07-10

我在eclipse下用HttpURLConnection和HttpClient使用post方式都能获得302状态码,然后获得Location属性,但是在Android下却怎么也拿不到Location属性,rnrnHttpURLConnection代码:rn[code=java]rn URL restURL=new URL("http://xcsadfasadf.cdafsd");rn HttpURLConnection conn=(HttpURLConnection) restURL.openConnection();rn conn.setReadTimeout(10000);rn conn.setDoInput(true); rn conn.setUseCaches(false); rn conn.setConnectTimeout(15000);rn conn.setRequestMethod("POST");rn conn.setInstanceFollowRedirects(false);rn conn.setRequestProperty("Host", "sdsd.com");rn conn.setRequestProperty("Connection", "Keep-Alive"); rn conn.setRequestProperty("Refer", "http://ssdsdfsadfa");rn conn.setRequestProperty("Accept-Charset", "UTF-8;"); rn conn.setRequestProperty("Accept", "text/html");rn conn.setRequestProperty("User-Agent", rn "Mozilla/5.0 (Linux; U; Android 2.1; en-us; ADR6200 Build/ERD79) AppleWebKit/530.17 (KHTML, like Gecko) Version/ 4.0 Mobile Safari/530.17"); rn conn.connect(); rnrn int responsecode = conn.getResponseCode();rn String location = conn.getHeaderField("Location"); rn[/code]rnrn或者rn[code=java]rnHttpClient client=new DefaultHttpClient();rnfinal HttpGet get=new HttpGet(url);rnHttpParams params = new BasicHttpParams();rnparams.setParameter(ClientPNames.HANDLE_REDIRECTS, false);rnget.setParams(params);rnget.setHeader("Refer", book.getReferUrl());rnHttpResponse res=client.execute(post);rnHeader locationHeader = res.getFirstHeader("Location");rn[/code]rnrn都不行,是什么原因呢? 论坛

HttpClient 返回302状态 cookie 请求分析

06-29

请求的urlrnhttp://www.ethiopianairlines.com.cn/Book_Flight.aspxrnrn请求的头信息rnPOST /Book_Flight.aspx HTTP/1.1rnHost: www.ethiopianairlines.com.cnrnUser-Agent: Mozilla/5.0 (Windows NT 5.1; rv:30.0) Gecko/20100101 Firefox/30.0rnAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8rnAccept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3rnAccept-Encoding: gzip, deflaternReferer: http://www.ethiopianairlines.com.cn/Book_Flight.aspxrnCookie: the_cookie=%E5%8C%97%E4%BA%AC%2C%20%E4%B8%AD%E5%9B%BD%2C%20(PEK)%23Makale%2C%20%E5%9F%83%E5%A1%9E%E4%BF%84%E6%AF%94%E4%BA%9A%2C%20(MQX)%2307%2F04%2F2015%2307%2F07%2F2015%23falsernConnection: keep-alivernrnrnrn响应头信息rnHTTP/1.1 302 FoundrnServer: nginx/1.7.9rnDate: Mon, 29 Jun 2015 06:16:27 GMTrnContent-Type: text/html; charset=utf-8rnContent-Length: 393rnConnection: keep-alivernCache-Control: privaternLocation: https://wl-prod.sabresonicweb.com/SSW2010/ETET/webqtrip.html?&lang=zh_CN&alternativeLandingPage=True&origin=PEK&departureDate=2015/7/4&destination=MQX&journeySpan=OW&cabin=ECONOMY&numAdults=1&numChildren=0&numInfants=0&isAward=FALSErnX-AspNet-Version: 4.0.30319rnX-Powered-By: ASP.NETrnrnrnrnrnrn我使用firebug跟踪的请求过程rn根据上面的响应头信息,浏览器又发送了一次请求到rnhttps://wl-prod.sabresonicweb.com/SSW2010/ETET/webqtrip.html?&lang=zh_CN&alternativeLandingPage=True&origin=PEK&departureDate=2015/7/4&destination=MQX&journeySpan=OW&cabin=ECONOMY&numAdults=1&numChildren=0&numInfants=0&isAward=FALSErn这个地址 rn 具体情况如下:rnurl:rnhttps://wl-prod.sabresonicweb.com/SSW2010/ETET/webqtrip.html?&lang=zh_CN&alternativeLandingPage=True&origin=PEK&departureDate=2015/7/4&destination=MQX&journeySpan=OW&cabin=ECONOMY&numAdults=1&numChildren=0&numInfants=0&isAward=FALSErnrn请求头信息rnGET /SSW2010/ETET/webqtrip.html?&lang=zh_CN&alternativeLandingPage=True&origin=PEK&departureDate=2015/7/4&destination=MQX&journeySpan=OW&cabin=ECONOMY&numAdults=1&numChildren=0&numInfants=0&isAward=FALSE HTTP/1.1rnHost: wl-prod.sabresonicweb.comrnUser-Agent: Mozilla/5.0 (Windows NT 5.1; rv:30.0) Gecko/20100101 Firefox/30.0rnAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8rnAccept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3rnAccept-Encoding: gzip, deflaternReferer: http://www.ethiopianairlines.com.cn/Book_Flight.aspxrnCookie: notionses=%7B%22isCustomer%22%3Afalse%2C%22visits%22%3A2%2C%22start%22%3A1435557681348%2C%22last_visit%22%3A1435558422981%2C%22url%22%3A%22https%3A%2F%2Fwl-prod.sabresonicweb.com%2FSSW2010%2FETET%2Fwebqtrip.html%3Fexecution%3De1s1%22%2C%22path%22%3A%22%2FSSW2010%2FETET%2Fwebqtrip.html%22%2C%22referrer_info%22%3A%7B%22host%22%3A%22www.ethiopianairlines.com.cn%22%7D%2C%22search%22%3A%7B%22engine%22%3Anull%2C%22query%22%3Anull%7D%2C%22version%22%3A0.4%7D; [color=#FF0000]JSESSIONID[/color]=0C5A16331F82FDC3BA7515EDBF1BA71E; BA=ba=54034&be=28079.09&l=290&le=19.22&ip=113.99.100.37&t=1435557698; WLPCOOKIE=sswhlp2111; SSWGID=A9810DD17C61436494AE4F45AD7BAFD3; __utma=240544197.129340158.1435285549.1435303066.1435557671.6; _ga=GA1.2.129340158.1435285549; km_ai=iWaHRbsowM0s1LQ1Hca9ubDbIr4%3D; km_uq=; km_lv=x; _ga=GA1.3.129340158.1435285549; __utmb=240544197.4.10.1435557671; __utmc=240544197; __utmz=240544197.1435557671.6.1.utmcsr=ethiopianairlines.com.cn|utmccn=(referral)|utmcmd=referral|utmcct=/Book_Flight.aspx; kvcd=1435558423718; km_vs=1; __utmt=1; _gat_gaTracker2=1; _gat_UA-56942739-1=1rnConnection: keep-alivernrnrnrn响应头信息rnHTTP/1.1 302 FoundrnCache-Control: no-cache, no-storernExpires: Thu, 01 Jan 1970 00:00:00 GMTrnX-Frame-Options: SAMEORIGINrnPragma: no-cachernLocation: https://wl-prod.sabresonicweb.com/SSW2010/ETET/webqtrip.html?execution=e3s1rnContent-Length: 0rnDate: Mon, 29 Jun 2015 06:16:29 GMTrnrnrn从上面这次请求来开,请求的时候带了cookie过去,其中有个参数是jssessionid。但是第一次请求的时候,响应头中并没有set-cookie,那么这个sessionid是怎么来的呢?rnrn根据上面的请求,响应头中又重定向了次rn具体请求如下rnurl:rnhttps://wl-prod.sabresonicweb.com/SSW2010/ETET/webqtrip.html?execution=e3s1rnrn请求头信息rnGET /SSW2010/ETET/webqtrip.html?execution=e3s1 HTTP/1.1rnHost: wl-prod.sabresonicweb.comrnUser-Agent: Mozilla/5.0 (Windows NT 5.1; rv:30.0) Gecko/20100101 Firefox/30.0rnAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8rnAccept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3rnAccept-Encoding: gzip, deflaternReferer: http://www.ethiopianairlines.com.cn/Book_Flight.aspxrnCookie: notionses=%7B%22isCustomer%22%3Afalse%2C%22visits%22%3A2%2C%22start%22%3A1435557681348%2C%22last_visit%22%3A1435558422981%2C%22url%22%3A%22https%3A%2F%2Fwl-prod.sabresonicweb.com%2FSSW2010%2FETET%2Fwebqtrip.html%3Fexecution%3De1s1%22%2C%22path%22%3A%22%2FSSW2010%2FETET%2Fwebqtrip.html%22%2C%22referrer_info%22%3A%7B%22host%22%3A%22www.ethiopianairlines.com.cn%22%7D%2C%22search%22%3A%7B%22engine%22%3Anull%2C%22query%22%3Anull%7D%2C%22version%22%3A0.4%7D; [color=#FF0000]JSESSIONID[/color]=0C5A16331F82FDC3BA7515EDBF1BA71E; BA=ba=54034&be=28079.09&l=290&le=19.22&ip=113.99.100.37&t=1435557698; WLPCOOKIE=sswhlp2111; SSWGID=A9810DD17C61436494AE4F45AD7BAFD3; __utma=240544197.129340158.1435285549.1435303066.1435557671.6; _ga=GA1.2.129340158.1435285549; km_ai=iWaHRbsowM0s1LQ1Hca9ubDbIr4%3D; km_uq=; km_lv=x; _ga=GA1.3.129340158.1435285549; __utmb=240544197.4.10.1435557671; __utmc=240544197; __utmz=240544197.1435557671.6.1.utmcsr=ethiopianairlines.com.cn|utmccn=(referral)|utmcmd=referral|utmcct=/Book_Flight.aspx; kvcd=1435558423718; km_vs=1; __utmt=1; _gat_gaTracker2=1; _gat_UA-56942739-1=1rnConnection: keep-alivernrn响应头信息rnHTTP/1.1 200 OKrnCache-Control: no-cache, no-storernExpires: Thu, 01 Jan 1970 00:00:00 GMTrnX-Frame-Options: SAMEORIGINrnPragma: no-cachernContent-Type: text/html;charset=UTF-8rnTransfer-Encoding: chunkedrnContent-Encoding: gziprnVary: Accept-EncodingrnDate: Mon, 29 Jun 2015 06:16:29 GMTrnrnrnrnrnrnrnrnrn 论坛

没有更多推荐了,返回首页