JavaRush /Blogue Java /Random-PT /Parte 3. Protocolos HTTP/HTTPS

Parte 3. Protocolos HTTP/HTTPS

Publicado no grupo Random-PT
Este material faz parte da série “Introdução ao Desenvolvimento Empresarial”. Artigos anteriores: Olá! Hoje entenderemos os protocolos HTTP e HTTPS. Mas primeiro vamos esclarecer um ponto: estamos falando de protocolos de transferência de dados pela rede na camada de aplicação do modelo OSI. Como você se lembra, discutimos o modelo OSI em um dos artigos anteriores. E se você não lembra, aqui está . Parte 3. Protocolos HTTP/HTTPS - 1

O que é um protocolo de transferência de dados

Este é o nome dado ao acordo geralmente aceito, graças ao qual desenvolvedores de diversos serviços enviam informações em um único formulário. Por exemplo, usando o Google Chrome, você pode obter informações do Facebook e do Twitter, porque os desenvolvedores as transmitem usando o protocolo HTTP padrão e seu navegador pode processá-las. As regras uniformes também são muito convenientes para os próprios desenvolvedores do lado do servidor: existem muitas bibliotecas que podem converter informações para você e enviá-las usando o protocolo necessário. O HTTP foi originalmente concebido como um protocolo para transferência de páginas HTML. Esse foi o caso por muito tempo, mas agora os programadores costumam transferir strings e arquivos de mídia por meio dele. No geral, este protocolo é versátil e flexível e muito fácil de usar. Agora vamos descobrir como fazer isso.

Estrutura HTTP

É importante notar imediatamente que o protocolo HTTP consiste apenas em texto. Bem, estamos mais interessados ​​na estrutura em que este texto está localizado. Cada mensagem consiste em três partes:
  1. Linha inicial — define os dados do serviço.
  2. Cabeçalhos – descrição dos parâmetros da mensagem.
  3. Corpo da mensagem (Body) - dados da mensagem. Devem ser separados dos títulos por uma linha em branco.
Usando o protocolo HTTP, você pode enviar uma solicitação ao servidor (solicitação) e receber uma resposta do servidor (resposta). Solicitações e respostas têm parâmetros ligeiramente diferentes.

Qual é a aparência de uma solicitação HTTP simples

GET / HTTP/1.1
Host: javarush.com
User-Agent: firefox/5.0 (Linux; Debian 5.0.8; en-US; rv:1.8.1.7)
A linha inicial contém:
  • GET - método de solicitação;
  • / — caminho de solicitação (caminho);
  • HTTP/1.1 – versão do protocolo de transferência de dados.
Depois vêm os títulos:
  • Host — o host ao qual a solicitação é endereçada;
  • User-Agent é o cliente que envia a solicitação.
Não há corpo de mensagem. Em uma solicitação HTTP, apenas a linha inicial e o cabeçalho Host são necessários. Agora vamos ver tudo em ordem. Uma solicitação HTTP deve conter algum método. São nove no total: 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 - solicita conteúdo do servidor. Portanto, solicitações com o método GET não possuem corpo de mensagem. Mas se necessário, você pode enviar parâmetros via caminho neste formato: https://cdn.javarush.com/images/article/155cea79-acfd-4968-9361-ad585e939b82/original.pngsend?name1=value1&name2=value2 Aqui: javarush .com — host, /send — caminho da solicitação, ? — um separador indicando que os parâmetros da solicitação seguem. No final, os parâmetros são listados no formato chave=valor, separados por um E comercial. POST - publica informações no servidor. Uma solicitação POST pode transferir diversas informações: parâmetros no formato chave=valor, JSON, código HTML ou até mesmo arquivos. Todas as informações são transmitidas no corpo da mensagem. Por exemplo:
POST /user/create/json HTTP/1.1
Accept: application/json
Content-Type: application/json
Content-Length: 28
Host: javarush.com

{
  "Id": 12345,
  "User": "John"
}
A solicitação é enviada para javarush.com/user/create/json, a versão do protocolo é HTTP/1.1. Accept especifica qual formato de resposta o cliente espera receber, Content-Type especifica em qual formato o corpo da mensagem é enviado. Content-Length - o número de caracteres no corpo. Uma solicitação HTTP pode conter muitos cabeçalhos diferentes. Mais detalhes podem ser encontrados na especificação do protocolo .

