Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python在接收HTTP 302时请求将POST更改为GET。这是预期的行为吗?_Python_Python Requests - Fatal编程技术网

python在接收HTTP 302时请求将POST更改为GET。这是预期的行为吗?

python在接收HTTP 302时请求将POST更改为GET。这是预期的行为吗?,python,python-requests,Python,Python Requests,我在一个新的API上做了一些测试后发现了这一点,那一边的管理员说我在做GETs,而我在做我这边的帖子。启用调试后,我发现请求将执行初始POST,然后对新的302URL执行GET 在我理解了问题是什么之后,我的问题现在已经解决了,但这是一个bug还是预期的行为?如果您在帖子中收到302,您是否应该引发异常,或者重试向新URL发布帖子 我不想把它作为bug登录到GitHub上,除非我确定它是bug。我只是想了解一下 谢谢根据RFC 如果收到302状态代码以响应除 GET或HEAD时,用户代理不能自动

我在一个新的API上做了一些测试后发现了这一点,那一边的管理员说我在做GETs,而我在做我这边的帖子。启用调试后,我发现请求将执行初始POST,然后对新的302URL执行GET

在我理解了问题是什么之后,我的问题现在已经解决了,但这是一个bug还是预期的行为?如果您在帖子中收到302,您是否应该引发异常,或者重试向新URL发布帖子

我不想把它作为bug登录到GitHub上,除非我确定它是bug。我只是想了解一下

谢谢

根据RFC

如果收到302状态代码以响应除 GET或HEAD时,用户代理不能自动重定向 请求,除非用户可以确认,因为这可能 更改发出请求的条件

()

因此,这种行为至少是不符合规定的——但RFC还指出:

注意:RFC 1945和RFC 2068规定不允许使用客户端 更改重定向请求的方法。然而,大多数 现有的用户代理实现将302视为303 响应,对位置字段值执行GET,不管 原始请求方法的。状态代码303和307已被删除 已添加用于希望明确说明 客户会有什么样的反应

IOW:虽然不符合RFC,但这是大多数用户代理的默认行为,而且大多数web应用确实使用302而不是303实现了后重定向get

因此,
请求
行为显然不是一个bug,而是一个实用的设计决策。由于Foo-Bar用户已经输入了,您可以使用
allow\u重定向
arg.

根据请求所做的更改来更改此设置。如果web服务器需要重定向并使用相同的方法,它应该发送
307临时重定向(从HTTP/1.1开始)

302发现

这是一个行业实践与标准相矛盾的例子 标准HTTP/1.0规范(RFC 1945)要求客户机 执行临时重定向(原始描述短语为 “暂时移动”),[6]但流行浏览器使用 303的功能参见其他。因此,HTTP/1.1增加了状态 代码303和307,以区分这两种行为。然而, 一些Web应用程序和框架使用302状态代码,就好像它 是303


这模仿了浏览器的行为,浏览器总是通过重定向而不是帖子来获取信息


对这种行为有一个解释:在最初的标准下,浏览器应该用一个POST重定向,但它们都用GET实现。引入状态代码303和307是为了澄清这一点,其中303是当前(GET)行为,307是最初计划的行为(POST),但这些在实践中很少使用。

您是如何解决问题的?@an nguyen I刚刚使用了正确的URL。感谢您的详细回复。我已经使用了正确的URL,所以对我来说没有问题。我只是想知道这种奇怪的行为。@Dax哈哈,维基百科说“这是一个行业实践与标准相矛盾的例子。”