HTTP状态码301和302的区别

简介

在HTTP状态码中,3XX表示重定向,指网页发生了转移,重定向到目标地址中。

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

302:表示临时性转移(Temporarily Moved)

说明

301和302都是将URL地址转移到新的地址中,这是二者的共同点。不同点是:

301适合永久重定向:

        常见场景是使用域名跳转。浏览器发出原始请求后重定向到新地址,浏览器会缓存这个请求,等下次再次访问原始地址时会直接请求到新地址去。

302适合临时跳转:

        可用于临时的、动态的地址跳转,每次请求原地址都会重新重定向到目标地址。应用场景:页面单点登录。

301和302应用实践

功能:门户系统使用CAS统一认证系统。在门户上集成第三方应用后点击应用会携带包含用户信息的ticket参数。如果请求中没有ticket参数,则需要重定向到CAS的登录页面。

1、时序图理解

     2、针对第1步接收ticket参数

3、 区别

CAS点击应用(即API接口)默认是没有ticket的(可能和客户的CAS服务器有关),因此会重定向到/cas/login登录页面。关键在于是301还是302重定向。

当使用302时,API接口会有2次调用记录。点击应用是第1次不携带ticket请求 API接口被重定向到CAS登录页面;随后CAS携带ticket第2次请求API进入右侧条件

当使用301时,API接口只有在浏览器第一次调用时才会有2次调用记录(同302),之后调用时浏览器已经默认把CAS登录页面作为API接口进行缓存,调用API时默认调用CAS登录页面,因此API接口只有一次 携带着ticket的请求记录

 

   

### HTTP 301 Redirect 的定义与用途 HTTP 301 状态码表示永久重定向 (Permanent Redirect),这意味着请求的资源已永久移动到新的位置。当服务器返回此状态码时,响应通常会包含一个 `Location` 头部字段,用于指定新资源的 URI[^2]。 浏览器接收到 301 响应后,会在缓存中记录这一映射关系。因此,在未来访问相同 URL 时,客户端可以直接跳转至目标地址而无需再次向原始服务器发送请求。这种行为有助于提高性能并减少不必要的网络流量[^3]。 #### 使用场景 - **网站迁移**:如果整个站点从旧域名迁移到新域名,则可以配置 Web 服务器以针对所有页面返回 301 重定向指向对应的新网址。 - **URL结构调整**:对于单个网页链接变更情况同样适用;通过设置恰当路径下的301转向命令告知搜索引擎爬虫以及访客该页已被移除并将他们引导至更新后的版本处[^4]。 以下是实现简单 Python Flask 应用程序中的例子来演示如何生成带有Set-cookie头信息及执行http 301跳转: ```python from flask import Flask, redirect, make_response app = Flask(__name__) @app.route('/old-path') def old_path(): response = make_response(redirect("/new-path", code=301)) response.set_cookie('test_cookie', 'cookie_value') return response if __name__ == "__main__": app.run() ``` 上述脚本创建了一个小型Web服务端口,默认监听localhost上的5000号端口。 当用户尝试访问 `/old-path` 路由时,它不仅会被重新导向至 `/new-path` ,而且还会接收到来自服务器设定名为 test_cookie 的 cookie 数据包作为附加功能的一部分展示出来[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值