从python cgi中检测http请求类型(GET,HEAD等)
-
07-07-2019 - |
题
如何找到我的python cgi收到的http请求?我需要HEAD和GET的不同行为。
谢谢!
解决方案
import os
if os.environ['REQUEST_METHOD'] == 'GET':
# blah
其他提示
为什么需要区分GET和HEAD?
通常你不应该区分并且应该像处理GET一样对待HEAD请求。这是因为HEAD请求意味着返回与GET完全相同的标头。唯一的区别是没有响应内容。仅仅因为没有响应内容,但并不意味着您不再需要返回有效的Content-Length标头或其他标头,这些标头取决于响应内容。
在各种人们指向你的mod_wsgi中,在某些情况下,它实际上会故意将请求方法从HEAD改为GET,以防止错误地对待HEAD的人。完成此操作的具体情况是注册Apache输出过滤器的位置。在这种情况下完成它的原因是因为输出过滤器可能希望看到响应内容并从中生成其他响应标头。如果您决定不打算为HEAD请求生成任何响应内容,您将剥夺输出过滤器的内容,并且他们添加的标头可能与GET请求返回的内容不一致。最终结果是你可以填充缓存和浏览器的操作。
同样适用于Apache背后的CGI脚本,因为在这种情况下仍然可以添加输出过滤器。对于CGI脚本,没有任何东西可以防止用户愚蠢并为HEAD请求做不同的事情。
不隶属于 StackOverflow