Retornos HTTP - PPCA2014/ppca_soa GitHub Wiki

STATUS HTTP

Servidores HTTP (Hypertext Transfer Protocol) ao receberem uma requisição retornam uma resposta ao cliente que fez a solicitação. O mencionado código de resposta serve, em suma, para informar o atendimento ou não da requisição ou se a tarefa solicitada foi executada ou não. Esses códigos, que podem ser definidos como status HTTP, são divididos em 5 classes, sendo classificados de acordo com suas finalidades. A RFC 2616 (Request for Comments) que descreve o protocolo HTTP 1.1 traz, dentre outras especificações para o protocolo, os códigos de Status. Apresento abaixo as distinções entre as classes de Status HTTP e alguns desses códigos de status que, mediante minha análise, convém serem usados em nosso servidor. Convém mencionar que essa não é uma descrição definitiva e imutável dos códigos, e que sugestões dos colegas quanto a acréscimos ou quanto a alguma retificação serão bem vindas.

IDENTIFICAÇÃO DAS CLASSES

O primeiro dígito do código de status define a classe da resposta. Os dois dígitos seguintes identificam a função específica do código dentro da classe. Há 5 valores possíveis para o primeiro dígito, conforme relacionado abaixo:

- CLASSE 1XX: Informativa – Indica que a solicitação foi recebida, e ocorrerá a continuidade do processamento da requisição HTTP enviada ao servidor. Essa classe de código de status indica uma resposta provisória, constituída apenas do Status-Line e cabeçalhos opcionais, e é encerrado por uma linha vazia. Em nosso servidor, não serão usados códigos pertencentes a essa classe pois, como fornecem uma resposta provisória indicando apenas o recebimento e não o processamento da requisição, não existe muito sentido em usá-lo, exceto em circunstância experimental (em casos de testes) para avaliar se o servidor de fato está recebendo a solicitação.

- CLASSE 2XX: Sucesso – A ação foi recebida com sucesso, compreendida e aceita com sucesso. Como essa classe provê um retorno quanto ao aceite da requisição HTTP feito pelo cliente, seu uso em nosso servidor é interessante.

- CLASSE 3XX: Redirecionamento - O cliente deve tomar medidas adicionais para completar o pedido. Essa classe de código de status indica que a ação ainda precisa ser levada até o agente do usuário, a fim de atender à solicitação. Ou seja, faltam informações para que o servidor conclua a requisição do cliente. Será aplicada ao nosso servidor. Ela é mais utilizada diante de um redirecionamento temporário ou permanente de um conteúdo.

- CLASSE 4XX: Erro do Cliente (Client Error) – O pedido feito pelo cliente contém sintaxe inválida. Essa classe é destinada aos casos em que o cliente parece ter cometido um erro em sua requisição. Convém utilizar códigos dessa classe em nosso servidor, para assegurar que uma requisição incorreta feita pelo cliente será tratada.

- CLASSE 5XX: Outros Erros decorrentes do servidor (Server Error) – Ocorre quando o servidor, por algum motivo, não cumpre um pedido proveniente do cliente e que aparentemente é válido. Códigos dessa classe também serão tratados por nosso servidor.

CÓDIGOS A SEREM USADOS EM NOSSO SERVIDOR

Após uma breve explanação sobre as classes de respostas das requisições HTTP, seguem os códigos de Status HTTP cujo uso é recomendável em nosso servidor.

200 - OK: Padrão de resposta para solicitações HTTP sucesso. A resposta real dependerá do método de solicitação usado. Em uma solicitação GET, a resposta conterá uma entidade que corresponde ao recurso solicitado. Em uma solicitação POST a resposta conterá a descrição de uma entidade, ou contendo o resultado da ação.

301 - MOVIDO PERMANENTEMENTE: Essas e todas as solicitações futuras devem ser encaminhadas para uma URL específica Quando uma URL é permanentemente movida para outra URL, o servidor deve conter uma URL alternativa para prover o redirecionamento. Este código pode ou não vir a ser utilizado. Tudo dependerá se uma URL for movida para outra URL permanentemente.

302 – MOVIDO TEMPORARIAMENTE: É uma forma comum de realizar o redirecionamento de URL. Esse código é semelhante ao 301 com relação a uma solicitação GET ou HEAD, pois direciona automaticamente o solicitante para um local diferente. Pode ser usada quando a URL temporariamente não puder ser acessada mas ainda continuará sendo usada.

401 - NÃO AUTORIZADO (UNAUTHORIZED): Ocorre quando o acesso ao recurso do servidor requer autenticação e esta falha por algum motivo (falta de credencial ou credencial inválida). O cliente pode tentar uma nova requisição com um credencial mais apropriada. Em outras palavras, é um código de Status HTTP para tratar falta de acesso devido a não autenticação.

403 - PROIBIDO (FORBIDDEN): Ocorre quando o servidor recusa atender o pedido por causa de alguma regra que determina a negação ao acesso. Ou seja, independente do cliente fornecer credenciais de acesso o acesso será negado.

404 - NÃO ENCONTRADO (NOT FOUND): O recurso requisitado não foi encontrado, mas pode ser disponibilizado novamente no futuro. Provavelmente o recurso solicitado pelo cliente foi removido do servidor por algum motivo mas, poderá ser reposto caso haja necessidade.

405 - MÉTODO NÃO PERMITIDO: Foi feita uma solicitação de um recurso usando um método de pedido que não é compatível com esse recurso, por exemplo, usando GET em um formulário, que exige que os dados sejam apresentados via POST, PUT ou usar em um recurso somente de leitura.

407 - AUTENTICAÇÃO DE PROXY NECESSÁRIA: Este código é semelhante ao 401 (não autorizado), mas indica que o cliente deve primeiro se autenticar com o proxy. O cliente pode repetir o pedido com um campo adequado usando um cabeçalho Proxy-Authorization. Cabe à equipe analisar se será necessário usar esse código. Obviamente, seu uso só será requisitado caso se trabalhe com autenticação de Proxy. Se quisermos também seguir os princípios da obscuridade, por exemplo, emitir apenas uma mensagem de não autorizado, podemos usar apenas o código 401.

500 - ERRO INTERNO DO SERVIDOR (INTERNAL SERVER ERROR): Indica um erro do servidor ao processar a solicitação. Na grande maioria dos casos está relacionado às permissões dos arquivos ou pastas do software ou script que o usuário tenta acessar e não foram configuradas no momento da programação/construção do site ou da aplicação. Traz uma mensagem de erro genérica. Convém customizar esse erro, caso ocorra, para exibi-lo ao cliente.

501 - NÃO IMPLEMENTADO (NOT IMPLEMENTED): O erro ocorre quando o servidor Web não reconhece o método HTTP de solicitação que encontra no fluxo de dados HTTP enviado a ele pelo cliente. O método no fluxo de dados da solicitação HTTP deve ser um dos seguintes: GET, OPTIONS, HEAD, POST, PUT, DELETE, TRACE e CONNECT como definido pelo protocolo HTTP ou o método pode ser válido, mas na verdade não suportado pelo servidor Web.

502 – BAD GATEWAY: Em regra, o erro ocorre quando há uma configuração imprecisa entre os computadores de back-end, possivelmente incluindo o servidor Web no site visitado.

503 - SERVIÇO INDISPONÍVEL (SERVICE UNAVAILABLE): O servidor está em manutenção ou não consegue dar conta dos processamentos de recursos devido à sobrecarga do sistema. Isto deve ser uma condição temporária. Interessante tratar esse erro também.