<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: celo</title>
    <description>The latest articles on DEV Community by celo (@uminocelo).</description>
    <link>https://dev.to/uminocelo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F344968%2F07e6a5f1-c53a-41ba-bb7a-2cb0a4fcd770.jpg</url>
      <title>DEV Community: celo</title>
      <link>https://dev.to/uminocelo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/uminocelo"/>
    <language>en</language>
    <item>
      <title>O nosso amiguinho HTTP</title>
      <dc:creator>celo</dc:creator>
      <pubDate>Thu, 01 Jun 2023 21:20:19 +0000</pubDate>
      <link>https://dev.to/uminocelo/o-nosso-amiguinho-http-42b9</link>
      <guid>https://dev.to/uminocelo/o-nosso-amiguinho-http-42b9</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;O HTTP se tornou a base para a comunicação da internet. Neste post, vou escrever um pouquinho do que aprendi sobre o assunto. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;O &lt;strong&gt;Hypertext Transfer Protocol (HTTP)&lt;/strong&gt; é um dos protocolos disponíveis na camada de aplicação, que não possui estado e foi projetado para sistemas distribuídos e colaborativos.&lt;/p&gt;

&lt;p&gt;Sua estrutura foi feita olhando para os protocolos da Internet, permitindo que elementos de redes aprimorem ou habilitem suas comunicações entre cliente e servidor, esse modelo de comunicação é chamado de 'client-server'.&lt;/p&gt;

&lt;p&gt;Essa comunicação entre &lt;code&gt;cliente&lt;/code&gt; e &lt;code&gt;servidor&lt;/code&gt; é feita a partir da implementação de outro protocolo conhecido como &lt;code&gt;request-response&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Requisitando informações do servidor
&lt;/h2&gt;

&lt;p&gt;Um &lt;code&gt;request&lt;/code&gt; ou &lt;code&gt;requisição&lt;/code&gt; é uma mensagem enviada pelo cliente para um servidor em busca de um recurso específico.&lt;/p&gt;

&lt;p&gt;A requisição é formada de várias informações para que o servidor consiga entender a solicitação e assim responder com os dados solicitados. &lt;/p&gt;

&lt;p&gt;Essas informações são conhecidas como: métodos da requisição, corpos da requisição (opcionais), URL ou URI e cabeçalho.&lt;/p&gt;

&lt;h3&gt;
  
  
  O que o servidor precisa fazer ?
&lt;/h3&gt;

&lt;p&gt;Os métodos ou verbos da requisição indicam qual ação o servidor deve realizar para responder adequadamente. E estes são os métodos utilizados: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;GET:&lt;/strong&gt; solicita a recuperação de informações do recurso especificado pela &lt;strong&gt;URL&lt;/strong&gt; no servidor;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;HEAD:&lt;/strong&gt; semelhante ao &lt;strong&gt;GET&lt;/strong&gt;, mas solicita apenas os cabeçalhos da resposta, sem o corpo da mensagem;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;POST:&lt;/strong&gt; envia dados ao servidor para criar um novo recurso;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;PUT:&lt;/strong&gt; envia dados ao servidor para atualizar ou substituir um recurso já existente na URL especificada;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;DELETE:&lt;/strong&gt; solicita a exclusão permanente de um recurso específico no servidor;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;CONNECT:&lt;/strong&gt; estabelece uma conexão de túnel com o servidor;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;OPTIONS:&lt;/strong&gt; obtém as opções de comunicação permitidas para um recurso específico no servidor;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;TRACE:&lt;/strong&gt; usado para diagnosticar problemas de rede;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;PATCH:&lt;/strong&gt; envia apenas as alterações para que modificações parciais sejam aplicadas no recurso;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Falarei um pouco mais sobre cada um dos métodos HTTP em outro post sobre &lt;strong&gt;APIs&lt;/strong&gt; 💫 🚀.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enviando informações para o servidor
&lt;/h3&gt;

&lt;p&gt;Apesar de ser opcional, o corpo da requisição é bem utilizado nos métodos &lt;strong&gt;POST&lt;/strong&gt;, &lt;strong&gt;PUT&lt;/strong&gt; e &lt;strong&gt;PATCH&lt;/strong&gt; e indica as informações adicionais enviadas pelo cliente para recursos específicos no servidor.&lt;/p&gt;

&lt;p&gt;Essas informações podem ser enviadas como texto, JSON, XML e até mesmo binários. Tanto o formato quanto a estrutura a serem enviados dependem do tipo de conteúdo e do acordo entre cliente e servidor.&lt;/p&gt;

&lt;p&gt;Para indicar o formato do corpo na requisição, podemos incluir no cabeçalho o seguinte valor:  &lt;code&gt;Content-Type&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Por exemplo:&lt;br&gt;
&lt;code&gt;Content-Type: application/json&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Nesses exemplos, estamos indicando que o corpo da requisição será no formato &lt;strong&gt;JSON&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Iguais, mas diferentes: URL e URI
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F62srod5awh1jllrbsj7x.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F62srod5awh1jllrbsj7x.gif" alt="same_but_different" width="498" height="208"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O destino de uma requisição &lt;strong&gt;HTTP&lt;/strong&gt; é chamado de &lt;strong&gt;recurso&lt;/strong&gt;, e estes podem ser identificados como &lt;strong&gt;URIs&lt;/strong&gt; ou &lt;strong&gt;URLs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;O termo &lt;strong&gt;URI&lt;/strong&gt; ou &lt;strong&gt;Uniform Resource Identifier&lt;/strong&gt; engloba as &lt;strong&gt;URLs&lt;/strong&gt; e é definido como uma sequência única de caracteres que identifica um recurso lógico ou físico, podendo ser usado para identificar qualquer coisa.&lt;/p&gt;

&lt;p&gt;Por exemplo:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;https://www.exemplo.com.br/recurso?parametro=valor&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Vale lembrar que a estrutura das &lt;strong&gt;URIs&lt;/strong&gt; pode variar dependendo do contexto.&lt;/p&gt;

&lt;p&gt;Por sua vez, uma &lt;strong&gt;URL&lt;/strong&gt; ou &lt;strong&gt;Uniform Resource Locator&lt;/strong&gt; é uma forma específica de &lt;strong&gt;URI&lt;/strong&gt; para referenciar um recurso de maneira precisa, contendo as informações necessárias para localização e recuperação na rede.&lt;/p&gt;

&lt;p&gt;Por exemplo:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;https://meu-site-exemplo.com.br/index.html&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Como podemos ver, a URL possui o protocolo, domínio e caminho do recurso específico.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conhecendo o HTTP header
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Assim como a armadura do Homem de Ferro, os cabeçalhos HTTP possuem diferentes módulos e funcionalidades, pois ambos são componentes vitais que permitem a comunicação e fornecem recursos específicos.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqph.cf2.quoracdn.net%2Fmain-qimg-4e394f8859704027beff50abe8d70b18" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqph.cf2.quoracdn.net%2Fmain-qimg-4e394f8859704027beff50abe8d70b18" alt="Iron Man with his Modular Armor" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Um dos componentes essenciais para as solicitações e respostas do protocolo HTTP são os cabeçalhos ou Headers.&lt;/p&gt;

&lt;p&gt;Projetado para ter várias responsabilidades e conter diversas informações relacionadas a diferentes aspectos da comunicação 'client-server', os cabeçalhos têm como característica principal a extensibilidade, que permite definir novos cabeçalhos para atender os novos requisitos. &lt;/p&gt;

&lt;p&gt;Aqui tem uma listinha de algumas responsabilidades que um cabeçalho pode ter:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Controle de cache.&lt;/li&gt;
&lt;li&gt; Autenticação e segurança.&lt;/li&gt;
&lt;li&gt; Negociação de conteúdo.&lt;/li&gt;
&lt;li&gt; Controle de redirecionamento.&lt;/li&gt;
&lt;li&gt; Controle de codificação.&lt;/li&gt;
&lt;li&gt; Controle de conexão.&lt;/li&gt;
&lt;li&gt; Controle de tipo de conteúdo.&lt;/li&gt;
&lt;li&gt; Controle de compressão.&lt;/li&gt;
&lt;li&gt; Controle de acesso.&lt;/li&gt;
&lt;li&gt; Rastreamento e análise.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Além dos citados acima, também temos muitos outros disponíveis e cada um com sua função específica para que a comunicação seja eficiente e segura.&lt;/p&gt;

