我正在使用龙卷风开发一个简单的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)
我检查了龙卷风来源,发现只为POST和PUT请求解析了正文:https://github.com/facebook/tornado/blob/4b346bdde80c1e677ca0e235e04654f8d64b365c/tornado/httpserver.py#L258
忽略GET,HEAD和DELETE请求的请求体是否正确,或者这是龙卷风作者的选择吗?
答案 0 :(得分:2)
根据HTTP / 1.1协议规范,这是正确的。
DELETE和GET请求不接受请求中包含的实体数据。
根据定义,get请求从请求URI中检索其实体数据。
HEAD请求被定义为与GET请求相同,但服务器不应在响应中返回消息正文。
因此,龙卷风的作者是正确的,可以忽略" post" GET,HEAD和DELETE的数据。
答案 1 :(得分:0)
如果不是POST或PUT,最好不接受带有效负载的请求。只是出于安全原因。一些服务器,例如lighttpd,在这种情况下返回服务器错误。