Определение типа http-запроса (GET, HEAD и т.д.) Из python cgi

StackOverflow https://stackoverflow.com/questions/1417715

Вопрос

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

Спасибо!

Это было полезно?

Решение

import os

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

Другие советы

Это не прямой ответ на ваш вопрос.Но ваш вопрос проистекает из того, что вы делаете что-то неправильно.

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

Напишите мод_wsgi применение.А еще лучше, используйте веб-фреймворк Python.Их там десятки.Выберите один из понравившихся Werkzeug.

Стандарт WSGI (описанный в БОДРОСТЬ ДУХА 333) значительно упрощает поиск по веб-запросу.

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

Веб-фреймворк также проще, чем написать свой собственный CGI-скрипт или приложение mod_wsgi.

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top