Respostas HTTP

Após receber a 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 na resposta contém a versão do protocolo (HTTP/1.1), Código de Status (200), Descrição do Status (OK). Os títulos indicam o tipo e a extensão do conteúdo. O corpo da resposta contém o código HTML que o navegador desenhará na página HTML.

Códigos de status de resposta

Tudo fica claro com o corpo e os cabeçalhos da mensagem, mas vale a pena dizer algumas palavras sobre os códigos de status. Os códigos de status de resposta têm sempre três dígitos e o primeiro dígito do código indica a categoria da resposta:
  • 1xx - informativo. A solicitação foi recebida, o servidor está pronto para continuar;
  • 2xx - bem sucedido. A solicitação foi recebida, compreendida e processada;
  • 3xx - redirecionamento. As seguintes etapas 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. O servidor não conseguiu processar a solicitação, embora ela tenha sido composta corretamente;
O segundo e terceiro dígitos do código detalham a resposta. Por exemplo:
  • 200 OK — a solicitação foi recebida e processada com sucesso;
  • 201 Criado — a solicitação foi recebida e processada com sucesso, resultando na criação de um novo recurso ou de sua instância;
  • 301 Movido Permanentemente - o recurso solicitado foi movido permanentemente e as solicitações subsequentes a ele deverão ocorrer no novo endereço;
  • 307 Redirecionamento Temporário - o recurso foi movido temporariamente. Por enquanto, você pode acessá-lo usando redirecionamento automático;
  • 403 Proibido – o pedido é claro, mas é necessária autorização;
  • 404 Not Found - o servidor não encontrou o recurso neste endereço;
  • 501 Não Implementado – o servidor não suporta funcionalidade para responder a esta solicitação;
  • 505 Versão HTTP não suportada - o servidor não suporta a versão especificada do protocolo HTTP.
Além do código de status da resposta, uma descrição do status também é enviada, tornando intuitivo entender o que significa um determinado status. O protocolo HTTP é muito prático: fornece um grande número de cabeçalhos, com os quais você pode configurar uma comunicação flexível entre o cliente e o servidor. Todos os cabeçalhos de solicitação e resposta, métodos de solicitação e códigos de status de resposta não podem ser considerados em um artigo. Se necessário, você pode ler a especificação oficial do protocolo , que descreve todas as nuances. O protocolo HTTP é normalmente usado na porta 80, portanto, quando você vir um endereço que termina na porta 80, pode ter certeza de que ele deve ser acessado via HTTP. Com o desenvolvimento da tecnologia e a movimentação ativa de dados pessoais na Internet, tivemos que pensar em como fornecer proteção adicional às informações que o cliente transmite ao servidor. O resultado foi o protocolo HTTPS.

Qual é a diferença entre HTTPS e HTTP

HTTPS é sintaticamente idêntico ao protocolo HTTP, ou seja, utiliza as mesmas linhas iniciais e cabeçalhos. As únicas diferenças são a criptografia adicional e a porta padrão (443) . HTTPS é criptografado entre HTTP e TCP, ou seja, entre as camadas de aplicação e transporte. Se você esqueceu o que é, dê uma olhada no artigo sobre o modelo OSI . O padrão de criptografia moderno é o TLS. Não iremos nos aprofundar muito neste tópico, mas lembre-se que a criptografia ocorre antes que a informação chegue à camada de transporte . HTTPS criptografa absolutamente todas as informações, exceto o host e a porta para a qual a solicitação é enviada. Para mudar o servidor para usar o protocolo HTTPS em vez de HTTP, não precisamos alterar o código do servidor. Esse recurso está habilitado em contêineres de servlet, sobre os quais falaremos nos artigos a seguir. Isso é tudo por hoje. No entanto, espere. Para detectar 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. Escrevendo um aplicativo Web simples Parte 6. Contêineres de servlet Parte 7. Apresentando o padrão MVC (Model-View-Controller) Parte 8. Escrevendo um pequeno aplicativo Spring-Boot
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION