48.HTTP 规范规定,跟随重定向时必须使用 GET 方法

news2024/11/19 6:36:31

起因:

今天在练习一个Django功能时,把form的method设置为POST,但是实际提交时,一直是GET方法。最后,从下面这张图发现了端倪:

 

第一次是method是POST方法,被重定向时,变成了GET。

继续探索,从下图中可以看出来是和多语言相关,django前面的多语言设置,会自动加上语言的路径,从而有了重定向这个操作,把POST变成了GET。

如果想要继续采用现有的方式,实现多语言,有没有办法解决这个问题呢?

概念

根据HTTP规范(RFC 7231),当客户端(如浏览器)接收到一个带有状态码为3xx(重定向)的响应时,如果要跟随这个重定向到新的URL,它应该使用GET方法发起新的请求,即使原始请求使用的是POST或其他方法。


具体来说,RFC 7231的第6.4节阐述了这一点,它说明了对于诸如301(Moved Permanently)、302(Found,虽然现在推荐使用303 See Other来明确表示应使用GET)、307(Temporary Redirect)和308(Permanent Redirect)等状态码,客户端的行为应当遵循以下原则:

  • 对于301和302(以及历史遗留的使用方式),尽管早期实践中允许重定向POST请求并保持原方法,但现代实践和规范推荐在重定向时转换为GET请求,以避免潜在的副作用和不一致。
  • 303 See Other明确指示客户端应该使用GET方法重定向,不论原始请求是什么方法。
  • 307 Temporary Redirect和308 Permanent Redirect则保留了原始请求方法,但在实际应用中,特别是浏览器环境中,对于POST到307的重定向,虽然理论上可以保持POST方法,但实际操作中可能仍存在限制或实现差异。

因此,当一个POST请求被服务器响应以302 Found状态码时,浏览器或遵循HTTP规范的客户端会自动发起一个新的GET请求到Location头部指定的URL,而不是继续使用POST方法。这就是为什么在Django或其他Web框架中,处理POST请求后若直接返回重定向响应,原始的POST数据不会被传递到新的URL。

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

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

相关文章

综合型驱鸟装置:光伏电站集束冲击波驱鸟器

光伏电站作为绿色、清洁的能源生产方式,正在全球范围内得到快速发展。在光伏电站的建设和运营过程中,鸟类活动所带来的影响逐渐凸显,成为电站管理者需要面对的重要问题。在此背景下,光伏电站驱鸟器的需求也不断增长。 目前市场上的…

echart盒子没有跟着当前div大小变化而自适应

一、问题描述 当echarts图表在一个盒子里的时候,盒子大小变化了,但是图表没有跟着自适应,比如这样,盒子变大了,但是图表没变化 二、解决方法 在盒子大小更改的同时,调用图表的resize方法,记…

RERCS系统开发实战案例-Part02 创建BOPF对应的业务对象(Business Object)

1、通过事务码 BOBF创建业务对象 2、输入debug,进入编辑模式新建BO对象; 选择对应的BO对象属性类别: 3、激活BO对象 接口页签: 属性页签:自动带出标准的常量 改接口类部分源码: 4、BO对象Node Elemen…

1、链接(link)

链接的作用 链接:将各种代码和数据片段收集组成一个单一文件的过程,这个文件可以加载(复制)到内存并执行。 分为:编译时、加载时(加载器加载到内存并执行时)、运行时 1、构造大型程序 2、避免…

绿色转型,节能攻坚

随着人口增长和经济发展,资源短缺和环境污染问题愈发严重,绿色转型和节能已成为我们共同的责任。为了推动环保事业的发展,阜阳善于善行志愿者团队,参与了本年度以“绿色转型,节能攻坚”为主题的全国节能宣传周活动。这…

果汁机锂电池充电,5V升压12.7V 升压恒压芯片SL1571B

在现代化的日常生活中,果汁机已经逐渐成为了许多家庭厨房的必备电器。随着科技的不断进步,果汁机的性能也在不断提升,其中锂电池的应用更是为果汁机带来了前所未有的便利。而5V升压12.7V升压恒压芯片SL1571B,作为果汁机锂电池充电…

使用使用rundll32 调用指定dll的方法

使用使用rundll32 调用指定dll的方法 //顾名思义,"执行32位的DLL文件"。它的作用是执行DLL文件中的内部函数,这样在进程当中, 只会有Rundll32.exe,而不会有DLL后门的进程,这样,就实现了进程上的隐…

【万方数据库爬虫简单开发(自用)】

万方数据库爬虫简单开发(自用)(一) 使用Python爬虫实现万方数据库论文的搜索并获取信息1.获取url2.输入关键词3.使用BeautifulSoup解析4.获取文章标题信息 使用Python爬虫实现万方数据库论文的搜索并获取信息 后续会逐步探索更新…

svg图标封装--基于vue2适配uniapp全端

第一步&#xff1a;新建svg目录 在static目录下新建svg目录,后将所有svg图标都放到此文件夹 第二步&#xff1a;封装注册全局组件 (注意&#xff1a;在根目录下新建components文件夹) 代码实现&#xff1a; <template><!-- svg图标 --><image :style"{ …

欢乐钓鱼大师攻略:自动钓鱼大全解析!哪家云手机能自动钓鱼?

《欢乐钓鱼大师》是一款颇受欢迎的钓鱼模拟游戏&#xff0c;吸引了大量玩家参与。无论你是新手还是老玩家&#xff0c;这款游戏都提供了丰富的内容和玩法&#xff0c;今天我们将详细介绍如何通过合理的策略和技巧来提升游戏体验和效率。 一、初步了解《欢乐钓鱼大师》 1. 游戏…

蝴蝶号小店,玩法介绍~

我是王路飞。 目前电商行业最火的项目&#xff0c;已经不再是抖音小店了。 毕竟抖店都上线好几年了&#xff0c;红利期早就过了&#xff0c;再加上现在抖音上的商家逐渐开始内卷。 众多商家纷纷开始寻找电商行业最后的风口。 因此&#xff0c;蝴蝶号小店逐渐开始进入大众视…

面试官问:百万QPS秒杀系统该如何设计

今天就带大家体系化的梳理下&#xff0c;大厂级高并发的秒杀系统该如何设计。 带大家跳出程序员思维&#xff0c;从架构师的视角分析下&#xff0c;大厂级、高并发的秒杀系统该如何设计&#xff1f; 秒杀系统的三个问题 问题一&#xff1a;为什么需要秒杀系统&#xff1f; 简…

人人必看:人工智能成熟后,被社会广泛使用后,可能被取代的行业有哪些,以及AI后新兴的行业和职位有哪些?

随着人工智能技术的不断成熟和广泛应用&#xff0c;许多行业和职位可能会受到影响&#xff0c;一些可能被取代&#xff0c;而另一些则会因为AI技术的引入而新兴。人人必看&#xff1a;人工智能成熟后&#xff0c;被社会广泛使用后&#xff0c;可能被取代的行业有哪些&#xff0…

df = pd.read_excel(‘c:\User\18343\Desktop\wpsdata.xlxs‘)路径读不到

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

为啥影像导入GIS后,颜色会变?两个方法解决它!

不知道你有没有遇到过这种情况&#xff0c; 影像的正常颜色是这样的—— 可是导入到GIS后&#xff0c; 颜色竟然变了&#xff0c; 而且变得很奇怪—— 你也不必惊讶&#xff0c; 极大概率是因为数据源类型没有正确识别&#xff0c; 有两个方法可以解决这个问题—— 方法一…

Threejs-07、几何体_顶点_索引_面之BufferGeome

一、 const gemometry new THREE.BufferGeometry(); //创建顶点数据 ,顶点是有序的&#xff0c;每三个为一个顶点&#xff0c;逆时针为正面。 const vertices new Float32Array([-1.0,-1.0,0.0,1.0,-1.0,0.0,1.0,1.0,0.0,1.0,1.0,0.0,-1.0,1.0,0.0,-1.0,-1.0,0.0, ]) gemom…

申办乙级幕墙设计资质:企业安全生产与环保要求

在申办乙级幕墙设计资质时&#xff0c;企业安全生产与环保要求是不可忽视的重要方面。以下是关于企业安全生产与环保要求的详细解读&#xff0c;以分点表示和归纳的方式呈现&#xff1a; 一、安全生产要求 安全生产管理制度&#xff1a;企业应建立健全安全生产管理制度&#xf…

操作系统期末复习(大题)

1. 进程调度 周转时间作业完成时刻-作业到达时刻 带权周转时间周转时间/服务时间 平均周转时间各个作业周转时间之和/作业个数 操作系统&#xff1a;周转时间和其他时间_系统为作业提供的时间-CSDN博客 2. 进程调度 3. 调度算法 4. 临界区互斥访问问题 即证明是否满足互斥&a…

hadoop和hbase对应版本关系

https://hbase.apache.org/book.html#configuration

【ai】openai-quickstart 配置pycharm工程

之前都是本地执行脚本【AI】指定python3.10安装Jupyter Lab环境为:C:\Users\zhangbin\AppData\Local\Programs\Python\Python310 参考之前创建的python工程 使用的是局部的私有的虚拟环境 pycharm给出的解释器 直接使用现有的,不new了 可以选择3.10 :可以选虚拟的: