Pergunta

Vários dos meus aplicativos AJAX no passado usaram pedido GET, mas agora eu estou começando a usar solicitação POST. solicitações POST parecem ser um pouco mais seguro e definitivamente mais url / amigável bonita. Assim, eu estou querendo saber se há alguma razão por que eu deveria usar solicitação GET em tudo.

Foi útil?

Solução

Eu geralmente configurar a questão assim:? Alguma coisa importante mudança após o pedido (Logging e similares não obstante). Se isso acontecer, ele deve ser um pedido POST, se isso não acontecer, ele deve ser um pedido GET.

Estou feliz que você chama solicitações POST "ligeiramente" mais seguras, porque isso é muito bonito o que são; é trivial para falsificar um pedido POST por um usuário para uma página. Tornando-se uma solicitação POST, no entanto, aceleradores impede web ou recargas de re-desencadear a ação acidentalmente.

Como AJAX, há mais uma consideração: se você estiver retornando JSON com suporte de retorno de chamada, ter muito cuidado para não colocar todos os dados sensíveis que você não quer que outros sites para ser capaz de ver lá dentro. Wikipedia teve uma vulnerabilidade ao longo destas linhas, onde o usuário anti-CSRF token de foi revelado através de sua API JSON.

Outras dicas

Você deve usar chegar onde você está fazendo um pedido que não tem efeitos colaterais, por exemplo, apenas buscar algumas informações. Este pedido pode:

  • ser repetido sem qualquer problema - se o navegador detecta um erro que pode silenciosamente repetição
  • Já o seu resultado em cache pelo navegador
  • ser armazenado em cache por um proxy

Estas coisas são todos bons. Qualquer coisa que só está recuperando dados (particularmente de dados pública) deve realmente ser um GET. O servidor deve enviar sensata Last-Modified: e Expira:. Cabeçalhos para permitir o cache, se necessário

Todos os pontos bons, no entanto, em resposta à pergunta, requisições GET são mais úteis em determinados cenários sobre solicitações POST:

  1. Eles podem ser marcadas
  2. Eles podem ser armazenadas em cache
  3. Eles são mais rápidos
  4. Eles têm conhecido conseqüências (assumindo que eles não alterar dados), então visitá-los múltipla vezes não é um problema.

Para o bem da posteridade, atualizando este comentário com as notas de blog re: ponto # 3 aqui, todo o crédito para Omar AL Zabir (o autor do referenciada Blog Post ):

"Atlas por padrão faz HTTP POST para todas as chamadas AJAX. Http POST é mais caro do que HTTP GET. Ele transmite mais bytes sobre o fio, assumindo assim tempo precioso rede e também torna ASP.NET fazer extras processamento na extremidade do servidor. Então, você deve usar HTTP GET, tanto quanto possível. No entanto, HTTP GET não permite que você passar objetos como parâmetros. Você pode passar numérico, cadeia e data única. Quando você faz um HTTP GET chamada, Atlas constrói uma url codificado e faz um sucesso para que url. Assim, você não deve passar muito conteúdo que torna a url se tornar maior do que 2048 caracteres. Tanto quanto eu sei, isso é o que é o máximo comprimento de qualquer URL.

Outra coisa má sobre http post é, é realmente 2 chamadas. Primeiro navegador envia os cabeçalhos HTTP POST e as respostas do servidor com “HTTP 100 Continuar". Quando o navegador recebe isso, ele envia o corpo real ".

Isso pode ajudá-lo a decidir onde usar GET e onde usar POST:

URIs, Endereçabilidade, eo uso de HTTP GET e POST .

Há uma outra diferença não mencionado por ninguém.

solicitações GET são passados ??na seqüência de URL e, portanto, sujeitas a um comprimento limite normalmente dependente do browser.

solicitações POST pode ser muito muito maior - na verdade, não se limitando realmente. Então, se você está precisando para solicitar dados de um servidor web e você está passando em lotes de informações de parâmetro, em seguida, uma solicitação POST pode ser a única opção.

Assim, como mencionado anteriormente realmente um pedido GET é para solicitar dados (sem efeitos colaterais), enquanto uma solicitação POST é geralmente utilizado para a transmissão de volta dados para o servidor a ser armazenado (com efeitos colaterais). por exemplo. Use POST para carregar um arquivo. GET para recuperar um arquivo.

Houve um tempo quando o IE Acredito que teve uma série GET URL muito curto. Algumas aplicações como o Lotus Notes usar um grande número de caracteres aleatórios para representar o ID do documento. Eu tive o desprazer de utilizar outro produto que seqüências aleatórias geradas de modo que o URL da página era único de cada vez. A seqüência aleatória foi ENORME ... e nem sempre trabalhar com IE6 da memória.

solicitações

Depois são tão inseguro como fica. A principal diferença é que o POST é usado para modificar o estado do aplicativo de servidor, enquanto GET solicita apenas dados a partir dele.

As matérias diferença quando você usa, URLs limpas "repousante", onde o próprio URL especifica o recurso, e os diferentes métodos de desencadear ações diferentes no lado do servidor.

Talvez o mais importante, GET é o livro-markable / visível na url história, e pesquisáveis ??com o Google.

POST é importante que você não deseja que o evento seja bookmarkable ou capazes de ser digitados em como uma URL - caso contrário você (ou Google rastrear suas URLS) pode acabar acidentalmente fazendo coisas como exclusão de usuários do sistema, por exemplo.

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