Fluxo HTTP no Django
Na primeira aula desse capítulo, foi abordado o funcionamento do protocolo HTTP e qual problema o Django resolve.
O HTTP é um conjunto de regras que permite a comunicação entre um cliente (browser) e um servidor da web. Ele é amplamente utilizado para solicitar e fornecer recursos, como páginas da web, imagens e outros tipos de dados.
A requisição HTTP nada mais é que um arquivo como o formato a seguir:

request
Quando o servidor recebe este arquivo, deve responder com um ‘response’. Cujo o formato é bem parecido:

Quando o acesso ao HTTP é feito pelo navegador, o navegador consegue entender o tipo de conteúdo e então, interpretar o HTML, mostrando a interface para o cliente.
-
Pedido (Request):
- Um cliente (geralmente um navegador da web) envia uma solicitação HTTP para um servidor. Essa solicitação inclui informações sobre o que o cliente deseja, como a URL (Uniform Resource Locator) do recurso desejado e o tipo de solicitação (GET, POST, etc.).
-
Processamento do Servidor:
- O servidor da web recebe a solicitação e processa-a com base nas informações fornecidas. Isso pode incluir a busca do recurso solicitado no sistema de arquivos do servidor ou a execução de algum código para gerar dinamicamente o conteúdo da resposta.
-
Resposta (Response):
- O servidor da web cria uma resposta HTTP que inclui informações sobre o resultado do pedido, como o status da resposta (por exemplo, "200 OK" para sucesso ou "404 Not Found" para recurso não encontrado), cabeçalhos (headers) com informações adicionais, e o próprio corpo da resposta, que contém os dados solicitados (como uma página da web HTML, uma imagem, um arquivo de vídeo, etc.).
-
Entrega ao Cliente:
- A resposta HTTP é enviada de volta ao cliente através da rede, geralmente pela Internet.
-
Processamento do Cliente:
- O cliente recebe a resposta e processa-a de acordo com seu tipo. Por exemplo, um navegador exibirá uma página da web HTML, exibirá imagens, reproduzirá vídeos, etc.
-
Encerramento da Conexão (Opcional):
- Em muitos casos, a conexão TCP/IP usada para a comunicação entre o cliente e o servidor é encerrada após a resposta ser entregue. No entanto, em algumas situações, a conexão pode ser mantida para solicitações adicionais (usando conexões persistentes).
Verbos de uma requisição
- GET: O método GET é usado para solicitar dados de um servidor web. Ele envia uma requisição para o servidor solicitando um recurso específico, que é recuperado e retornado como resposta. O GET é usado para recuperar informações, mas não deve ser usado para alterar o estado do servidor.
- POST: O método POST é usado para enviar dados para o servidor. Ele é comumente usado para submeter formulários da web e enviar informações que serão processadas pelo servidor. Os dados são incluídos no corpo da requisição.
- PUT: O método PUT é usado para atualizar ou substituir um recurso existente no servidor com os dados fornecidos na requisição. Ele é usado para fazer alterações específicas em um recurso identificado por sua URL.
- DELETE: O método DELETE é usado para remover um recurso específico do servidor, identificado pela URL da requisição. Ele efetua a exclusão do recurso no servidor.
- PATCH: O método PATCH é usado para fazer modificações parciais em um recurso existente no servidor. Em vez de substituir o recurso inteiro, apenas as alterações especificadas no corpo da requisição são aplicadas.
- HEAD: O método HEAD é semelhante ao GET, mas solicita apenas os cabeçalhos (headers) da resposta, sem o corpo do recurso. É útil para obter informações sobre um recurso, como metadados, sem transferir todo o conteúdo.
- OPTIONS: O método OPTIONS é usado para obter informações sobre as opções de comunicação disponíveis para um recurso ou servidor. Ele retorna os métodos HTTP permitidos para um determinado recurso.
- CONNECT: O método CONNECT é usado para criar uma conexão de rede direta com um recurso, geralmente através de um proxy. É menos comum e é frequentemente utilizado para estabelecer túneis SSL/TLS.
- TRACE: O método TRACE é usado principalmente para fins de diagnóstico. Ele solicita ao servidor que retorne uma mensagem de depuração contendo informações sobre a rota que a requisição fez até o servidor. No entanto, seu uso é limitado devido a preocupações com segurança.
- OPTIONS: O método OPTIONS é usado para solicitar informações sobre os métodos HTTP permitidos para um determinado recurso. Isso ajuda os clientes a entenderem quais operações podem ser realizadas no recurso.
Lista com códigos de status do response
- 1xx (Informações):
- 100 - Continue
- 101 - Mudando Protocolos (Switching Protocols)
- 2xx (Sucesso):
- 200 - OK
- 201 - Criado (Created)
- 202 - Aceito (Accepted)
- 204 - Sem Conteúdo (No Content)
- 206 - Conteúdo Parcial (Partial Content)
- 3xx (Redirecionamento):
- 300 - Múltipla Escolha (Multiple Choices)
- 301 - Movido Permanentemente (Moved Permanently)
- 302 - Encontrado (Found)
- 304 - Não Modificado (Not Modified)
- 307 - Redirecionamento Temporário (Temporary Redirect)
- 308 - Redirecionamento Permanente (Permanent Redirect)
- 4xx (Erro do Cliente):
- 400 - Requisição Inválida (Bad Request)
- 401 - Não Autorizado (Unauthorized)
- 403 - Proibido (Forbidden)
- 404 - Não Encontrado (Not Found)
- 405 - Método Não Permitido (Method Not Allowed)
- 408 - Tempo Limite de Requisição Excedido (Request Timeout)
- 429 - Taxa Limite de Solicitação Excedida (Too Many Requests)
- 5xx (Erro do Servidor):
- 500 - Erro Interno do Servidor (Internal Server Error)
- 501 - Não Implementado (Not Implemented)
- 502 - Gateway Inválido (Bad Gateway)
- 503 - Serviço Indisponível (Service Unavailable)
- 504 - Tempo Limite de Gateway Excedido (Gateway Timeout)
- 505 - Versão HTTP não suportada (HTTP Version Not Supported)
Problema que o django resolve: