"Olá, amigo!"

"Oi, Bilaabo!"

"Que novidade você vai me contar hoje?"

"Muitas coisas. Mas, para começar, acho que vamos discutir como trabalhar com uma rede e a Internet. Interessado?"

"Sim. A Internet Galáctica é super legal."

"Tudo bem, mas vamos começar com um pouco de história. No início do século 21, a situação era esta..."

"Cada computador conectado à Internet tinha um número único. Este era um número comum de 4 bytes. Chama-se endereço IP."

“Mas os humanos têm memória fraca e lutam para se lembrar de algo como 2108458776, então eles costumam escrever cada byte separadamente”.

"Se dividirmos o número de quatro bytes 2108458776 em bytes separados, obteremos 125.172.135.24. Como você deve se lembrar, cada byte consiste em 8 bits e pode conter números de 0 a 255."

"Então, é assim que estamos escrevendo o número?"

"Sim. É mais fácil (para os humanos) lembrar números de quatro bytes quando eles são escritos dessa maneira."

"Acontece que a escolha de usar apenas 4 bytes logo lhes pregou uma peça cruel. O número de dispositivos conectados à Internet cresceu tão rapidamente que logo ficaram sem números."

"Como eles contornaram isso?"

"Eles fizeram o que os humanos normalmente fazem."

"Eles criaram um novo padrão para endereços IP e o chamaram orgulhosamente de IPv6."

"Ao contrário de um endereço IP normal (chamado IPv4) que usa 4 bytes para formar um número único, o novo padrão usa 16."

"Pense nisso, os humanos não conseguiam se lembrar de 10 dígitos em um número comum (como 2108458776), então eles tiveram que dividi-los em 4 partes, mas depois pensaram em usar números de 16 bytes."

"Sim, às vezes os humanos são estranhos."

"Sim. Humanos são humanos."

"Dito isso, eles saíram de sua situação."

"Eles se cansaram de lembrar os números e decidiram substituí-los por palavras."

"Que tal? Você poderia me dar um exemplo?"

"Claro, web.mail.com , google.com , new.books.amazon.com , …"

"Esse tipo de nome é chamado de domínio."

"Para que esta Internet funcione corretamente, eles criaram uma tabela especial chamada Domain Name System (DNS) que armazena o endereço IP de cada nome de domínio."

"É assim que funciona."

1)  Um usuário insere um endereço em um navegador, por exemplo, web.mail.com .

2)  O navegador acessa o DNS e usa o nome de domínio para obter o endereço IP.

3)  Uma solicitação com a URL necessária é enviada para este endereço IP.

"Isso não parece muito simples."

"Mas essa abordagem tem vários benefícios:"

" 1) Os humanos acham fácil lembrar nomes que podem ser verbalizados."

" 2) Os nomes de domínio podem ser construídos hierarquicamente adicionando subdomínios ao início de um nome. Exatamente como um nome de pacote em Java."

" 3) Se você precisar alterar o endereço IP do servidor da Web, basta alterar o registro DNS e tudo funcionará como antes - os usuários não precisam se lembrar de um novo endereço."

"O DNS é mais ou menos assim:"

Nome do domínio endereço de IP
mail.com 128.35.36.189
web.mail.com 145.12.17.13
novo.mail.com 192.155.15.3
google.com 92.117.151.100
google.com 193.168.0.1
docs.google.com 217.12.222.1

"Faz sentido."

"De qualquer forma, um domínio é o nome de um computador, mas não precisamos do computador - precisamos do que está no computador. É para isso que servem as URLs."

"Inicialmente, uma URL era na verdade um link para um arquivo em outro computador. Por exemplo:"

Exemplo
http://info.codegym.cc/user/info/profile.html _ _ _ _
Descrição
http  é o protocolo para comunicação cliente-servidor
info.codegym.cc  é o nome de domínio do computador
user/info/profile.html  é o caminho para o arquivo no computador

"Bem no início do desenvolvimento da rede, um servidor web só era capaz de usar uma URL para servir arquivos que estava armazenando em algum lugar. A URL era na verdade um caminho global para o arquivo: nome do computador + caminho."

"Posteriormente, quando os próprios servidores web começaram a gerar arquivos, as URLs mudaram um pouco e se tornaram uma solicitação ao servidor web. Parâmetros de solicitação também foram adicionados."

"Hoje é raro ver uma extensão de arquivo no final de uma URL. "Uma URL moderna é apenas um link exclusivo com parâmetros. Mais como uma chamada de método em vez de um caminho de arquivo global."

"Um URL moderno clássico se parece com isso:"

Analisando o URL
http://codegym.cc/alpha/api/contacts ? _ _ _ _ userid=13&filter=none&page=3
Descrição das partes do URL
codegym.cc  é o nome de domínio — o nome único (endereço) de um computador na Internet
http  é o protocolo para comunicação cliente-servidor
alpha/api/contacts  é a solicitação do servidor da web ou solicitação de uma página da web no servidor
userid=13 & filter=none & page=3  é uma string com os parâmetros de solicitação

"Sim, eu me lembro. Você me falou sobre URLs recentemente."

"E sobre portos também. Você usou o exemplo de um prédio de apartamentos."

"Seria melhor me dizer o que é 'http'. Vejo 'protocolo' escrito em todos os lugares, mas não tenho certeza do que é."

"OK. Vou te contar sem mais delongas."

Endereço IP, domínio, URL - 1

" HTTP significa H yper T ext T ransport P rotocol e significa transferência de hipertexto."

"O que é hipertexto?"

"É HTML."

"Falando grosso modo, um protocolo é um conjunto de regras para comunicação. Ele descreve as solicitações que podem ser enviadas a um servidor web e em qual formato, bem como como o servidor web deve responder."

"Em suma, a situação é esta. Arquivos de texto comuns ou, se preferir, grandes blocos de texto são enviados entre o cliente e o servidor. "

"Uma solicitação chega ao servidor e o servidor fornece uma resposta a cada solicitação."

"Aqui estão exemplos de tal solicitação e resposta:"

Solicitar
GET alpha/api/contacts HTTP/1.1
Host: codegym.cc
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5
Accept: text/html
Connection: close
Descrição
GET – request subtype
alpha/api/contacts – request to the web server
HTTP/1.1 – protocol version – HTTP/1.1
Host: codegym.cc – domain name
User-Agent: Mozilla/5… – unique browser name
Accept: text/html – requested document type: HTML
Connection: close – close the server connection after processing the request.

"A primeira linha é a solicitação real. O que se segue são parâmetros de solicitação adicionais, também conhecidos como 'campos de cabeçalho'."

"E aqui está um exemplo de resposta:"

Resposta
HTTP/1.1 200 OK
Date: Wed, 11 Feb 2009 11:20:59 GMT
Server: Apache
X-Powered-By: PHP/5.2.4-2ubuntu5wm1
Last-Modified: Wed, 11 Feb 2009 11:20:59 GMT
Content-Language: en
Content-Type: text/html; charset=utf-8
Content-Length: 1234
Connection: close
<html><body><a href="http://ample.com/about.html#contacts">Click here</a></body></html>
HTTP/1.1 200 OK - «200 OK» means everything is okay.
Date: Wed, 11 Feb 2009 - Date on which the request was processed
Server: Apache - Name of the web server
X-Powered-By: PHP - The server uses PHP
Last-Modified: Wed, 11 Feb 2009 - The time of the last update of the requested file
Content-Language: en - The language of the file
Content-Type: text/html; charset=utf-8 – This is an HTML-file with UTF-8 encoding
Content-Length: 1234 - The response is 1234 bytes long
Connection: close - The connection will be closed after the request is handled
<html><body><a href="http://ample - The HTML file itself.

"Quero chamar sua atenção para duas coisas:"

"Primeiro, não importa o que você solicita, parece uma solicitação de arquivo para o servidor. Não importa se o arquivo está no servidor ou se o servidor o gera em resposta à solicitação."

"Em segundo lugar, o próprio arquivo é enviado como parte da resposta HTTP . Em outras palavras, vemos alguns dados adicionais no início da resposta do servidor e, em seguida, o corpo do arquivo sendo servido. "

"Que interessante! Não tenho certeza se entendi tudo. Vou ler isso de novo mais tarde."

"Oh, eu quero falar sobre uma outra coisa pequena, mas interessante: biscoitos."

"O que são aqueles?"

"De acordo com o protocolo HTTP, os cookies são pequenos pedaços de informação que o servidor envia ao cliente para armazenamento no cliente. E são enviados de volta ao servidor como parte de solicitações subsequentes. "

"E qual é o sentido disso?"

"Suponha que um usuário faça login na página inicial de um site. O servidor cria um objeto de sessão no servidor para esse usuário e um número de sessão exclusivo é enviado ao cliente como um cookie. Durante a próxima solicitação do cliente para o servidor, este número de sessão, junto com outros cookies, será enviado de volta ao servidor. Isso significa que o servidor pode reconhecer o usuário que enviou a nova solicitação."

"Que interessante!"

"Sim. Quando você escrever seus próprios servlets, examinaremos mais de perto esse tópico. Mas, por enquanto, vamos fazer uma pausa."

"Qualquer coisa que você diga."