CodeGym /Blogue Java /Random-PT /Parte 3. HTTP/HTTPS
John Squirrels
Nível 41
San Francisco

Parte 3. HTTP/HTTPS

Publicado no grupo Random-PT
Este material faz parte da série "Introdução ao Desenvolvimento Corporativo". Artigos anteriores: Parte 3. HTTP/HTTPS - 1Oi! Hoje vamos aprender sobre os protocolos HTTP e HTTPS. Mas primeiro vamos esclarecer um ponto: estamos falando de protocolos para envio de dados por uma rede no nível de aplicativo do modelo OSI. Você deve se lembrar que conhecemos o modelo OSI em um dos artigos anteriores. Se você não se lembra disso, aqui está .

O que é um protocolo de comunicação de dados?

É o que chamamos de conjunto de regras acordado que permite que desenvolvedores de diferentes serviços enviem informações em um formato que outros possam entender. Por exemplo, você pode usar o Google Chrome para obter informações do Facebook e do Twitter, porque os desenvolvedores as enviam usando o protocolo HTTP padrão, que permite que seu navegador as processe. Regras uniformes são muito convenientes para o pessoal que desenvolve a parte do servidor: há muitas bibliotecas que podem converter informações para você e enviá-las usando o protocolo apropriado. O HTTP foi inicialmente concebido como um protocolo para envio de páginas HTML. Foi assim que foi usado por muito tempo, mas agora os programadores costumam usá-lo para enviar strings e arquivos de mídia. Em geral, esse protocolo é universalmente aceito e versátil, além de ser muito fácil de usar. E agora vamos investigar como usá-lo.

A estrutura do HTTP

Devemos notar desde já que o protocolo HTTP consiste apenas em texto. O que mais nos interessa é a estrutura deste texto. Cada mensagem consiste em três partes:
  1. Linha de partida — Isso define alguns dados de limpeza.
  2. Cabeçalhos — Estes descrevem os parâmetros da mensagem.
  3. Corpo — Este é o conteúdo da mensagem. O corpo deve ser separado dos cabeçalhos por uma linha em branco.
O protocolo HTTP é usado para enviar solicitações a um servidor e receber respostas do servidor. Os parâmetros de solicitações e respostas são ligeiramente diferentes.

Veja como é uma solicitação HTTP simples:


GET / HTTP/1.1
Host: codegym.cc
User-Agent: firefox/5.0 (Linux; Debian 5.0.8; en-US; rv:1.8.1.7)
A linha de partida indica:
  • GET — O método da solicitação
  • / — O caminho da solicitação
  • HTTP/1.1 — A versão do protocolo
Em seguida, vêm os cabeçalhos:
  • Host — O host ao qual a solicitação é endereçada
  • User-Agent — O cliente que envia a solicitação
O corpo da mensagem está ausente. Em uma solicitação HTTP, apenas a linha inicial e o cabeçalho "Host" são necessários. Agora vamos ver tudo um passo de cada vez. Uma solicitação HTTP deve conter algum método. Existem nove deles: GET, POST, PUT, OPTIONS, HEAD, PATCH, DELETE, TRACE, CONNECT. Os mais comuns são GET e POST. Esses dois métodos serão suficientes no início. GET — Este método solicita conteúdo do servidor. Assim, as requisições com o método GET não possuem corpo de mensagem. Mas se precisar, você pode passar parâmetros pelo caminho (na linha de partida) no seguinte formato:

https://cdn.codegym.cc/images/article/155cea79-acfd-4968-9361-ad585e939b82/original.pngsend?name1=value1&name2=value2
onde codegym.cc é o host, /send é o caminho da solicitação e ? é um separador que indica que os parâmetros de consulta seguem. No final, os pares chave-valor ("chave=valor") são listados, separados por um e comercial. POST — Este método publica informações no servidor. Uma solicitação POST pode enviar vários tipos de informações: parâmetros como pares "chave=valor", JSON, código HTML ou até mesmo arquivos. Todas as informações são enviadas no corpo da mensagem. Por exemplo:

POST /user/create/json HTTP/1.1
Accept: application/json
Content-Type: application/json
Content-Length: 28
Host: codegym.cc

{
  "Id": 12345,
  "User": "John"
}
A solicitação é enviada para codegym.cc/user/create/json e a versão do protocolo é HTTP/1.1. "Aceitar" indica o formato de resposta que o cliente espera receber. "Content-Type" indica o formato do corpo da mensagem enviada na solicitação. "Content-Length" é o número de caracteres no corpo. Uma solicitação HTTP pode conter muitos cabeçalhos diferentes. Para mais informações, dê uma olhada na especificação do protocolo .

