Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Tornado重定向实现&POST方法如何重定向

Tornado重定向实现&POST方法如何重定向

作者头像
用户1392128
发布于 2024-01-08 09:50:59
发布于 2024-01-08 09:50:59
28400
代码可运行
举报
运行总次数:0
代码可运行
问题现象:

场景:终端使用POST方法访问/qacenter/v1/test-records接口时,需要重定向跳转到/qacenterinner/v1/test-records接口

实现: tornado代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    # 增
    async def post(self):
        return self.redirect("/qacenterinner/v1/test-reports", status=307)

使用POSTMAN访问接口,报错405 method not allowed, 查看tornado打印如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[I 200506 09:34:54 web:2246] 302 POST /qacenter/v1/test-records (192.168.63.56) 0.71ms
[W 200506 09:34:54 web:2246] 405 GET /qacenterinner/v1/test-records (192.168.63.56) 0.49ms

问题描述: 使用Tornado 重定向后,发现POSTMAN的请求方法发生了变化,从POST变成了GET Tornado 重定向使用方法: https://www.tornadoweb.org/en/latest/web.html?highlight=redirect#tornado.web.RequestHandler.redirect

问题分析:

POSTMAN发送请求时,有以下设置,尝试打开Follow original HTTP Method,这样重定向后的请求方法就不会发生变化了。

更改后,发现,第二次的请求方法确实变成了POST,但是很遗憾的时,请求body为空。

这当然时不符合我们的预期的!那到底是什么原因导致的呢?以及如何解决呢?

问题分析:

实际上,tornado的redirect方法默认返回的是302状态码,而在标准HTTP 1.1协议中,有以下约定

所以,不论是浏览器、postman还是python 中的requests,都会在302重定向之后请求方法变成了get。

解决办法:

修改服务端响应码为307或308即可,在tornado中指定响应status,修改如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    async def post(self):
        return self.redirect("/qacenterinner/v1/test-records", status=307)

