Skip to content

Latest commit

 

History

History
155 lines (96 loc) · 12.1 KB

File metadata and controls

155 lines (96 loc) · 12.1 KB

Principios da Web

Toda vez que você abrir seus navegadores, digite alguns URLs e pressione enter, você verá lindas páginas da web aparecerem na tela. Mas você sabe o que está acontecendo por trás dessas ações simples?

Normalmente, seu navegador é um cliente. Depois de digitar um URL, ele pega a parte do host do URL e a envia para um servidor DNS para obter o endereço IP do host. Em seguida, ele se conecta ao endereço IP e solicita a configuração de uma conexão TCP. O navegador envia solicitações HTTP por meio da conexão. O servidor lida com eles e responde com respostas HTTP contendo o conteúdo que compõe a página da web. Por fim, o navegador renderiza o corpo da página da Web e se desconecta do servidor.

Imagem: 3.1 Processo dos usuários visitando um site

Um servidor da Web, também conhecido como servidor HTTP, usa o protocolo HTTP para se comunicar com os clientes. Todos os navegadores da web podem ser considerados clientes.

Podemos dividir os princípios de trabalho da Web nas seguintes etapas:

  • Cliente usa o protocolo TCP / IP para se conectar ao servidor.
  • Cliente envia pacotes de solicitações HTTP para o servidor.
  • O servidor retorna pacotes de resposta HTTP ao cliente. Se os recursos solicitados incluírem scripts dinâmicos, o mecanismo de script de chamadas do servidor será o primeiro.
  • Cliente se desconecta do servidor, começa a renderizar HTML.

Este é um fluxo de trabalho simples de assuntos HTTP - observe que o servidor fecha suas conexões depois de enviar dados para os clientes e aguarda a próxima solicitação.

Resolvendo URL e DNS

Nós sempre usamos URLs para acessar páginas da web, mas você sabe como funcionam os URLs?

O nome completo de uma URL é Uniform Resource Locator. É para descrever recursos na internet e sua forma básica é a seguinte.

scheme://host[:port#]/path/.../[?query-string][#anchor]
scheme         Define o protocolo a ser utilizado (Ex: HTTP, HTTPS, FTP)
host           IP ou nome do domínino do servidor HTTP
port#          a porta padrão é 80 e pode ser omitida nesse caso. Se você quiser usar outras portas, você deve especificar qual porta. Por exemplo, http://www.cnblogs.com:8080/
path           Caminho
query-string   Dados enviados através da URI
anchor         Âncora

DNS é uma abreviação de Domain Name System. É o sistema de nomes para serviços de rede de computadores e converte nomes de domínio em endereços IP reais, exatamente como um tradutor.

Imagem 3.2 Principios do DNS

Para entender mais sobre seu princípio de funcionamento, vamos ver o processo detalhado de resolução de DNS como segue.

  1. Depois de digitar o nome de domínio www.qq.com no navegador, o sistema operacional verificará se há algum relacionamento de mapeamento nos arquivos dos hosts para este nome de domínio. Em caso afirmativo, a resolução do nome de domínio será concluída.
  2. Se não existirem relacionamentos de mapeamento nos arquivos dos hosts, o sistema operacional verificará se existe algum cache no DNS. Em caso afirmativo, a resolução do nome de domínio será concluída.
  3. Se não existirem relações de mapeamento no host e no cache DNS, o sistema operacional localizará o primeiro servidor de resolução de DNS nas configurações de TCP / IP, o que provavelmente é o servidor DNS local. Quando o servidor DNS local recebe a consulta, se o nome de domínio que você deseja consultar estiver contido na configuração local de seus recursos regionais, ele retornará os resultados para o cliente. Essa resolução de DNS é autoritativa.
  4. Se o servidor DNS local não contiver o nome de domínio, mas existir um relacionamento de mapeamento no cache, o servidor DNS local devolverá esse resultado ao cliente. Essa resolução de DNS não é autoritativa.
  5. Se o servidor DNS local não puder resolver esse nome de domínio por meio da configuração de recursos regionais ou do cache, ele prosseguirá para a próxima etapa, que depende das configurações do servidor DNS local.
  • Se o servidor DNS local não habilitar o encaminhamento, ele encaminhará a solicitação para o servidor DNS raiz e, em seguida, retornará o endereço IP de um servidor DNS de nível superior que pode saber o nome do domínio, .com neste caso. Se o primeiro servidor DNS de nível superior não reconhecer o nome de domínio, ele redireciona novamente a solicitação para o próximo servidor DNS de nível superior até que ele atinja um que reconheça o nome do domínio. Em seguida, o servidor DNS de nível superior solicita a este servidor DNS de nível seguinte o endereço IP correspondente a www.qq.com. -Se o servidor DNS local tiver o encaminhamento ativado, ele enviará a solicitação para um servidor DNS de nível superior. Se o servidor DNS de nível superior também não reconhecer o nome de domínio, a solicitação continuará sendo reencaminhada para níveis mais altos até que finalmente chegue a um servidor DNS que reconheça o nome do domínio.

Independentemente de o servidor DNS local permitir ou não o encaminhamento, o endereço IP do nome de domínio sempre retornará ao servidor DNS local e o servidor DNS local o enviará de volta ao cliente.

Imagem 3.3 Caminhos do fluxo DNS

Processo de consulta recursiva significa simplesmente que os inquiridores mudam no processo. Os inquiridores não mudam nos processos de consulta iterativa.

Agora sabemos que os clientes obtêm endereços IP no final, portanto, os navegadores estão se comunicando com servidores por meio de endereços IP.

Protocolo HTTP

O protocolo HTTP é uma parte essencial dos serviços da web. É importante saber o que é o protocolo HTTP antes de entender como a Web funciona.

HTTP é o protocolo usado para facilitar a comunicação entre navegadores e servidores da web. Ele é baseado no protocolo TCP e geralmente usa a porta 80 no lado do servidor da web. É um protocolo que utiliza o modelo de solicitação-resposta - os clientes enviam solicitações e os servidores respondem. De acordo com o protocolo HTTP, os clientes sempre configuram novas conexões e enviam solicitações HTTP para os servidores. Os servidores não podem se conectar aos clientes de maneira proativa ou estabelecer conexões de retorno de chamada. A conexão entre um cliente e um servidor pode ser fechada por qualquer um dos lados. Por exemplo, você pode cancelar sua solicitação de download e a conexão HTTP e seu navegador desconectará do servidor antes de concluir o download.

O protocolo HTTP é sem estado, o que significa que o servidor não tem idéia sobre o relacionamento entre as duas conexões, embora sejam do mesmo cliente. Para resolver esse problema, os aplicativos da Web usam cookies para manter o estado das conexões.

Como o protocolo HTTP é baseado no protocolo TCP, todos os ataques TCP afetarão as comunicações HTTP em seu servidor. Exemplos de tais ataques são inundações SYN, ataques DoS e DDoS.

Pacote de request HTTP (informação do browser)

Todos os pacotes de solicitação têm três partes: linha de solicitação, cabeçalho de solicitação e corpo. Há uma linha em branco entre o cabeçalho e o corpo.

GET /domains/example/ HTTP/1.1      // request line: request method, URL, protocol and its version
Host:www.iana.org             // domain name
User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4            // browser information
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8    // mime that clients can accept
Accept-Encoding:gzip,deflate,sdch     // stream compression
Accept-Charset:UTF-8,*;q=0.5      // character set in client side
// blank line
// body, request resource arguments (for example, arguments in POST)

Usamos fiddler para obter as seguintes informações de solicitação.

Imagem 3.4 Informação de um GET request mostrado pelo fiddler

Imagem 3.5 Informação de um POST request mostrado pelo fiddler

We can see that GET does not have a request body, unlike POST, which does.

** Podemos ver que o GET não tem um corpo de solicitação, ao contrário do POST, que faz. **

Existem muitos métodos que você pode usar para se comunicar com servidores em HTTP; GET, POST, PUT e DELETE são os 4 métodos básicos que normalmente usamos. Uma URL representa um recurso em uma rede, portanto, esses quatro métodos definem a consulta, alteram, adicionam e excluem operações que podem atuar nesses recursos. GET e POST são muito usados em HTTP. GET pode anexar parâmetros de consulta à URL, usando ? Para separar a URL e os parâmetros e & entre os argumentos, como EditPosts.aspx?name=test1&id=123456. O POST coloca dados no corpo da solicitação porque o URL implementa uma limitação de tamanho por meio do navegador. Assim, o POST pode enviar muito mais dados do que o GET. Além disso, quando enviamos nomes de usuário e senhas, não queremos que esse tipo de informação apareça no URL. Por isso, usamos o POST para mantê-los invisíveis.

HTTP response package (informação do servidor)

Vamos ver quais informações estão contidas nos pacotes de resposta.

HTTP/1.1 200 OK                     // status line
Server: nginx/1.0.8                 // web server software and its version in the server machine
Date:Date: Tue, 30 Oct 2012 04:14:25 GMT        // responded time
Content-Type: text/html             // responded data type
Transfer-Encoding: chunked          // it means data were sent in fragments
Connection: keep-alive              // keep connection 
Content-Length: 90                  // length of body
// blank line
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"... // message body

A primeira linha é chamada de linha de status. Ele fornece a versão HTTP, o código de status e a mensagem de status.

O código de status informa ao cliente o status da resposta do servidor HTTP. No HTTP / 1.1, 5 tipos de códigos de status foram definidos:

- 1xx Informação
- 2xx Sucesso
- 3xx Redirecionamento
- 4xx Erro ao lado Cliente(ex: 404)
- 5xx Erro ao lado do servidor (ex: 502)

Vamos ver mais exemplos sobre pacotes de resposta. 200 significa que o servidor respondeu corretamente, 302 significa redirecionamento.

Imagem 3.6 Informação completa de um site

HTTP é stateless e conexão: keep-alive

O termo stateless não significa que o servidor não tenha capacidade de manter uma conexão. Significa simplesmente que o servidor não reconhece nenhum relacionamento entre duas solicitações.

No HTTP / 1.1, o Keep-alive é usado por padrão. Se os clientes tiverem solicitações adicionais, eles usarão a mesma conexão para eles.

Observe que o Keep-alive não pode manter uma conexão para sempre; o aplicativo em execução no servidor determina o limite com o qual manter a conexão ativa e, na maioria dos casos, você pode configurar esse limite.

Instancia de requisição

Imagem 3.7 Todos os pacotes

Podemos ver todo o processo de comunicação entre cliente e servidor da figura acima. Você pode perceber que há muitos arquivos de recursos na lista; esses são chamados de arquivos estáticos e o Go especializou-se em métodos de processamento para esses arquivos.

Essa é a função mais importante dos navegadores: solicitar uma URL e recuperar dados de servidores da Web e renderizar o HTML. Se encontrar alguns arquivos no DOM, como arquivos CSS ou JS, os navegadores solicitarão esses recursos do servidor novamente até que todos os recursos concluam a renderização na tela.

Reduzir os tempos de solicitação de HTTP é uma maneira de melhorar a velocidade de carregamento de páginas da web. Ao reduzir o número de arquivos CSS e JS que precisam ser carregados, as latências de solicitação e a pressão nos servidores da Web podem ser reduzidas ao mesmo tempo.

Links