&lt;h2&gt;
  
  
  Respondendo a requisição do cliente
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Anotações breves sobre respostas HTTP e seus principais elementos.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A resposta HTTP é enviada pelo servidor para o cliente, assim completando o ciclo &lt;code&gt;request-response&lt;/code&gt; proposto pelo protocolo &lt;strong&gt;HTTP&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Assim como as requisições, as respostas também podem adicionar cabeçalhos, como &lt;code&gt;Content-Type&lt;/code&gt;, &lt;code&gt;Last-Modified&lt;/code&gt; e muitos outros.&lt;/p&gt;

&lt;p&gt;Além dos cabeçalhos, temos outro componente muito importante: o &lt;strong&gt;&lt;code&gt;status code&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;O &lt;code&gt;status code&lt;/code&gt; possui cinco classes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  1xx - Informativa&lt;/li&gt;
&lt;li&gt;  2xx - Sucesso&lt;/li&gt;
&lt;li&gt;  3xx - Redirecionamento&lt;/li&gt;
&lt;li&gt;  4xx - Erro do lado do cliente&lt;/li&gt;
&lt;li&gt;  5xx - Erro do lado do servidor&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O &lt;code&gt;status code&lt;/code&gt; permite que o servidor se comunique com o cliente de forma padronizada sobre o resultado da requisição. Também indica se a requisição foi bem-sucedida, se ocorreu algum problema ou se são necessárias ações adicionais. Portanto, o &lt;code&gt;status code&lt;/code&gt; torna-se uma ferramenta importante para o tratamento de erros e permite que o cliente identifique e lide com diferentes situações de falha de forma apropriada.&lt;/p&gt;

&lt;h2&gt;
  
  
  Alô, quem tá falando ?
&lt;/h2&gt;

&lt;p&gt;O DNS ou Domain Name System é um sistema de nomenclatura, funciona de forma hierárquica e distribuída para qualquer recurso na internet ou em outras redes. &lt;/p&gt;

&lt;p&gt;Sua responsabilidade é converter nomes de domínios legíveis para humanos (&lt;a href="http://www.exemplo.com.br/" rel="noopener noreferrer"&gt;www.exemplo.com.br&lt;/a&gt;) em endereços IP (192.168.0.2), que são legíveis para máquinas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Construindo um ambiente seguro
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Precisamos de mais segurança na hora de enviar informações entre o &lt;code&gt;cliente&lt;/code&gt; e &lt;code&gt;servidor&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Com o crescimento da internet e o aumento das transações online, tornou-se evidente que a segurança era uma questão vital. Houve a necessidade de proteger informações sensíveis, como senhas, informações bancárias e outros detalhes pessoais, durante a conversa entre os clientes e os servidores. E para atender a essa demanda, o &lt;strong&gt;HTTPS&lt;/strong&gt; surgiu.&lt;/p&gt;

&lt;p&gt;O &lt;strong&gt;HTTPS&lt;/strong&gt; utiliza uma camada de segurança que realiza a criptografia dos dados transmitidos através dos protocolos &lt;strong&gt;SSL&lt;/strong&gt; ou &lt;strong&gt;TLS&lt;/strong&gt;, tornando os dados ilegíveis para quem tenta interceptá-los.&lt;/p&gt;

&lt;p&gt;Além dessa camada de segurança, o &lt;strong&gt;HTTPS&lt;/strong&gt; possui um mecanismo de autenticação para verificar a fidelidade do servidor, evitando ataques como: phishing, man-in-the-middle, injeção de conteúdos maliciosos e outros.&lt;/p&gt;

&lt;h2&gt;
  
  
  Todo pokémon evolui
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Um pouquinho sobre as versões do HTTP ao longo do tempo: &lt;code&gt;HTTP/1.1&lt;/code&gt;, &lt;code&gt;HTTP/2&lt;/code&gt; e &lt;code&gt;HTTP/3&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;O &lt;strong&gt;HTTP&lt;/strong&gt; recebeu sua primeira revisão e foi nomeado como &lt;strong&gt;HTTP/1.1&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;O &lt;strong&gt;HTTP/1.1&lt;/strong&gt; foi pensado como um protocolo em que as mensagens são enviadas no formato de texto e também introduziu diversas funcionalidades, como conexões persistentes, pipelining, chunked transfer encoding e cabeçalho do host.&lt;/p&gt;

&lt;p&gt;Mesmo com todas as inovações apresentadas pelo &lt;strong&gt;HTTP/1.1&lt;/strong&gt;, com o passar do tempo surgiram novas necessidades e então o &lt;strong&gt;HTTP/2&lt;/strong&gt; apareceu.&lt;/p&gt;

&lt;p&gt;Esta versão foi desenvolvida pensando em melhorar a performance da web e superar as limitações de sua versão anterior. Com isso, o novo protocolo &lt;strong&gt;HTTP&lt;/strong&gt; introduziu o formato binário, a multiplexação, o server push, compressão de headers e a priorização de requisições.&lt;/p&gt;

&lt;p&gt;O &lt;strong&gt;HTTP/2&lt;/strong&gt; apresentou uma melhoria muito significativa em relação à versão anterior e foi amplamente adotado por servidores e navegadores.&lt;/p&gt;

&lt;p&gt;Contudo, uma nova versão foi apresentada ao mundo: o &lt;strong&gt;HTTP/3&lt;/strong&gt;, originalmente chamado de &lt;strong&gt;HTTP-over-QUIC&lt;/strong&gt;. Esta versão possui redução de latência, priorização de stream e multiplexação, melhorias em segurança e também foi construída para lidar com a mudança de rede de forma eficiente e permitir rápida adaptação a diferentes condições de rede.&lt;/p&gt;

&lt;h3&gt;
  
  
  QUIC, quem é esse pokémon ?
&lt;/h3&gt;

&lt;p&gt;Você deve ter notado que no nome original do &lt;strong&gt;HTTP/3&lt;/strong&gt; uma nova palavrinha foi introduzida, o &lt;strong&gt;QUIC&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Desenvolvido pelo Google em 2012, o QUIC foi projetado para uso pesado da internet móvel, no qual as pessoas carregam smartphones que mudam constantemente de uma rede para outra à medida que se movem durante o dia. Assim, o QUIC depende do protocolo UDP e não do TCP. Essa dependência faz com que as conexões sejam mais rápidas, resultando em uma experiência melhor para o usuário final.&lt;/p&gt;

&lt;h2&gt;
  
  
  No fim do dia...
&lt;/h2&gt;

&lt;p&gt;Aprendi a importância do HTTP e como ele impacta a internet.&lt;/p&gt;

&lt;p&gt;Também achei várias coisinhas interessantes no meio do caminho, principalmente sobre headers, versões do HTTP, segurança, sessions, cookies e criptografia. Planejo escrever sobre alguns destes assuntos no futuro também.&lt;/p&gt;

&lt;p&gt;Espero que te ajude ou pelo menos estimule você a procurar mais sobre o HTTP e assuntos ligados a ele. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp6dfk9jv8jwi95ab4bxj.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp6dfk9jv8jwi95ab4bxj.gif" alt="bob esponja saindo de fininho" width="500" height="323"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Me siga no &lt;a href="https://twitter.com/uminocelo" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;, &lt;a href="https://github.com/uminocelo" rel="noopener noreferrer"&gt;Github&lt;/a&gt; ou &lt;a href="https://www.linkedin.com/in/marcelo-muniz-da-luz/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; para acompanhar minhas aventuras no mundo tech 💫.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;p.s: todo feedback é bem vindo!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>beginners</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
