HTTP Caching Server que suporta POST

1

Estou hospedando um serviço REST que está enviando cabeçalhos de controle de cache apropriados. Eu uso o Varnish como um servidor de cache na frente do meu servidor web. No entanto, uma limitação do verniz é que ele não suporta o armazenamento em cache HTTP POST e HTTP PUT. Existe algum servidor de cache alternativo que possa armazenar essas solicitações em cache?

Eu entendo que o POST em cache é um pouco complicado porque você não pode simplesmente armazenar em cache com base na URL como uma chave como para GET; ele precisa realmente inspecionar o corpo da solicitação. No caso de solicitações de multipart/form-data , provavelmente deve haver um limite no tamanho do corpo da solicitação para que ele seja armazenado em cache (para que grandes uploads de arquivos, etc. não sejam armazenados em cache). No entanto, eu realmente quero poder armazenar em cache o HTTP POST curto, ou pelo menos os application/x-www-form-urlencoded .

    
por Jeroen 12.04.2012 / 20:53

2 respostas

1

A idéia principal do armazenamento em cache é fornecer as mesmas respostas para a mesma solicitação sem solicitar um sistema de backend. O problema com as solicitações POST é que você precisa inspecionar o corpo para decidir quando duas solicitações são iguais. A melhor solução é mudar de POST para GET.

Se isso não for aplicável, você pode tentar o módulo proxy Nginx com a seguinte configuração (consulte a limitação exigida do corpo tamanho):

location @apache_backend {
    ...
    proxy_cache_methods   POST;
    proxy_cache_key       "$uri|$request_body";
    client_max_body_size  1k;
}
    
por 13.04.2012 / 12:57
1

Você marcou sua pergunta com , mas aparentemente você está sem ter conhecimento das proxy_cache_methods e proxy_cache_key diretivas que também permitem que você faça proxy nas respostas POST, desde que seu servidor faz uso de cabeçalhos de controle de cache para respostas de POST.

A idéia seria incluir o método POST com proxy_cache_methods e encontrar uma linha adequada para proxy_cache_key . O valor padrão de $scheme$proxy_host$request_uri; não funcionaria bem como você suspeita, mas você pode escolher na grande lista de variáveis Nginx para conseguir algo que atenda às suas necessidades.

    
por 12.04.2012 / 23:02