Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.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 当请求方法不是POST或PUT时,Web服务器是否应该忽略请求主体?_Python_Http_Curl_Tornado - Fatal编程技术网

Python 当请求方法不是POST或PUT时,Web服务器是否应该忽略请求主体?

Python 当请求方法不是POST或PUT时,Web服务器是否应该忽略请求主体?,python,http,curl,tornado,Python,Http,Curl,Tornado,我使用tornado开发了一个简单的API服务器,所有请求都需要参数access\u令牌。我在玩curl,惊讶地发现DELETE和GET请求不会从请求体中提取这个值——它们只允许通过查询字符串传递这个参数 当我这样做的时候 curl -i -X DELETE -d access_token=1234 http://localhost:8888/ curl -i -X DELETE http://localhost:8888/?access_token=1234 在我的web处理程序的de

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

当我这样做的时候

 curl -i -X DELETE -d access_token=1234 http://localhost:8888/
 curl -i -X DELETE http://localhost:8888/?access_token=1234
在我的web处理程序的delete方法中,这将返回None:

 self.get_argument('access_token', None)
然而,当我

 curl -i -X DELETE -d access_token=1234 http://localhost:8888/
 curl -i -X DELETE http://localhost:8888/?access_token=1234
这将产生预期的“1234”:

 self.get_argument('access_token', None)
我检查了tornado源,发现只有POST和PUT请求才会解析主体:


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

根据HTTP/1.1协议规范,这是正确的

删除和获取请求不接受请求中包含的实体数据


根据定义,get请求从请求URI检索其实体数据

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

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


请参见

如果请求不是POST或PUT,最好不要接受带有有效负载的请求。只是因为安全原因。某些服务器(如lighttpd)在这种情况下返回服务器错误。

请参阅和RFC-2616第4.3节“服务器应在任何请求中读取和转发消息正文;如果请求方法未包含实体正文的定义语义,则在处理请求时应忽略消息正文。”根据定义,get请求从请求URI检索其实体数据。“-我认为说明书上没有这么说。如果你有指针,请纠正我。所有HTTP请求都可以有一个请求体,其中包括HEAD、GET和DELETE。只是规范没有定义它的含义,而且使用它们并不常见,所以我们只讨论约定,而不是规范要求。