Qual é a diferença entre POST e GET?

Eu só recentemente me envolvi com PHP / AJAX / jQuery e parece-me que uma parte importante dessas tecnologias é a do POST e do GET .

Primeiro, qual é a diferença entre o POST e o GET ? Através da experimentação, eu sei que GET acrescenta as variables ​​de retorno e seus valores para a string de URL

 website.com/directory/index.php?name=YourName&bday=YourBday 

mas o POST não.

Então, essa é a única diferença ou existem regras ou convenções específicas para usar uma ou outra?

Em segundo lugar, eu também vi o POST e GET fora do PHP: também em AJAX e jQuery. Como o POST e o GET diferem entre esses 3? Eles são a mesma ideia, a mesma funcionalidade, apenas utilizada de forma diferente?

GET e POST são dois tipos diferentes de solicitações HTTP.

Segundo a Wikipedia :

GET solicita uma representação do recurso especificado. Observe que o GET não deve ser usado para operações que causam efeitos colaterais, como usá-lo para executar ações em aplicativos da Web. Uma razão para isso é que o GET pode ser usado arbitrariamente por robôs ou rastreadores, que não precisam considerar os efeitos colaterais que uma solicitação deve causar.

e

O POST envia dados para serem processados ​​(por exemplo, de um formulário HTML) para o recurso identificado. Os dados estão incluídos no corpo da solicitação. Isso pode resultar na criação de um novo recurso ou nas atualizações dos resources existentes ou em ambos.

Então, essencialmente GET é usado para recuperar dados remotos, e POST é usado para inserir / atualizar dados remotos.


A especificação do HTTP / 1.1 (RFC 2616) seção 9 Method Definitions contém mais informações sobre GET e POST , assim como os outros methods HTTP, se você estiver interessado.

Além de explicar os usos pretendidos de cada método, a especificação também fornece pelo menos uma razão prática para por que o GET deve ser usado apenas para recuperar dados:

Os autores de serviços que usam o protocolo HTTP NÃO DEVEM usar formulários baseados em GET para o envio de dados confidenciais, porque isso fará com que esses dados sejam codificados no URI de solicitação. Muitos servidores, proxies e agentes de usuários existentes registram o URI de solicitação em algum lugar onde possa estar visível para terceiros. Os servidores podem usar o envio de formulário baseado em POST


Por fim, uma consideração importante ao usar o GET para solicitações AJAX é que alguns navegadores – ou seja, o IE – armazenam em cache os resultados de uma solicitação GET . Portanto, se você, por exemplo, pesquisar usando a mesma solicitação GET , sempre obterá os mesmos resultados, mesmo que os dados que você está consultando estejam sendo atualizados no lado do servidor. Uma maneira de aliviar esse problema é tornar a URL exclusiva para cada solicitação, acrescentando um registro de data e hora.

Um POST , diferentemente de um GET , normalmente possui informações relevantes no corpo da solicitação. (Um GET não deve ter um corpo, portanto, além dos cookies, o único lugar para passar informações é na URL.) Além de manter a URL relativamente limpa, o POST também permite enviar muito mais informações (pois as URLs são limitadas em tamanho, por exemplo). todos os propósitos práticos), e permite que você envie praticamente qualquer tipo de dados (formulários de upload de arquivos, por exemplo, não podem usar GET – eles têm que usar POST mais um tipo especial de conteúdo / codificação).

Além disso, um POST indica que a solicitação mudará alguma coisa e não deve ser refeita por vontade própria. É por isso que você vê seu navegador perguntando se deseja reenviar os dados do formulário ao apertar o botão “voltar”.

GET , por outro lado, deve ser idempotente – o que significa que você pode fazer isso um milhão de vezes e o servidor fará a mesma coisa (e mostrará basicamente o mesmo resultado) a cada vez.

Aprenda subjacente ao protocolo HTTP

Isso é semelhante a dirigir um carro. Você compra um carro e vai para a estrada, mas não conhece nenhum dos sinais, luzes ou outras regras que deve obedecer. Obviamente você não é capaz de dirigir mesmo sabendo como dirigir um carro. Pelo menos não com segurança. Não para você nem para os outros.

Você deve aprender um pouco sobre o protocolo HTTP. GET / POST não estão relacionados (pelo menos não diretamente) ao PHP / AJAX / jQuery ou similar. Eles os usam porque estão usando o protocolo HTTP para comunicação. E há muito mais no protocolo HTTP do que apenas GET e POST .

Confira alguns desses e pesquise por conta própria também:

  • wikipedia
  • W3C
  • HTTP feito realmente fácil

Embora não seja uma descrição das diferenças, abaixo estão algumas coisas para pensar ao escolher o método correto.

  • As solicitações GET podem ser armazenadas em cache pelo navegador, o que pode ser um problema (ou benefício) ao usar o ajax.
  • As solicitações GET expõem os parâmetros aos usuários (o POST também funciona, mas eles são menos visíveis).
  • O POST pode passar muito mais informações para o servidor e pode ser de praticamente qualquer tamanho.

POST e GET são dois methods de solicitação HTTP . Geralmente, o GET destina-se a recuperar alguns dados, e espera-se que seja idempotente (a repetição não possui efeitos colaterais) e pode enviar apenas quantidades limitadas de dados de parâmetro para o servidor. As solicitações GET geralmente são armazenadas em cache por padrão por alguns navegadores, se você não for cuidadoso.

O POST é destinado a alterar o estado do servidor. Ele carrega mais dados e a repetição da consulta é permitida (e geralmente esperada) para ter efeitos colaterais, como a criação de duas mensagens em vez de uma.

Se você estiver trabalhando com REST , o GET deverá ser usado para solicitações nas quais você está apenas obtendo dados, e o POST deverá ser usado para solicitações nas quais você está fazendo algo acontecer.

Alguns exemplos:

  • OBTER a página que mostra uma questão SO em particular

  • POSTAR um comentário

  • Envie uma solicitação POST clicando no botão “Adicionar ao carrinho”.

Com o POST, você também pode fazer a codificação multipart mime, o que significa que você também pode append arquivos. Além disso, se você estiver usando postar variables ​​na navegação de páginas, o usuário receberá um aviso perguntando se deseja reenviar o parâmetro post. Normalmente, eles parecem iguais em uma solicitação HTTP, mas você deve se ater apenas ao POST se precisar “POST” algo para um servidor e “GET” se precisar obter algo de um servidor da maneira que foi planejada.

A única diferença “grande” entre o POST & GET (quando usá-los com o AJAX) é porque o GET é o URL fornecido, eles são limitados em seu comprimento (desde que o URL seja infinito em comprimento).