从Python CGI检测HTTP请求类型(GET、HEAD等)
我该怎么查看我的Python CGI收到了什么HTTP请求呢?我需要对HEAD和GET这两种请求有不同的处理方式。
谢谢!
3 个回答
0
为什么需要区分GET和HEAD请求?
通常情况下,你不需要特别区分这两种请求,应该把HEAD请求当作GET请求来处理。因为HEAD请求的目的就是返回和GET请求完全一样的头信息。唯一的区别是,HEAD请求不会有响应内容。不过,虽然没有响应内容,你仍然需要返回有效的Content-Length头信息,以及其他依赖于响应内容的头信息。
在mod_wsgi中,有些人提到的情况,实际上在某些情况下会故意把HEAD请求的方法改成GET。这是为了防止有人错误地把HEAD请求当作不同的请求来处理。具体来说,当注册了Apache的输出过滤器时,就会这样做。这样做的原因是,输出过滤器可能会期待看到响应内容,并根据这些内容生成额外的响应头。如果你决定不为HEAD请求生成任何响应内容,那么输出过滤器就得不到内容,这样它们添加的头信息可能就和GET请求返回的内容不一致。最终的结果就是可能会搞乱缓存和浏览器的操作。
同样的情况也适用于Apache后面的CGI脚本,因为在这种情况下也可以添加输出过滤器。不过对于CGI脚本来说,并没有什么机制来防止用户在处理HEAD请求时做出错误的操作。
17
import os
if os.environ['REQUEST_METHOD'] == 'GET':
# blah
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。