怎样才能找到我的python cgi收到的http请求?对于HEAD和GET,我需要不同的行为。
谢谢!
发布于 2009-09-13 13:17:20
import os
if os.environ['REQUEST_METHOD'] == 'GET':
# blah发布于 2009-09-14 00:09:15
这不是对你问题的直接回答。但你的问题源于做错了事情。
不要编写Python CGI脚本。
编写mod_wsgi应用程序。更好的是,使用Python web框架。有几十种。选择一个像Werkzeug这样的。
WSGI标准(在PEP 333中描述)使得在web请求中查找内容变得非常容易。
mod_wsgi的实现比CGI更快、更安全。
web框架也比编写自己的CGI脚本或mod_wsgi应用程序简单。
发布于 2009-09-14 10:59:17
为什么需要区分GET和HEAD?
通常,您不应该区分HEAD请求,而应该像对待GET一样对待HEAD请求。这是因为HEAD请求将返回与GET完全相同的头。唯一的区别是不会有响应内容。但是,没有响应内容并不意味着您不再需要返回有效的Content-Length标头或其他依赖于响应内容的标头。
在不同的人指向你的mod_wsgi中,它实际上会故意将请求方法从HEAD更改为GET,在某些情况下是为了防止那些错误地对待HEAD的人。完成此操作的特定情况是注册了Apache输出过滤器。在这种情况下这样做的原因是因为输出筛选器可能希望看到响应内容,并从中生成额外的响应头。如果您决定不为HEAD请求生成任何响应内容,您将剥夺输出筛选器的内容,并且它们添加的headers可能与GET请求返回的内容不一致。这样做的最终结果是,您可以填充缓存和浏览器的操作。
这同样适用于Apache后面的CGI脚本,因为在这种情况下仍然可以添加输出过滤器。然而,对于CGI脚本,没有任何东西可以防止用户变得愚蠢,并为HEAD请求做不同的事情。
https://stackoverflow.com/questions/1417715
复制相似问题