Existem dois métodos HTTP que podem ser utilizados para fazer requisições ao servidor: GET e POST
Quando fazemos uma busca em algum site de pesquisa (Ex: google.com), realizamos normalmente uma consulta GET, que está explícita na URL do pedido.
Vejam só: https://www.google.com.br/?gws_rd=ssl#q=como+estudar+para+concursos
Realizei uma busca no google, que no exemplo foi: "Como estudar para concursos", note que quando pressionei enter, o navegador pega as informações do pedido da consulta, insere no URL e retorna a URL acima com o site (e o resultado da busca) e uma interrogação "?" separando o termo buscado por mim.
Pois bem, o GET é usado mais para consultas, requisições ou buscas que não alterem o estado do servidor. PORÉM, existem consultas em que páginas são atualizadas frequentemente, isso causaria desperdício de banda (toda vez que acessar o servidor ter que baixar todo conteúdo).
Foi inventado então o GET condicional (If-Modified-Since), que é um GET que leva em seu cabeçalho a data e hora da última vez que a página está armazenada no cliente. A partir daí é feita uma comparação entre a hora/data da última modificação no servidor e hora/data do arquivo no cliente, caso haja atualização por parte do servidor, a página é enviada por completo ao cliente, caso contrário, é retornado a página que está em cache na máquina.