gpt4 book ai didi

python - 当请求方法不是 POST 或 PUT 时,网络服务器是否应该忽略请求主体?

转载 作者:可可西里 更新时间:2023-11-01 17:13:38 26 4
gpt4 key购买 nike

我正在使用 tornado 开发一个简单的 API 服务器,所有请求都需要参数 access_token。我在玩 curl,惊讶地发现 DELETE 和 GET 请求不会从请求正文中提取这个值——它们只允许通过查询字符串传递这个参数。

即,当我这样做的时候

 curl -i -X DELETE -d access_token=1234 http://localhost:8888/

在我的 Web 处理程序的 delete 方法中,这将返回 None:

 self.get_argument('access_token', None)

但是,当我这样做的时候

 curl -i -X DELETE http://localhost:8888/?access_token=1234

这会产生预期的“1234”:

 self.get_argument('access_token', None)

我检查了 tornado 源代码,发现主体仅针对 POST 和 PUT 请求进行了解析:https://github.com/facebook/tornado/blob/4b346bdde80c1e677ca0e235e04654f8d64b365c/tornado/httpserver.py#L258

忽略GET、HEAD、DELETE请求的请求体是正确的,还是tornado作者的选择?

最佳答案

根据 HTTP/1.1 协议(protocol)规范,这是正确的。

DELETE 和 GET 请求不接受请求中包含的实体数据。

根据定义,get 请求从请求 URI 中获取它们的实体数据。

HEAD 请求的定义与 GET 请求相同,只是服务器不应在响应中返回消息正文。

因此,tornado 的作者忽略 GET、HEAD 和 DELETE 的“post”数据是正确的。

参见 HTTP/1.1 Method Definitions

关于python - 当请求方法不是 POST 或 PUT 时,网络服务器是否应该忽略请求主体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8394414/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com