Определение типа HTTP-запроса (GET, HEAD и т. Д.) Из Python CGI - PullRequest
11 голосов
/ 13 сентября 2009

Как я могу узнать http запрос, полученный моим python cgi? Мне нужно различное поведение для HEAD и GET.

Спасибо!

Ответы [ 3 ]

17 голосов
/ 13 сентября 2009
import os

if os.environ['REQUEST_METHOD'] == 'GET':
    # blah
1 голос
/ 14 сентября 2009

Это не прямой ответ на ваш вопрос. Но твой вопрос связан с неправильным поступком.

Не пишите скрипты Python CGI.

Написать mod_wsgi приложение. Более того, используйте веб-фреймворк Python. Есть десятки. Выберите один, как Werkzeug .

Стандарт WSGI (описанный в PEP 333 ) значительно упрощает поиск объектов в веб-запросе.

Реализация mod_wsgi быстрее и безопаснее, чем CGI.

Веб-структура также проще, чем написание собственного CGI-скрипта или приложения mod_wsgi.

0 голосов
/ 14 сентября 2009

Зачем вам нужно различать GET и HEAD?

Обычно вы не должны различать и должны обрабатывать запрос HEAD точно так же, как GET. Это связано с тем, что запрос HEAD предназначен для возврата тех же заголовков, что и GET. Разница лишь в том, что не будет содержания ответа. Тот факт, что содержание ответа отсутствует, не означает, что вам больше не нужно возвращать действительный заголовок Content-Length или другие заголовки, которые зависят от содержимого ответа.

В mod_wsgi, на который на вас указывают разные люди, он в некоторых случаях намеренно меняет метод запроса с HEAD на GET, чтобы защититься от людей, которые по-разному относятся к HEAD. Конкретный случай, когда это делается, - это когда выходной фильтр Apache зарегистрирован. Причина, по которой это делается в этом случае, заключается в том, что выходной фильтр может ожидать увидеть содержимое ответа и из этого генерировать дополнительные заголовки ответа. Если вы решили отказаться от генерации какого-либо содержимого ответа на запрос HEAD, вы лишите выходной фильтр содержимого, и добавленные ими заголовки могут не согласиться с тем, что будет возвращено из запроса GET. Конечным результатом этого является то, что вы можете заполнить кэши и работу браузера.

То же самое может применяться в равной степени к CGI-сценариям за Apache, так как в этом случае также могут быть добавлены выходные фильтры. Однако для сценариев CGI нет ничего, что могло бы защитить от глупости пользователей и того, что они поступают иначе для запроса HEAD.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...