respostas HTTP

Depois de receber uma solicitação, o servidor a processa e envia uma resposta ao cliente:

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 98

<html>
  <head>
    <title>An Example Page</title>
  </head>
  <body>
    <p>Hello World</p>
  </body>
</html>
A linha inicial da resposta contém a versão do protocolo (HTTP/1.1), o código de status (200) e a descrição do status (OK). Seus cabeçalhos incluem o tipo e o comprimento do conteúdo. O corpo da resposta contém código HTML que o navegador renderiza como uma página HTML.

Códigos de status de resposta

Tudo está claro em relação ao corpo da mensagem e aos cabeçalhos, mas devemos dizer algumas palavras sobre os códigos de status. Os códigos de status de resposta são sempre três dígitos. O primeiro dígito do código indica a categoria da resposta:
  • 1xx — Informativo. O pedido foi recebido. O servidor está pronto para continuar.
  • 2xx — Sucesso. A solicitação foi recebida, compreendida e processada.
  • 3xx — Redirecionamento. Ações adicionais devem ser executadas para processar a solicitação.
  • 4xx — Erro do cliente. A solicitação contém erros ou não está de acordo com o protocolo.
  • 5xx — Erro do servidor. A solicitação foi composta corretamente, mas o servidor não pôde processá-la.
O segundo e terceiro dígitos no código indicam uma resposta mais específica. Por exemplo:
  • 200 OK — A solicitação foi recebida e processada com sucesso.
  • 201 Created — A solicitação foi recebida e processada com sucesso, resultando na criação de um novo recurso ou instância.
  • 301 Moved Permanently — O recurso solicitado foi movido permanentemente. As solicitações subsequentes devem ser feitas usando o novo endereço.
  • 307 Redirecionamento temporário — O recurso foi movido temporariamente. Por enquanto, ele pode ser acessado usando o encaminhamento automático.
  • 403 Proibido — A solicitação foi compreendida, mas é necessária autorização.
  • 404 Not Found — O servidor não encontrou o recurso neste endereço.
  • 501 Not Implemented — O servidor não oferece suporte à funcionalidade necessária para responder à solicitação.
  • 505 HTTP Version Not Supported — O servidor não suporta a versão especificada do protocolo HTTP.
Além do código de status de resposta, uma descrição de status também é enviada. Isso ajuda a esclarecer o que cada status específico significa. O protocolo HTTP é muito prático: ele fornece um grande número de cabeçalhos, que você pode usar para organizar uma comunicação muito flexível entre um cliente e um servidor. Uma consideração completa de todos os cabeçalhos de solicitação e resposta, métodos de solicitação e códigos de status de resposta seria demais para um único artigo. Se precisar, você pode ler a especificação oficial do protocolo, que descreve todas as nuances. É comum usar o protocolo HTTP na porta 80, portanto, quando você vir uma URL que termina na porta 80, pode ter certeza de que precisa usar HTTP para acessá-la. À medida que a tecnologia evoluiu e os dados pessoais começaram a ser enviados pela Internet, tornou-se necessário pensar em como fornecer proteção adicional para as informações que o cliente envia ao servidor. O resultado desse pensamento foi o protocolo HTTPS.

A diferença entre HTTPS e HTTP

Em termos de sintaxe, o HTTPS é idêntico ao protocolo HTTP. Ou seja, ele usa as mesmas linhas iniciais e cabeçalhos. As únicas diferenças são a criptografia adicional e a porta padrão (443) . O HTTPS é criptografado entre HTTP e TCP, ou seja, entre as camadas de aplicação e transporte. Se você esqueceu o que isso significa, confira o artigo sobre o modelo OSI . O padrão de criptografia de hoje é o TLS. Não entraremos muito neste tópico, mas lembre-se de que a criptografia ocorre antes que as informações cheguem à camada de transporte. No HTTPS, absolutamente todas as informações são criptografadas, exceto o host e a porta para onde a solicitação é enviada. Mudar um servidor para usar o protocolo HTTPS em vez de HTTP não requer o uso para alterar o código do servidor. Esse recurso é ativado em contêineres de servlet, que discutiremos em artigos subsequentes. E isso é tudo por hoje. Na verdade, espere um momento. Para obter algumas solicitações HTTP, abra o Google Chrome, pressione F12 e selecione a guia "Rede". Todas as solicitações e respostas enviadas/recebidas pelo seu navegador serão exibidas aqui. Parte 4. Noções básicas do Maven Parte 5. Servlets e a API Java Servlet. Escrevendo um aplicativo Web simples Parte 6. Contêineres de servlet Parte 7. Apresentando o padrão MVC (Model-View-Controller)
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION