Sistemas Web e o modelo cliente-servidor

O uso de software hoje em dia é uma atividade trivial e onipresente. É possível encontrar software em praticamente qualquer lugar, como jogos, um sistema de aviação, um editor de textos, um e-commerce.

De maneira geral todas essas aplicações precisam de técnicas, métodos e mecanismos para que funcionem como o esparado, porém cada uma delas tem suas particularidades, necessidades e focos diferentes. Um jogo por exemplo, tem como objetivo a interação do usuário. Já os sistemas embutidos em aviões, tem como objetivos a segurança, confiabilidade e e controle de dispositivos físicos.

Outra diferença importante é o ambiente em que essas aplicações necessitam para funcionarem. O editor de textos por exemplo é executado em um computador local, ou seja, não necessita de acesso a uma rede de Internet para funcionar. O software possui todos os recursos necessários para serem executados no computador do usuário.

Já em uma loja virtual (e-commerce) o cenário é outro. Primeiramente é necessário que o usuário tenha acesso a Internet para acessar a loja virtual, isso implica que o software é executado em pedaços, ou seja, parte do software é executado no computador do usuário e outra parte é executada em um computador remoto.

Analisando eses dois tipos de software é possível observar que existe uma grande diferença entre eles. O editor de textos é executado em um único computador, e classificamos esse tipo de software como centralizado. Já o sistema do o e-commerce é considerado distribuído pois é executado em dois computadores diferentes, parte do processamento ocorre em um computador e outra parte em outro computador. Esses computadores também tem diferenças, aquele que está acessando a aplicação via um navegador é chamado de cliente e o computador que está executando a aplicação é chamado de servidor. Esse tipo de sistema é chamado de sistema cliente-servidor. A Figura a seguir ilustra esse tipo de sistema.

Modelo cliente-servidor

É super importante compreender como o modelo cliente-servidor funciona para que seja possível desenvolver aplicações que utilizam esse modelo, lembre-se uma parte do software é executado em um computador e outra parte em outro computador e isso muda tanto como o software deve ser desenvolvido como também como ele deve ser executado.

Entendendo as tecnologias envolvidas

No caso de aplicações Web o modelo cliente-servidor vai utilizar a Internet para que a comunicação entre o cliente e o servidor ocorra. Essa comunicação se dá através das requisições do cliente e das respostas do servidor. As requisições são pedidos feitos pelos clientes. Nós fazemos isso sem perceber quando acessamos um site, por exemplo, ao acessar o site do Google, o navegador faz uma requisição para o servidor do Google e o servidor responde com o conteúdo do site.

Em nosso exemplo anterior ainda existem dois conceitos importantes que precisam ser compreendidos com relação ao acesso ao site. Esse acesso se dá através de um software chamado de navegador ou browser. Você já utilizou algum - e deve ter algum de preferência. Alguns exemplos são: Google Chrome, Mozilla Firefox, Microsoft Edge, Safari, Opera, etc.

O navegador é um software que permite que o usuário acesse sites, ou seja, ele é o cliente. Porém para conseguir realizar esse acesso você precisa informar o endereço do site que deseja acessar, esse endereço é chamado de URL. A URL é um endereço que identifica um recurso na Internet, no caso do Google, o endereço é https://www.google.com.br.

A URL é composta por vários elementos, mas os mais importantes nesse momento são o protocolo, o domínio e o caminho. O protocolo é o meio de comunicação que será utilizado para acessar o recurso, no caso o protocolo HTTP. O domínio é o endereço do servidor que está disponibilizando o recurso.

Juntando os pedaços

Agora que já sabemos o que é um modelo cliente-servidor e como ele funciona, vamos juntar os pedaços para entender como a comunicação entre o cliente e o servidor funciona, a Figura a seguir mostra um exemplo de requisição. Vamos imaginar que você gostaria de acessar o buscador do Google. Logo, precisaria de:

Ao digitar o endereço no navegador, este realiza o pedido que é conhecido também como requisição.

Requisição

Se olharmos por debaixo do capo, a requisição é um texto que contém informações sobre o pedido, como o método HTTP, o caminho do recurso, o protocolo, o host, o tipo de conteúdo que o cliente aceita, etc.

Ao chegar no servidor, esse pedido deve ser entregue para um software que vai processar o pedido e retornar uma resposta. Esse software é chamado de Servidor HTTP. O servidor HTTP é um software que fica aguardando as requisições e as processa, retornando uma resposta. A Figura a seguir mostra o servidor recebendo a requisição.

Lembre-se, o servidor é um computador e como qualquer computador tem vários softwares instalados e rodando. Logo precisamos de um específico que fica esperando por requisições e sabe como tratá-las, esse software é o servidor HTTP.

Servidor recebendo a requisição

A Figura anterior mostra o valor 80 em uma das caixas desenhadas, esse valor é a porta que o servidor HTTP está escutando. Uma porta é um número que identifica um software que está rodando em um computador. Dentro do computador existem várias portas e cada uma delas pode ter um software rodando. Existem ainda padrões definidos, por exemplo, o servidor HTTP geralmente roda na porta 80, o servidor de e-mail na porta 25, o servidor de banco de dados MySQL na porta 3306, etc.

Agora que o servidor recebeu o pedido é necessário que ele seja processado e uma resposta seja gerada. Para isso o servidor HTTP vai utilizar um software que vai processar o pedido e gerar uma resposta. Esse software é chamado de aplicação. É essa aplicação em que trabalhamos para construir, mas já podemos adiantar que a resposta - independente da aplicação a ser construída - vai ser texto. Em nosso caso específico um texto pradrozinado conhecido como HTML - Hypertext Markup Language. A Figura a seguir mostra o servidor HTTP enviando a resposta para o cliente.

Servidor enviando a resposta