Http状态码301和302理解以及使用场景

目录

3XX系列

301:

302:

301与302的区别

常见应用场景:

代码演示:

 

301与302在选择上注意的问题

 


3XX系列

代表需要客户端采取进一步的操作才能完成请求,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的 Location 域中指明。这系列中最常见的有301、302状态码。

 

301:

被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一。

如果可能,拥有链接编辑功能的客户端应当自动把请求的地址修改为从服务器反馈回来的地址。除非额外指定,否则这个响应也是可缓存的。   

新的永久性的 URI 应当在响应的 Location 域中返回。除非这是一个 HEAD 请求,否则响应的实体中应当包含指向新的 URI 的超链接及简短说明。   

如果这不是一个 GET 或者 HEAD 请求,因此浏览器禁止自动进行重定向,除非得到用户的确认,因为请求的条件可能因此发生变化。

注意:对于某些使用 HTTP/1.0 协议的浏览器,当它们发送的 POST 请求得到了一个301响应的话,接下来的重定向请求将会变成 GET 方式。

 

302:

请求的资源现在临时从不同的 URI 响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。   

新的临时性的 URI 应当在响应的 Location 域中返回。除非这是一个 HEAD 请求,否则响应的实体中应当包含指向新的 URI 的超链接及简短说明。   

如果这不是一个 GET 或者 HEAD 请求,那么浏览器禁止自动进行重定向,除非得到用户的确认,因为请求的条件可能因此发生变化。   

注意:虽然RFC 1945和RFC 2068规范不允许客户端在重定向时改变请求的方法,但是很多现存的浏览器将302响应视作为303响应,并且使用 GET 方式访问在 Location 中规定的 URI,而无视原先请求的方法。状态码303和307被添加了进来,用以明确服务器期待客户端进行何种反应。

 

301与302的区别

301重定向是永久的重定向,搜索引擎在抓取新内容的同时也将旧的网址替换为重定向之后的网址。

302重定向是临时的重定向,搜索引擎会抓取新的内容而保留旧的网址。因为服务器返回302代码,搜索引擎认为新的网址只是暂时的。

 

常见应用场景:

  • 场景一 

        想换个域名,旧的域名不用啦,这样用户访问旧域名时用301就重定向到新的域名。其实也是告诉搜索引擎收录的域名需要对新          的域名进行收录。

  • 场景二 

        登录后重定向到指定的页面,这种场景比较常见就是登录成功跳转到具体的系统页面。

  • 场景三 

        有时候需要自动刷新页面,比如5秒后回到订单详细页面之类。

  • 场景四 

        有时系统进行升级或者切换某些功能时,需要临时更换地址。

  • 场景五 

        像微博之类的使用短域名,用户浏览后需要重定向到真实的地址之类。

 

代码演示:

在用户访问后浏览器都会重定向到http://127.0.0.1/login.htm

public void doGet(HttpServletRequest request, HttpServletResponse response)  
        throws ServletException, IOException {  
    //请求重定向的例子  
    response.setStatus(301); 
    response.setHeader("Location", "http://127.0.0.1/login.htm");
}  

 

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

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


参考资料

https://tool.oschina.net/commons?type=5

https://www.cnblogs.com/usa007lhy/p/4883823.html

https://blog.csdn.net/5207/article/details/52668300

 

 

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
HTTP状态码表示在客户端和服务器之间交互过程中发生的情况。常见的HTTP状态码及其使用场景如下: 1xx(信息性状态码):表示请求已经被接收,继续处理。 - 100(Continue):客户端应该继续发送请求。这个状态码通常是在发送POST请求时使用的,表示请求已经被服务器接收,但是还没有完成处理。 - 101(Switching Protocols):服务器将遵从客户的请求转换到另外一种协议。 2xx(成功状态码):表示请求已经被成功接收、理解、接受。 - 200(OK):请求已经成功,返回的信息包含在响应中。 - 201(Created):请求已经被成功处理,并且创建了新的资源。 - 204(No Content):请求成功,但是响应报文不包含实体的主体部分。 3xx(重定向状态码):表示需要客户端采取进一步的操作才能完成请求。 - 301(Moved Permanently):请求的资源已经被永久移动到新的URI上。 - 302(Found):请求的资源临时从不同的URI响应请求。 - 304(Not Modified):请求的资源未被修改,可以使用缓存的版本。 4xx(客户端错误状态码):表示客户端请求出现了错误,无法被服务器所理解。 - 400(Bad Request):请求报文存在语法错误。 - 401(Unauthorized):未经授权,需要身份验证。 - 403(Forbidden):服务器拒绝请求,没有访问权限。 - 404(Not Found):服务器无法找到请求的资源。 5xx(服务器错误状态码):表示服务器在处理请求过程中发生了错误。 - 500(Internal Server Error):服务器内部错误,无法完成请求。 - 502(Bad Gateway):服务器作为网关或代理时,从上游服务器接收到无效的响应。 - 503(Service Unavailable):服务器暂时无法处理请求,通常是由于维护或者过载造成的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

越来越胖的GuanRunwei

祝老板们身体健康,财源广进!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值