如何找到我的python cgi收到的http请求?我需要HEAD和GET的不同行为。

谢谢!

有帮助吗?

解决方案

import os

if os.environ['REQUEST_METHOD'] == 'GET':
    # blah

其他提示

这不是您问题的直接答案。但是你的问题源于做错事。

不要编写Python CGI脚本。

撰写 mod_wsgi 应用程序。更好的是,使用Python Web框架。有几十个。选择一个像 Werkzeug

WSGI标准(在 PEP 333 中描述)使其变得更多,更容易在Web请求中查找内容。

mod_wsgi实现比CGI更快,更安全。

Web框架也比编写自己的CGI脚本或mod_wsgi应用程序更简单。

为什么需要区分GET和HEAD?

通常你不应该区分并且应该像处理GET一样对待HEAD请求。这是因为HEAD请求意味着返回与GET完全相同的标头。唯一的区别是没有响应内容。仅仅因为没有响应内容,但并不意味着您不再需要返回有效的Content-Length标头或其他标头,这些标头取决于响应内容。

在各种人们指向你的mod_wsgi中,在某些情况下,它实际上会故意将请求方法从HEAD改为GET,以防止错误地对待HEAD的人。完成此操作的具体情况是注册Apache输出过滤器的位置。在这种情况下完成它的原因是因为输出过滤器可能希望看到响应内容并从中生成其他响应标头。如果您决定不打算为HEAD请求生成任何响应内容,您将剥夺输出过滤器的内容,并且他们添加的标头可能与GET请求返回的内容不一致。最终结果是你可以填充缓存和浏览器的操作。

同样适用于Apache背后的CGI脚本,因为在这种情况下仍然可以添加输出过滤器。对于CGI脚本,没有任何东西可以防止用户愚蠢并为HEAD请求做不同的事情。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top