Pelo que posso entender, há três categorias:
- Nunca use
GET
e usePOST
- Nunca use
POST
e useGET
- Não importa qual você usa.
Estou correto ao assumir esses três casos? Se sim, quais são alguns exemplos de cada caso?
Pelo que posso entender, há três categorias:
GET
e usePOST
POST
e useGET
Estou correto ao assumir esses três casos? Se sim, quais são alguns exemplos de cada caso?
Respostas:
Use POST
para ações destrutivas, como criação (sei da ironia), edição e exclusão, porque você não pode POST
executar uma ação na barra de endereços do seu navegador. Use GET
quando for seguro para permitir que uma pessoa chame uma ação. Então, um URL como:
http://myblog.org/admin/posts/delete/357
Deve levá-lo a uma página de confirmação, em vez de simplesmente excluir o item. É muito mais fácil evitar acidentes dessa maneira.
POST
também é mais seguro do que GET
, porque você não está colando informações em um URL. Portanto, usar GET
o method
formulário HTML para coletar uma senha ou outras informações confidenciais não é a melhor idéia.
Uma nota final: POST
pode transmitir uma quantidade maior de informações que GET
. O 'POST' não possui restrições de tamanho para os dados transmitidos, enquanto o 'GET' é limitado a 2048 caracteres.
Em resumo
GET
para safe and
idempotent
solicitaçõesPOST
para neither safe nor idempotent
solicitaçõesEm detalhes Há um local apropriado para cada um. Mesmo se você não seguir os princípios RESTful , muito poderá ser obtido com a aprendizagem sobre o REST e como funciona uma abordagem orientada a recursos.
Um aplicativo RESTful irá
use GETs
para operações que são ambassafe and idempotent
.
Uma safe
operação é uma operação not change the data
solicitada.
Uma idempotent
operação é aquela em que o resultado be the same
não importa quantas vezes você o solicite.
É lógico que, como os GETs são usados para operações seguras , eles também são automaticamente idempotentes . Normalmente, um GET é usado para recuperar um recurso (uma pergunta e suas respostas associadas no estouro de pilha, por exemplo) ou coleção de recursos.
Um aplicativo RESTful será usado
PUTs
para operações que sãonot safe but idempotent
.
Eu sei que a pergunta era sobre GET e POST, mas voltarei ao POST em um segundo.
Normalmente, uma PUT é usada para editar um recurso (editar uma pergunta ou uma resposta no estouro de pilha, por exemplo).
A
POST
seria usado para qualquer operação que sejaneither safe or idempotent
.
Normalmente, um POST seria usado para criar um novo recurso, por exemplo, criando uma NOVA pergunta SO (embora em alguns modelos um PUT também fosse usado para isso).
Se você executar o POST duas vezes, acabará criando DUAS novas perguntas.
Há também uma operação DELETE, mas acho que posso deixar isso lá :)
Discussão
Em termos práticos, os navegadores da web modernos geralmente oferecem suporte apenas a GET e POST (você pode executar todas essas operações por meio de chamadas javascript, mas em termos de inserção de dados em formulários e pressionamento de envio, geralmente você tem as duas opções). Em um aplicativo RESTful, o POST geralmente será substituído para fornecer também as chamadas PUT e DELETE.
Mas, mesmo que você não esteja seguindo os princípios RESTful, pode ser útil pensar em termos de uso de GET para recuperar / visualizar informações e POST para criar / editar informações.
Você nunca deve usar GET para uma operação que altera os dados. Se um mecanismo de pesquisa rastreia um link para sua operação maligna ou os favoritos do cliente, isso pode significar grandes problemas.
Use GET se você não se importa que o pedido seja repetido (ou seja, ele não muda de estado).
Use POST se a operação alterar o estado do sistema.
method
obrigatório)
GET: geralmente usado para solicitações de pesquisa enviadas ou qualquer solicitação em que você queira que o usuário possa acessar a página exata novamente.
Vantagens do GET:
Desvantagens do GET:
POST: Usado para solicitações de segurança mais alta, onde os dados podem ser usados para alterar um banco de dados ou uma página que você não deseja que alguém marque como favorito.
Vantagens do POST:
Desvantagens do POST:
Diretamente do Hypertext Transfer Protocol - HTTP / 1.1 :
9.3 GET
O método GET significa recuperar qualquer informação (na forma de uma entidade) identificada pelo Request-URI. Se o Request-URI se referir a um processo de produção de dados, são os dados produzidos que devem ser retornados como a entidade na resposta e não o texto de origem do processo, a menos que esse texto seja a saída do processo.
A semântica do método GET muda para um "GET condicional" se a mensagem de solicitação incluir um campo de cabeçalho If-Modified-Since, If-Modified-Since, If-Match, If-None-Match ou If-Range. Um método GET condicional solicita que a entidade seja transferida apenas nas circunstâncias descritas pelos campos de cabeçalho condicional. O método GET condicional visa reduzir o uso desnecessário da rede, permitindo que as entidades em cache sejam atualizadas sem exigir várias solicitações ou transferir dados já mantidos pelo cliente.
A semântica do método GET muda para um "GET parcial" se a mensagem de solicitação incluir um campo de cabeçalho Range. Um GET parcial solicita que apenas parte da entidade seja transferida, conforme descrito na seção 14.35. O método GET parcial tem como objetivo reduzir o uso desnecessário da rede, permitindo que entidades parcialmente recuperadas sejam concluídas sem transferir dados já mantidos pelo cliente.
A resposta a uma solicitação GET é armazenável em cache se, e somente se, atender aos requisitos de cache HTTP descritos na seção 13.
Consulte a seção 15.1.3 para considerações de segurança quando usado para formulários.
9.5 POST
O método POST é usado para solicitar que o servidor de origem aceite a entidade incluída na solicitação como um novo subordinado do recurso identificado pelo Request-URI na linha de solicitação. O POST foi projetado para permitir um método uniforme para cobrir as seguintes funções:
Anotação de recursos existentes;
Postar uma mensagem em um quadro de avisos, grupo de notícias, lista de discussão ou grupo de artigos semelhante;
Fornecer um bloco de dados, como o resultado do envio de um formulário, para um processo de manipulação de dados;
Estendendo um banco de dados através de uma operação de acréscimo.
A função real executada pelo método POST é determinada pelo servidor e geralmente depende do URI de solicitação. A entidade postada é subordinada a esse URI da mesma maneira que um arquivo é subordinado a um diretório que o contém, um artigo de notícias é subordinado a um grupo de notícias no qual é postado ou um registro é subordinado a um banco de dados.
A ação executada pelo método POST pode não resultar em um recurso que pode ser identificado por um URI. Nesse caso, 200 (OK) ou 204 (Sem conteúdo) é o status de resposta apropriado, dependendo de a resposta incluir ou não uma entidade que descreve o resultado.
A primeira coisa importante é o significado de GET versus POST:
Depois disso, algumas coisas que podem ser observadas:
De qualquer forma, acho que não poderíamos "viver" sem o GET: pense em quantos URLs você está usando com parâmetros na string de consulta todos os dias - sem o GET, todos eles não funcionariam ;-)
http://example.com/var1/value1/var2/value2/var3/value3
poderíamos 'tecnicamente' não tem GET mais ...
www.mypage.com/contact/
usos GET internamente para algo comoindex.php?url=/contact/
Além da diferença de restrições de comprimento em muitos navegadores da web, também há uma diferença semântica. Os GETs devem ser "seguros", pois são operações somente leitura que não alteram o estado do servidor. Os POSTs normalmente mudam de estado e emitem avisos ao reenvio. Os rastreadores da Web dos mecanismos de pesquisa podem criar GETs, mas nunca devem fazer POSTs.
Use GET se desejar ler dados sem alterar o estado e use POST se desejar atualizar o estado no servidor.
Uma diferença prática é que navegadores e servidores da web têm um limite no número de caracteres que podem existir em um URL. É diferente de aplicativo para aplicativo, mas certamente é possível atingi-lo se você tiver textarea
s em seus formulários.
Outro problema com os GETs - eles são indexados pelos mecanismos de pesquisa e outros sistemas automáticos. O Google já teve um produto que buscava previamente os links na página que você estava visualizando, para que eles fossem mais rápidos de carregar se você clicasse nesses links. Isso causou grandes estragos em sites com links como delete.php?id=1
- as pessoas perderam seus sites inteiros.
Use GET quando quiser que o URL reflita o estado da página. Isso é útil para visualizar páginas geradas dinamicamente, como as vistas aqui. Um POST deve ser usado em um formulário para enviar dados, como quando clico no botão "Postar sua resposta". Também produz um URL mais limpo, pois não gera uma sequência de parâmetros após o caminho.
Como os GETs são puramente URLs, eles podem ser armazenados em cache pelo navegador da Web e podem ser mais bem utilizados para coisas como imagens geradas de forma consistente. (Defina um tempo de expiração)
Um exemplo da página do gravatar: http://www.gravatar.com/avatar/4c3be63a4c2f539b013787725dfce802?d=monsterid
GET pode oferecer um desempenho marginalmente melhor, alguns servidores da Web gravam o conteúdo do POST em um arquivo temporário antes de chamar o manipulador.
Outra coisa a considerar é o limite de tamanho. Os GETs são limitados pelo tamanho da URL, 1024 bytes pelo padrão, embora os navegadores possam suportar mais.
A transferência de mais dados do que isso deve usar um POST para obter melhor compatibilidade do navegador.
Ainda menos que esse limite é um problema, como outro autor escreveu, qualquer coisa no URL pode acabar em outras partes da interface do usuário do navegador, como o histórico.
Não há nada que você não possa fazer por si só. O ponto é que você não deve modificar o estado do servidor em um HTTP GET. Os proxies HTTP assumem que, como o HTTP GET não modifica o estado, se um usuário chama HTTP GET uma vez ou 1000 vezes não faz diferença. Usando essas informações, eles assumem que é seguro retornar uma versão em cache do primeiro HTTP GET. Se você quebrar a especificação HTTP, corre o risco de quebrar o cliente HTTP e os proxies em estado selvagem. Não faça isso :)
Isso aborda o conceito de REST e como a web era destinada a ser usada. Existe um excelente podcast no rádio de Engenharia de Software que oferece uma conversa aprofundada sobre o uso de Get e Post.
Get é usado para extrair dados do servidor, onde uma ação de atualização não deve ser necessária. A idéia é que você possa usar a mesma solicitação GET repetidamente e ter as mesmas informações retornadas. A URL possui as informações get na string de consulta, porque deveria poder ser facilmente enviada para outros sistemas e pessoas, como um endereço onde encontrar algo.
O Post deve ser usado (pelo menos pela arquitetura REST na qual a Web se baseia) para enviar informações ao servidor / dizer ao servidor para executar uma ação. Exemplos como: atualizar esses dados, criar este registro.
1.3 Lista de verificação rápida para escolher HTTP GET
ouPOST
The interaction is more like a question (i.e., it is a safe operation such as a query, read operation, or lookup).
The interaction is more like an order, or
The interaction changes the state of the resource in a way that the user would perceive (e.g., a subscription to a service), or
The user be held accountable for the results of the interaction.
Fonte .
Eu não vejo um problema usando get, porém, eu o uso para coisas simples, onde faz sentido manter as coisas na string de consulta.
Usá-lo para atualizar o estado - como um GET delete.php?id=5
para excluir uma página - é muito arriscado. As pessoas descobriram isso quando o acelerador da web do Google começou a buscar URLs nas páginas - ele atingiu todos os links de exclusão e eliminou os dados das pessoas. O mesmo pode acontecer com as aranhas dos mecanismos de pesquisa.
O POST pode mover grandes dados, enquanto GET não pode.
Mas, geralmente, não se trata de uma falha no GET, mas de uma convenção, se você deseja que seu site / aplicativo da web esteja se comportando bem.
Dê uma olhada em http://www.w3.org/2001/tag/doc/whenToUseGet.html
De RFC 2616 :
9.3 GET
O método GET significa recuperar qualquer informação (na forma de uma entidade) identificada pelo Request-URI. Se o Request-URI se referir a um processo de produção de dados, são os dados produzidos que devem ser retornados como a entidade na resposta e não o texto de origem do processo, a menos que esse texto seja a saída do processo.
9.5 POST
O método POST é usado para solicitar que o servidor de origem aceite a entidade incluída na solicitação como um novo subordinado do recurso identificado pelo Request-URI na linha de solicitação. O POST foi projetado para permitir um método uniforme para cobrir as seguintes funções:
- Anotação de recursos existentes;
- Postar uma mensagem em um quadro de avisos, grupo de notícias, lista de discussão ou grupo de artigos semelhante;
- Fornecer um bloco de dados, como o resultado do envio de um formulário, para um processo de manipulação de dados;
- Estendendo um banco de dados através de uma operação de acréscimo.
A função real executada pelo método POST é determinada pelo servidor e geralmente depende do URI de solicitação. A entidade postada é subordinada a esse URI da mesma maneira que um arquivo é subordinado a um diretório que o contém, um artigo de notícias é subordinado a um grupo de notícias no qual é postado ou um registro é subordinado a um banco de dados.
A ação executada pelo método POST pode não resultar em um recurso que pode ser identificado por um URI. Nesse caso, 200 (OK) ou 204 (Sem conteúdo) é o status de resposta apropriado, dependendo de a resposta incluir ou não uma entidade que descreve o resultado.
Uso POST quando não quero que as pessoas vejam o QueryString ou quando o QueryString fica grande. Além disso, o POST é necessário para upload de arquivos.
Porém, não vejo um problema ao usar GET, eu o uso para coisas simples, nas quais faz sentido manter as coisas no QueryString.
O uso de GET também permitirá a vinculação a uma página específica, onde o POST não funcionaria.
A intenção original era que o GET fosse usado para recuperar dados e o POST seria qualquer coisa. A regra geral que uso é que, se estou enviando algo de volta ao servidor, utilizo o POST. Se estou apenas chamando um URL para recuperar dados, uso GET.
Leia o artigo sobre HTTP na Wikipedia . Explicará o que é o protocolo e o que ele faz:
PEGUE
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, o que não deve levar em consideração os efeitos colaterais que uma solicitação deve causar.
e
POST Envia dados a serem processados (por exemplo, de um formulário HTML) para o recurso identificado. Os dados são incluídos no corpo da solicitação. Isso pode resultar na criação de um novo recurso ou nas atualizações dos recursos existentes ou em ambos.
O W3C possui um documento chamado URIs, capacidade de endereçamento e o uso de HTTP GET e POST que explica quando usar o quê. Citação
1.3 Lista de verificação rápida para escolher HTTP GET ou POST
- Use GET se:
- A interação é mais parecida com uma pergunta (ou seja, é uma operação segura, como consulta, operação de leitura ou pesquisa).
e
- Use POST se:
- A interação é mais como um pedido ou
- A interação altera o estado do recurso de uma maneira que o usuário percebe (por exemplo, uma assinatura de um serviço), ou o O usuário é responsabilizado pelos resultados da interação.
No entanto, antes da decisão final de usar HTTP GET ou POST, considere também considerações para dados confidenciais e considerações práticas.
Um exemplo prático seria sempre que você enviar um formulário HTML. Você especifica a publicação ou a obtenção da ação do formulário. O PHP preencherá $ _GET e $ _POST de acordo.
Em w3schools.com :
O que é HTTP?
O HTTP (Hypertext Transfer Protocol) foi projetado para permitir a comunicação entre clientes e servidores.
O HTTP funciona como um protocolo de solicitação-resposta entre um cliente e um servidor.
Um navegador da web pode ser o cliente e um aplicativo em um computador que hospeda um site pode ser o servidor.
Exemplo: Um cliente (navegador) envia uma solicitação HTTP ao servidor; o servidor retornará uma resposta para o cliente. A resposta contém informações de status sobre a solicitação e também pode conter o conteúdo solicitado.
Dois métodos de solicitação HTTP: GET e POST
Dois métodos comumente usados para uma resposta de solicitação entre um cliente e um servidor são: GET e POST.
GET - Solicita dados de um recurso especificado POST - Envia dados a serem processados para um recurso especificado
Aqui, distinguimos as principais diferenças:
Versão simples do POST GET PUT DELETE
Bem, uma coisa importante é que tudo o que você enviar GET
será exposto via URL. Em segundo lugar, como Ceejayoz diz, há um limite de caracteres para um URL.
Outra diferença é que o POST geralmente requer duas operações HTTP, enquanto o GET exige apenas uma.
Editar: devo esclarecer - para padrões de programação comuns. Geralmente, responder a um POST com uma página HTML reta é um design questionável por vários motivos, um dos quais é o irritante "você deve reenviar este formulário, deseja fazê-lo?" ao pressionar o botão Voltar.
expect: 100-continue
cabeçalho e, em seguida, somente envia dados quando o servidor responder com a 100 CONTINUE
.
Conforme respondido por outras pessoas, há um limite no tamanho da URL com get e os arquivos podem ser enviados apenas com postagem.
Gostaria de acrescentar que se pode adicionar coisas a um banco de dados com ações get e executar com uma postagem. Quando um script recebe uma postagem ou um get, ele pode fazer o que o autor deseja. Acredito que a falta de entendimento deriva da redação escolhida pelo livro ou de como você o lê.
Um autor de script deve usar postagens para alterar o banco de dados e usar get only para recuperação de informações.
As linguagens de script forneceram muitos meios para acessar a solicitação. Por exemplo, o PHP permite o uso de $_REQUEST
para recuperar uma postagem ou um get. Deve-se evitar isso em favor dos mais específicos $_GET
ou $_POST
.
Na programação da web, há muito mais espaço para interpretação. Há o que se deve e o que se pode fazer, mas qual é o melhor geralmente está em debate. Felizmente, neste caso, não há ambiguidade. Você deve usar mensagens de alterar dados, e você deve usar get para recuperar informações.
Gorgapor, mod_rewrite
ainda utiliza frequentemente GET
. Ele apenas permite traduzir um URL mais amigável em um URL com uma GET
string de consulta.
Os dados de postagem HTTP não têm um limite especificado na quantidade de dados, onde diferentes navegadores têm limites diferentes para GETs. A RFC 2068 declara:
Os servidores devem ter cuidado com a dependência dos comprimentos de URI acima de 255 bytes, porque algumas implementações antigas de cliente ou proxy podem não suportar adequadamente esses comprimentos
Especificamente, você deve construir o HTTP certo para o que é usado. Os HTTP GET não devem ter efeitos colaterais e podem ser atualizados e armazenados com segurança por proxies HTTP, etc.
Os POST HTTP são usados quando você deseja enviar dados contra um recurso de URL.
Um exemplo típico para usar HTTP GET está em uma pesquisa, ou seja, Search? Query = my + query Um exemplo típico para usar um HTTP POST é enviar feedback para um formulário online.