Seguro
Um método HTTP é seguro se ele não altera o estado do servidor. Em outras palavras, um método é seguro se ele leva a uma operação de somente leitura. Diversos métodos de HTTP são seguros: GET
, HEAD
, ou OPTIONS
. Todos os métodos seguros também são idempotentes, mas nem todos os métodos idempotentes são seguros. Por exemplo, PUT
e DELETE
são ambos idempotentes, entretanto são inseguros.
Mesmo se métodos seguros possuem a semântica de somente leitura, servidores podem alterar o seu estado (e.g., eles podem manter log ou estatísticas). O que é importante aqui, é de que chamando um método seguro, o cliente não requer que o servidor mude seu estado, e portanto não gerará carga desnecessária ao servidor. Navegadores podem chamar métodos seguros sem medo de causarem nenhum dano ao servidor: isso permite a eles a possibilidade de fazer atividades como pré-carregamento sem nenhum risco. Web crawlers também usam métodos seguros.
Métodos seguros não servem somente para buscar arquivos estáticos, o servidor pode gerar uma resposta para um método seguro no voô, enquanto o script gerador garantir segurança: ele não deve ativar gatilhos externos, como ativar um pedido de compras em um site.
É responsabilidade da aplicação no servidor implementar a semântica segura corretamente, o servidor web em si, sendo Apache, nginx ou IIS, não pode forçar ela por si só. Em particular, a aplicação não deve permitir que requisições GET
alterem seu estado.
Uma chamada a um método seguro, não alterando o estado do servidor:
GET /pageX.html HTTP/1.1
Uma chamada a um método não seguro, que pode alterar o estado do servidor:
POST /pageX.html HTTP/1.1
Uma chamada a um método idempotente, mas não seguro:
DELETE /idX/delete HTTP/1.1
Aprenda mais
Conhecimento geral
- Definição de seguro na especificação HTTP.