Dia 15 [dando alguns passos para trás ] — parte 3 (comunicação)

Mi
Just Trying to develop
7 min readAug 23, 2017

Eae?!

Muito bem… no post anterior falei um pouco sobre protocolos e sobre o nosso amigo HTTP. Hoje vamos continuar falando sobre HTTP, entrando um pouco no detalhe dos métodos, exemplos de utilização, exemplos de códigos e etc.

Abiguinhos não se esqueçam que tudo que está aqui tem sua fonte de pesquisa e estou escrevendo o meu entendimento (e se vocês lerem aqui alguma coisa errada ou bizarra, significa que eu posso ter entendido errado, okie?)

Antes de entrar em cada um dos métodos com uma explicação um tico melhor, eu queria voltar numa coisinha que não falamos no post anterior: cabeçalhos.

“Mas nossa Mi, porque eles são importantes?”

A minha resposta há 5 minutos atrás: Não faço ideia! Então fui até o nosso amigo google (e junto com ele, sempre o livro do Forouzan), e pesquisei:

“para que serve o cabeçalho nas requisições http”

E logo de cara (na verdade era o segundo link) achei um texto bem esclarecedor: HTTP Headers — o cabeçalho oculto (disponível em http://www.marketingdebusca.com.br/http-headers-o-cabecalho-oculto, acessado dia 21/08/2017). Ao longo tem todo o lance de requisições e respostas mas o começo dele me abriu a cabeça para começar a entender “para que serve o cabeçalho”;

Muito bem… quando usamos uma aplicação web (exemplo: a página do seu blog) existem uma infinidade de processos até que finalmente sua página seja totalmente carregada. Tudo que tem na página da aplicação que você está usando está de alguma forma fazendo uma requisição ao seu servidor para carregar uma imagem, um CSS e tooodo o resto. Isso é feito através do nosso muso da vez, o HTTP.

E olhem que maravilha: os motores de busca usam o mesmo protocolo para se comunicar com outros sites, para varrê-los etc.

“E onde o cabeçalho entra??

Simples! O cabeçalho das solicitações e respostas fornece essas informações adicionais! Elas não são o principal das trocas de dados entre cliente e servidor, mas fornecem detalhes importantes! O cliente, por exemplo, pode querer que o servidor envie as informações, documentos em um determinado tipo de codificação, com um formato especial; ou ainda o servidor pode quer enviar informações adicionais. E essas informações têm uma classificação:

  • Cabeçalho geral: fornece informações gerais sobre a troca de dados, podendo aparecer tanto na requisição quanto na resposta.
  • Cabeçalho de solicitação: está disponível somente para requisições e traz as configurações do cliente e preferências dele, como formato do documento que ele vai receber.
  • Cabeçalho de resposta: está disponível apenas para resposta e traz as configurações do servidor, informações sobre a requisição entre outras coisas.

Quando estivermos nos exemplos vou comentar sobre as informações dos cabeçalhos e vai ficar mais fácil :)

Mas e aí, vamos aos métodos??

Vamooooos!!! :)

No Tutorials point tem uma explicação bacana e exemplos dos métodos com seus respectivos cabeçalhos. Numerei linha a linha para comentar:

1) GET

O GET é o famosíssimo! Ele devolve dados do servidor especificando parâmetros na URL da solicitação e é o principal método usado na recuperação de documentos (por documento, entenda qualquer coisa RYSOS). No exemplo abaixo, vamos enviar uma solicitação para capturar a página hello.htm

1) GET /hello.htm HTTP/1.1
2) User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
3) Host: www.tutorialspoint.com
4) Accept-Language: en-us
5) Accept-Encoding: gzip, deflate
6) Connection: Keep-Alive

Traduzindo essa requisição GET para não techinês:

1) Vai buscar o arquivo /hello.html, usando o protocolo HTTP/1.1
2) Você está usando o browser Mozilla/4.0 'no seu cliente' (mas sua aplicação é compatível com MSIE5.01; Windows NT [fiquei na dúvida sobre esse item]
3) Seu servidor está na URL: www.tutorialspoint.com
4) Seu cliente aceita a linguagem: en-us
5) Seu cliente aceita os seguintes tipo de codificação: gzip, deflate
6) a conexão com o servidor será persistente: Keep-Alive

O “documento” solicitado é esse aqui:

<html>
<body>
<h1>Hello, World!</h1>
</body>
</html>

E a resposta foi:

1) HTTP/1.1 200 OK
2) Date: Mon, 27 Jul 2009 12:28:53 GMT
3) Server: Apache/2.2.14 (Win32)
4) Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
5) ETag: "34aa387-d-1568eb00"
6) Vary: Authorization,Accept
7) Accept-Ranges: bytes
8) Content-Length: 88
9) Content-Type: text/html
10) Connection: Closed

Traduzindo essa resposta à requisição GET para não techinês:

1) O status da sua conexão usando o protocolo HTTP/1.1 foi: 200 OK
2) A data da sua conexão foi: Mon, 27 Jul 2009 12:28:53 GMT
3) O servidor da sua aplicação é um: Apache/2.2.14 (Win32)
4) Seu cliente só aceita a linguagem: en-us
5) Foi modificado pela ultima vez: Wed, 22 Jul 2009 19:15:56 GMT
6) NÃO ENTENDI
7) Seu servidor aceita o intervalo solicitado pelo cliente (NAO ENTENDI)
8) O tamanho do documento que você solicitou é: 88
9) O tipo do documento que você solicitou é: text/html
10) A conexão da sua requisição está: closed

2) POST

Outro método famoso do nosso muso, e é usado quando você quer mandar dados para o servidor (por exemplo: uma atualização de um arquivo, dados de um formulário, um post do seu blog RYSOS). O exemplo abaixo usa o método POST para enviar dados de um formulário para o servidor, que serão processados através um processo chamado process.cgi, e depois retornará uma resposta para o cliente:

1) POST /cgi-bin/process.cgi HTTP/1.1
2) User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
3) Host: www.tutorialspoint.com
4) Content-Type: text/xml; charset=utf-8
5) Content-Length: 88
6) Accept-Language: en-us
7) Accept-Encoding: gzip, deflate
8) Connection: Keep-Alive

Traduzindo essa requisição GET para não techinês:

1) Envie os dados usando o protocolo: HTTP/1.1 e o processo /cgi-bin/process.cgi
2) Você está usando o browser Mozilla/4.0 (...)
3) Seu servidor está na URL:
www.tutorialspoint.com (...)
4) O tipo do documento que você enviou é: text/xml codificação uft-8
5) O tamanho do documento que você enviou é: 88
6) Seu cliente aceita a linguagem: en-us
7) Seu cliente aceita os seguintes tipo de codificação: gzip, deflate
8) A conexão com o servidor será persistente: Keep-Alive

O “documento” enviado é esse aqui:

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://clearforest.com/">string</string>

Depois que o servidor processar o script com os dados informados, ele enviará a resposta abaixo:

1) HTTP/1.1 200 OK
2) Date: Mon, 27 Jul 2009 12:28:53 GMT
3) Server: Apache/2.2.14 (Win32)
4) Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
5) ETag: "34aa387-d-1568eb00"
6) Vary: Authorization,Accept
7) Accept-Ranges: bytes
8) Content-Length: 88
9) Content-Type: text/html
10) Connection: Closed

Traduzindo essa resposta à requisição POST para não techinês:

1) O status da sua conexão usando o protocolo HTTP/1.1 foi: 200 OK
2) A data da sua conexão foi: Mon, 27 Jul 2009 12:28:53 GMT
3) O servidor da sua aplicação é um: Apache/2.2.14 (Win32)
4) Foi modificado pela ultima vez: Wed, 22 Jul 2009 19:15:56 GMT
5) A tag de entidade é "34aa387-d-1568eb00" [não entendi RYSOS]
6) NÃO ENTENDI
7) Seu servidor aceita o intervalo bytes [NAO ENTENDI]
8) O tamanho do documento que você solicitou é: 88
9) O tipo do documento que você solicitou é: text/html
10) A conexão da sua requisição está: closed

3) PUT

O PUT é usado para dizer ao servidor: ei, você aí, guarda esse “carinha” que eu estou te mandando nessa localização? (a localização é a URL informada). O exemplo abaixo é exatamente isso… uma solicitação para armazenar o documento hello.htm na pasta raiz do servidor:

1) PUT /hello.htm HTTP/1.1
2) User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
3) Host: www.tutorialspoint.com
4) Accept-Language: en-us
5) Connection: Keep-Alive
6) Content-type: text/html
7) Content-Length: 182

Traduzindo essa requisição GET para não techinês:

1) Guarde na sua raiz o documento /hello.htm usando o protocolo HTTP/1.1
2) (...) vocês viram que o resto tá repetido né?! RYSOS

O “documento” enviado foi esse aqui:

<html>
<body>
<h1>Hello, World!</h1>
</body>
</html>

O servidor vai guardar o documento enviado, retornará isso aqui ó:

1) HTTP/1.1 201 Created
2) Date: Mon, 27 Jul 2009 12:28:53 GMT
3) Server: Apache/2.2.14 (Win32)
4) Content-type: text/html
5) Content-length: 30
6) Connection: Closed

Traduzindo essa resposta à requisição PUT para não techinês:

1) O status da sua conexão usando o protocolo HTTP/1.1 foi: 201 CREATED
2) A data da sua conexão foi:
Mon, 27 Jul 2009 12:28:53 GMT
...) bla bla bla tá repetido

Pelo que li aqui, o que seria o próximo item — 4) DELETE — funciona da mesma forma que o PUT, mas faz o oposto.

5) CONNECT

É usado pelo lado client para estabelecer uma conexão com o servidor web, usando é claro o nosso muso HTTP. Neste exemplo, o cliente solicita uma conexão com o servidor host do tutorials point:

CONNECT www.tutorialspoint.com HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)

Aqui não tem muito o que traduzir né gente?! RYSOS

A conexão foi estabelecida e a resposta foi:

HTTP/1.1 200 Connection established
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)

Aqui também não tem muito o que traduzir porque o cabeçalho tá igual ao dos exemplos anteriores…

6) OPTIONS

É usado para descobrir, pasmem, quais são os métodos HTTP suportados pelo server, e outras opções. Quando o comando enviado é OPTIONS *, sãrificadas todas as opções do servidor. Exemplo:

OPTIONS * HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)

E a resposta foi:

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Allow: GET,HEAD,POST,OPTIONS,TRACE
Content-Type: httpd/unix-directory

7) TRACE

É usado para ‘refletir’ (fazer um eco) uma requisição de volta para o solicitante. Esse tipo de método é usado para debug em tempo de desenvolvimento. Exemplo:

TRACE / HTTP/1.1
Host: www.tutorialspoint.com
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)

E a resposta foi:

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Connection: close
Content-Type: message/http
Content-Length: 39

TRACE / HTTP/1.1
Host: www.tutorialspoint.com
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)

Existe ainda o método HEAD, o qual eu acabei nem citando aqui porque sinceramente não vi muita diferença em usa-lo ao invés de usar o GET… caso alguém saiba de alguma, por favor, me avise para eu corrigir no texto RYSOS.

Depois de 3 noites, finalmente consegui ter um entendimento breve os métodos YAYH! :)

No próximo post vamos continuar falando de comunicação web, mas agora entrando em um detalhe que eu nem sabia que era tão importante: sockets e portas! :-o

Arrivederci!

Mi

--

--

Mi
Just Trying to develop

Big data enthusiastic, studying new technologies by myself. Passionate about Italy, languages, concerts, games, sitcoms, movies, coffee, cartoons, karaoke, etc.