Pergunta

Como posso descobrir o pedido http meu python cgi recebeu? Eu preciso comportamentos diferentes para a cabeça e GET.

Obrigado!

Foi útil?

Solução

import os

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

Outras dicas

Esta não é uma resposta directa à sua pergunta. Mas a sua pergunta decorre de fazer as coisas da maneira errada.

Não escreva scripts CGI Python.

Escrever um href="http://code.google.com/p/modwsgi/" rel="nofollow noreferrer"> aplicação . Melhor ainda, usar um framework web Python. Existem dezenas. Escolha um como Werkzeug .

O padrão WSGI (descrito no PEP 333 ) torna muito mais , muito mais fácil encontrar as coisas no pedido web.

A implementação mod_wsgi é mais rápido e mais seguro do que um CGI.

Um framework web também é mais simples do que escrever seu próprio script CGI ou mod_wsgi aplicação.

Por que você precisa distinguir entre GET e cabeça?

Normalmente, você não deve distinguir e deve tratar um pedido HEAD apenas como um GET. Isto porque um pedido HEAD pretende retornar exatamente os mesmos cabeçalhos como um GET. A única diferença é que não haverá conteúdo da resposta. Só porque não há conteúdo de resposta que não significa que você já não tem que devolver um cabeçalho Content-Length válido ou outros cabeçalhos, que são dependentes do conteúdo da resposta.

Em mod_wsgi, que várias pessoas estão apontando para você em, ele vai realmente deliberadamente mudar o método de solicitação de cabeça para conseguir em certos casos, para se proteger contra as pessoas que erroneamente CABEÇA tratar de forma diferente. O caso específico em que isso é feito é o lugar onde um filtro de saída Apache está registrado. A razão de que é feito neste caso é porque o filtro de saída pode esperar para ver o conteúdo da resposta e para que geram cabeçalhos de resposta adicionais. Se você tivesse que decidir não se preocupam em gerar qualquer conteúdo de resposta para um pedido HEAD, você vai privar o filtro de saída do conteúdo e os cabeçalhos acrescentam pode, então, não concorda com o que seria devolvido a partir de uma solicitação GET. O resultado final disso é que você pode encher-se caches e o funcionamento do browser.

O mesmo pode aplicar-se igualmente por scripts CGI por trás Apache como filtros de saída ainda podem ser adicionados nesse caso também. Para scripts CGI não há nada no lugar embora para proteger contra usuários de ser estúpido e fazer as coisas de forma diferente para um pedido HEAD.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top