修改后,验证问题解决。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[I 200506 09:44:23 web:2246] 307 POST /qacenter/v1/test-records (192.168.63.56) 0.65ms
[I 200506 09:44:23 web:2246] 201 POST /qacenterinner/v1/test-records (192.168.63.56) 62.78ms
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python 学习入门(15)—— Tornado
Tornado,全称Tornado Web Server,是一个用Python语言写成的Web服务器兼Web应用框架,由FriendFeed公司在自己的网站FriendFeed中使用,被Facebook收购以后框架以开源软件形式开放给大众。
阳光岛主
2019/02/19
2.1K0
原 荐 HTTP 重定向: 你可能不知道的故
在 Spring 里面我们要重定向的话一般都会这样做: @Controller final class RedirectTestController { @RequestMapping(value = "/foo") String foo() { return "foo"; } @RequestMapping(value = "/bar") String bar() { return "redirect:/foo"; } }
老码农
2018/06/20
5570
python-tornado
http://docs.pythontab.com/tornado/introduction-to-tornado/index.html
py3study
2020/01/13
7830
Tornado入门(七)【认证和安全】
Cookies信息通常不安全,很容易被篡改。如果需要通过cookies来区分不同的登录用户,则需要对cookies进行签名,以防伪造。Tornado通过set_secure_cookie和get_secure_cookie方法支持签名Cookies。为了使用这两个方法,需要在应用中配置cookie_secret。
用户2936342
2018/08/27
4710
重定向POST请求带来的问题(307的应用)
我们在重新向时会用到两个状态码 301:永久重定向 302:临时重定向 这两种方式在不涉及到数据传输时没有什么问题,一旦涉及到数据传输时,这两种方式可能达不到我们预期的效果 如下需求 提交表单到A页面,但A页面仅作为“中介”使用,并不处理表单提交的数据,而是将请求转发给B页面,B页面在进行数据处理
切图仔
2022/09/14
3.5K0
重定向POST请求带来的问题(307的应用)
Python Web 框架:Tornado
**备注:** Tornado应该运行在类Unix平台,为了达到最佳的性能和扩展性,仅推荐Linux和BSD(充分利用Linux的epoll工具和BSD的kqueue达到高性能处理的目的)
周小董
2019/03/25
1.6K0
Python Web 框架:Tornado
【计网】【计网】从零开始学习http协议 ---理解http重定向和请求方法
http协议作为通信协议,必然要支持序列化与反序列化。我们需要做的是服务器的操作,只需要进行请求的反序列化和应答的序列化就可以了,请求的序列化和应答的反序列化是浏览器(客户端)需要考虑的。要做到序列化和反序列化需要按照请求和应答的结构,从字符串中读取分离出来,具体操作可以参考之前的文章:
叫我龙翔
2024/10/10
1730
【计网】【计网】从零开始学习http协议 ---理解http重定向和请求方法
【Python爬虫实战】文件下载、Cookie 管理与重定向处理
本文主要介绍了如何使用 Python 的 requests 模块进行网络请求操作,涵盖了从文件下载、Cookie 处理到重定向与历史请求等多个方面。通过详细的示例代码,展示了如何高效地实现各种网络操作,帮助开发者更轻松地进行 HTTP 请求的处理和数据管理。
易辰君
2024/11/07
2030
Tornado入门(五)应用结构
Tornado web应用的结构通常包含一个或者多个RequestHandler子类,一个将请求转发至处理器的Application对象,以及一个main()函数,用于启动服务器。
用户2936342
2018/08/27
9060
java post/get 重定向问题
通过这种方法的重定向的话,请求链接中不会有参数 接收方法/index通过一下两种方式取值
六月的雨在Tencent
2024/03/28
1740
python Tornado框架 入
Tornado介绍 Tornado 是一个Python web框架和异步网络库 起初由 FriendFeed 开发. 通过使用非阻塞网络I/O, Tornado 可以支持上万级的连接,处理 长连接, WebSockets, 和其他 需要与每个用户保持长久连接的应用. Tornado 大体上可以被分为4个主要的部分: web框架 (包括创建web应用的 RequestHandler 类,还有很多其他支持的类). HTTP的客户端和服务端实现 (HTTPServer and AsyncHTTPC
py3study
2020/01/09
8730
搞懂 HTTP 重定向 - 如何优雅地使用 301
最近一段时间,连续遇到了两次跟重定向相关的问题,本着知己知彼百战百胜的态度,我决定深入了解一下,顺便跟大家分享一下。 加入我们一起学习,天天进步 作为前端开发,大家对重定向一定不陌生,不就是永久重
coder_koala
2020/12/17
22.6K0
搞懂 HTTP 重定向 - 如何优雅地使用 301
[译]Tornado web应用的结构
Tornado 4.3于2015年11月6日发布,该版本正式支持Python3.5的async/await关键字,并且用旧版本CPython编译Tornado同样可以使用这两个关键字,这无疑是一种进步。其次,这是最后一个支持Python2.6和Python3.2的版本了,在后续的版本了会移除对它们的兼容。现在网络上还没有Tornado4.3的中文文档,所以为了让更多的朋友能接触并学习到它,我开始了这个翻译项目,希望感兴趣的小伙伴可以一起参与翻译,项目地址是tornado-zh on Github,翻译好的文档在Read the Docs上直接可以看到。欢迎Issues or PR。
Jintao Zhang
2018/08/27
9290
Tornado(cookie、XSRF、用户验证)
——————–Cookie操作——————– 1、设置Cookie 1、set_cookie(name,value,domain=None,expires=None,path=”/”)
全栈程序员站长
2022/08/31
7700
转发与重定向
平常开发中时常用到重定向,正好借此总结一下,上面的图在开发中以及参考网上文章总结出来的(参考文章见文末)。
LiosWong
2018/10/29
9760
jmeter脚本中请求方式由post变成了get,什么原因?
某健康码项目中,jmeter压测脚本执行后报错,响应码为400,并且请求方式由post变为了get。打开查看结果树的详情,发现存在test-0、test-1两个请求,test-0请求返回301的响应码。(现象如下图所示)
魏景维
2022/05/30
2.6K0
Nginx自动重定向
在使用Nginx作为反向代理的时候,如果源服务返回了30x(301、302、303、307等)返回码,需要用户再重新发送一次HTTP请求。但此时有可能出现用户不能直接访问重定向后的URL,就需要Nginx能自动进行重定向,读取新的URL后,通过200返回码返回真正的内容。 本文主要就是研究了怎么配置Nginx以实现这样的功能。
drunkdream
2020/09/25
5.5K0
Tornado框架的异步代码单元支持同步获取URL在项目里实战的心得和方法
TestCase测试子类IOLoop-基于异步代码。 UnitTest框架是同步的,因此测试方法返回时必须完成测试。这意味着异步代码不能以与通常完全相同的方式使用,必须进行调整。要使用协同程序编写测试,请使用龙卷风。测试gen_测试而不是tornado.gen.coroutine 此类还提供(已弃用)stop()和wait()更多手动测试方法。测试方法本身必须调用self-Wait(),异步回调应调用self-Stop()表示完成。 默认情况下,为每个测试构建新的IOLoop,并且可以用作self-io_ Loop。如果要测试的代码需要一个全局IOLoop,那么子类应该重写get_new_IOLoop返回它。
上进小菜猪
2022/12/13
4800
记录一下 http status code
一般查询我们都会使用 GET 方法, 创建新的记录使用 POST 方法 更新已有数据使用 PUT 方法 更新已有数据部分属性使用 PATCH 方法 删除已有数据使用 DELETE 方法
用户7053485
2020/06/19
1.3K0
Tornado基础学习篇
Tornado是使用Python编写的一个强大的、可扩展的Web服务器。它在处理严峻的网络流量时表现得足够强健,但却在创建和编写时有着足够的轻量级,并能够被用在大量的应用和工具中。
py3study
2020/01/20
1.2K0
相关推荐
Python 学习入门(15)—— Tornado
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验