Quais são as diferenças entre a programação do lado do servidor e do lado do cliente?

104

Eu já vi perguntas (principalmente no Stack Overflow), que não possuem esse conhecimento básico. O objetivo desta pergunta é fornecer boas informações para quem a procura e para quem faz referência a ela.

No contexto da programação na web, quais são as diferenças entre a programação do servidor e a programação do cliente? Quais idiomas pertencem a quais e quando você usa cada um deles?

Madara Uchiha
fonte
5
A programação do servidor está escrevendo o código que é executado no servidor, usando idiomas suportados pelo servidor (como Java, PHP, C #; é possível escrever o código que é executado no servidor em JavaScript). A programação do lado do cliente está escrevendo o código que será executado no cliente e é feita em idiomas que podem ser executados pelo navegador, como JavaScript.
FrustratedWithFormsDesigner
1
Este é muito bom: programmers.stackexchange.com/questions/138561/…
JeffO 24/10/12
7
Eu acho que você deve incluir na pergunta que você se refere apenas à programação na Web, pois no formulário atual as respostas não estão completas. Por exemplo, a comunicação servidor-cliente não precisa ser feita em HTTP; do lado do cliente não pode usar um navegador, etc.
K.Steff
@KSteff, você pode editar minha pergunta e adicioná-la.
Madara Uchiha
2
Quando a web era jovem, era uma boa prática colocar a maior parte de sua lógica de trabalho pesado no lado do servidor (java / c ++) e manter a lógica do navegador intencionalmente fina - principalmente porque os navegadores da época não estavam prontos para o horário nobre. Agora, essa ênfase foi revertida, de modo que as ferramentas baseadas em navegador (Angular.js) estão onde a maior parte da lógica de levantamento pesado de aplicativos da Web agora reside (longe da lógica do lado do servidor, cada vez mais reduzida). Isso foi facilitado pelos modernos navegadores de força industrial que executam mecanismos javascript extremamente rápidos (dentro de uma ordem de magnitude do código nativo).
Scott Stensland

Respostas:

123

fundo

Desenvolvimento Web é tudo sobre comunicação. Nesse caso, comunicação entre duas (2) partes, através do protocolo HTTP:

  • O servidor - esta parte é responsável por servir as páginas.
  • O cliente - essa parte solicita páginas do servidor e as exibe para o usuário. Na maioria dos casos, o cliente é um navegador da web .
    • O usuário - O usuário usa o cliente para navegar na web, preencher formulários, assistir a vídeos on-line etc.

A programação de cada lado refere-se ao código que é executado na máquina específica, no servidor ou no cliente.

Exemplo básico

  1. O usuário abre seu navegador da web (o cliente ).
  2. O usuário navega para http://google.com .
  3. O Cliente (em nome do Usuário ) envia uma solicitação para http://google.com (o Servidor ), para sua página inicial.
  4. O servidor reconhece a solicitação e responde ao cliente com alguns metadados (chamados cabeçalhos ), seguidos pela fonte da página.
  5. O cliente então recebe-fonte da página, e torna -lo em um site visível humana.
  6. O usuário digita Stack Overflowna barra de pesquisa e pressionaEnter
  7. O cliente envia esses dados para o servidor .
  8. O servidor processa esses dados e responde com uma página correspondente aos resultados da pesquisa.
  9. O Cliente , mais uma vez, renderiza essa página para o Usuário visualizar.

Programação

Programação do lado do servidor

Programação no servidor, é o nome geral dos tipos de programas que são executados no servidor .

Usos

  • Processar entrada do usuário.
  • Compila páginas.
  • Estruturar aplicativos da web.
  • Interaja com o armazenamento permanente (SQL, arquivos).

Idiomas de exemplo

  • PHP
  • Pitão
  • ASP.Net em C #, C ++ ou Visual Basic.
  • Quase qualquer linguagem (C ++, C #, Java). Eles não foram projetados especificamente para a tarefa, mas agora são frequentemente usados ​​para serviços da Web em nível de aplicativo.

Programação do lado do cliente

Muito parecido com o lado do servidor, a programação do lado do cliente é o nome de todos os programas executados no cliente .

Usos

  • Faça páginas da web interativas.
  • Faça as coisas acontecerem dinamicamente na página da web.
  • Interaja com armazenamento temporário e armazenamento local (Cookies, localStorage).
  • Envie solicitações para o servidor e recupere dados dele.
  • Forneça um serviço remoto para aplicativos do lado do cliente, como registro de software, entrega de conteúdo ou jogos remotos para vários jogadores.

Idiomas de exemplo

  • JavaScript (principalmente)
  • HTML *
  • CSS *
  • Qualquer idioma em execução em um dispositivo cliente que interage com um serviço remoto é um idioma do lado do cliente.

* HTML e CSS não são realmente "linguagens de programação" por si só. São sintaxe de marcação pela qual o Cliente renderiza a página para o Usuário .

Madara Uchiha
fonte
8
+1 para obter uma boa resposta com exemplos de usos! Apenas para nitpick: HTML e CSS não são realmente linguagens de programação, portanto, provavelmente não devem ser comparados com "PHP, ASP e praticamente qualquer idioma (C ++, C #, Java)". O ActionScript pode ser outro bom exemplo de uma linguagem do lado do cliente.
FrustratedWithFormsDesigner
5
Você falha ao identificar por que o servidor é um servidor e o cliente é um cliente. O servidor é conhecido pelo cliente, mas não o contrário. Espera-se que o servidor esteja em execução o tempo todo, não há expectativas do cliente.
22612 Chris McCall
3
Eu acrescentaria o fato de que um ambiente de servidor é mais controlado. Você não tem idéia do que é o cliente. Também há preocupações de segurança (para ambas as partes) ao fazer as coisas do lado do cliente.
Stonemetal 24/10/12
1
Então adicione, fique à vontade.
Madara Uchiha
1
Discordo da definição de @ ChrisMcCall até certo ponto. Pode haver exceções a essa regra, como onde um servidor pode confiar em um cliente para processar dados ou fornecer um serviço ao servidor para que o servidor conclua uma tarefa. Os clientes também estão compartilhando uma quantidade crescente da carga para escalabilidade e desempenho, como nos SPAs. Essas tecnologias obscurecem essa definição. Uma definição melhor poderia ser que o usuário final e o cliente são sinônimos. Espera-se que o usuário final exista no dispositivo cliente, enquanto todos os outros nós seriam considerados do lado do servidor.
RyanJMcGowan
27

Nas palavras do leigo:

Aqui vou falar apenas sobre programação na web.

A programação do lado do cliente tem a ver principalmente com a interface do usuário, com a qual o usuário interage. No desenvolvimento da Web, é o navegador, na máquina do usuário, que executa o código, e é feito principalmente em javascript, flash, etc. Esse código deve ser executado em vários navegadores.

Suas principais tarefas são:

  • validação de entrada (a validação deve ser feita no servidor. Uma validação redundante no cliente pode ser usada para evitar chamadas do servidor quando a velocidade é muito crítica.)
  • animação
  • manipulando elementos da interface do usuário
  • aplicando estilos
  • alguns cálculos são feitos quando você não deseja que a página seja atualizada com tanta frequência

A pessoa responsável pela programação do front-end deve saber :

  • javascript
  • css
  • HTML
  • design gráfico básico
  • Ajax
  • talvez Flash
  • algumas bibliotecas javascript de terceiros como o JQuery
  • UI design
  • design de informações, etc.

A programação do servidor tem a ver com a geração de conteúdo dinâmico. Ele roda em servidores. Muitos desses servidores são "decapitados". A maioria das páginas da Web não é estática, elas pesquisam um banco de dados para mostrar ao usuário informações personalizadas atualizadas. Esse lado interage com o back-end, como por exemplo, o banco de dados.

Essa programação pode ser feita em vários idiomas:

  • PHP
  • Java e jsp
  • asp
  • Perl
  • Pitão
  • Ruby on Rails, etc.

Este código tem a ver com:

  • Consultando o banco de dados
  • Codifique os dados em html
  • Inserir e atualizar informações no banco de dados
  • Regras e cálculos de negócios

A pessoa responsável pela programação do lado do servidor deve saber:

  • alguns dos idiomas mencionados acima
  • HTML
  • SQL,
  • scripts de shell linux / unix
  • OOP
  • regras de negócios etc.
Tulains Córdova
fonte
"A pessoa encarregada da programação do front-end deve saber" Precisa? Eu diria que você pode sobreviver perfeitamente apenas com HTML, CSS, Javascript e Ajax. Dizendo que a programação do lado do servidor tem a ver com a geração de conteúdo dinâmico e não dizer o mesmo para lado do cliente, provavelmente, dar a intuição errado ...
nbro
"A maioria das páginas da Web não é estática, elas pesquisam um banco de dados para mostrar ao usuário informações personalizadas atualizadas. Esse lado interage com o back-end, como, por exemplo, o banco de dados". Eu o reformularia da seguinte maneira: "As páginas são geradas dinamicamente preenchendo as partes dinâmicas com conteúdo variável que é buscado geralmente em um banco de dados. O back-end já é tudo relacionado à programação no servidor, IMO.
nbro
Novamente, em geral, eu diria "... uma pessoa deve saber ..." e não 'deve' ...
nbro
@ nbro Por que você não escreve sua própria resposta?
@ColeTrumbo Qual é a conexão entre o meu comentário e o seu? As pessoas podem criticar as respostas dos outros para melhorá-las?
Nbro 9/11
14

Outras respostas se concentraram no que é programação do lado do cliente e do servidor: quais idiomas são mais usados, quais tarefas precisam ser realizadas etc.

Isso está absolutamente certo, mas não entendo quais são as diferenças entre os dois tipos de programação no contexto da programação na web. Deixe-me tentar resolver isso.

Segurança e permissões

Na programação do lado do cliente, você não tem acesso ao sistema completo devido a questões de segurança. O usuário não confia necessariamente em todo e qualquer código baixado da Web e executado em sua máquina, e esse é o principal objetivo de design do ambiente do lado do cliente (o navegador e o mecanismo JavaScript): fornecer um ambiente isolado onde o código do cliente pode ser executado, mas não pode acessar nada fora do escopo permitido.

Na programação do servidor, é uma boa prática também limitar o acesso de cada aplicativo ao sistema subjacente, mas isso é muito menos imposto a você, pois no final, você ou sua empresa estão no controle desse sistema. Esse design de 'compartimento isolado' não é incorporado nas ferramentas e linguagens de programação do servidor, mas é realizado através da instalação (usando usuários dedicados com permissões restritas, escolhendo portas que requerem ou não permissões de raiz, etc.).

Implantação e plataforma

Na programação do servidor, a implantação precisa acontecer de fora do seu código, usando algum tipo de ferramenta (mesmo que seja make installou a git clone), e essa implantação geralmente é manual - ou pelo menos, espera-se que ocorra em um ambiente semi-supervisionado. maneira. O sistema (ou seja, o SO) no qual você implanta geralmente é uniforme em várias máquinas, mas pode ser altamente personalizado para suas necessidades.

Na programação do lado do cliente, a implantação acontece a partir do código do lado do servidor, que atende os clientes automaticamente e sem supervisão. O sistema subjacente (significando principalmente o navegador) pode ser muito diferente em um número muito maior de máquinas. Para viabilizar a implantação, é necessário manter os padrões e há uma tendência muito mais forte para um único idioma e ambiente.

É por isso que copiar o código do servidor de uma máquina para outra pode levar semanas, enquanto o código do cliente geralmente é trivial para ser executado em máquinas diferentes.

Efeitos estatais e secundários

(Isenção de responsabilidade: este é de longe o ponto mais subjetivo de todos. Provavelmente, existem muitos aspectos errados na minha argumentação. É apenas uma hipótese interessante, na minha opinião.)

Na programação do servidor, o estado é uma preocupação muito maior, significando como recuperar e atualizar dados a pedido do usuário, com a possibilidade de conflitos devido à simultaneidade. Mesmo que grande parte dessa complexidade seja transferida para um servidor de banco de dados, é de responsabilidade do código do servidor permitir que o banco de dados mantenha suas garantias de integridade de dados usando sua interface corretamente (por exemplo, não use um cache para atualizações que nunca são vistas pelo o DB), embora também seja um objetivo do código do servidor não sobrecarregar o banco de dados com trabalho e manter o usuário aguardando resposta.

Na programação do lado do cliente, apresentar os resultados ao usuário é uma preocupação muito maior, e isso implica efeitos secundários (principalmente na impressão na tela). Isso não quer dizer que não haja um estado envolvido (por exemplo, cookies), apenas que o principal objetivo do código é realmente interagir com o usuário, e isso não pode acontecer sem efeitos secundários.

É por isso que a programação do lado do cliente geralmente exige (em algum momento) olhar para a tela com uma demonstração, para verificar se todas as cores e o layout estão corretos, enquanto a programação do lado do servidor pode ocorrer quase que exclusivamente em um ambiente orientado a texto, onde automatizado Os testes verificam se a lógica ainda está fazendo o que deveria.

logc
fonte
3

Isso não significa que seja uma resposta aceita; pelo contrário, ofereço-o como um ponto complementar (em resposta à when do you use each of thempergunta) que ainda não foi mencionado nas outras respostas até agora, a saber:

Proteção da propriedade intelectual

O código-fonte localizado no lado do cliente (como em Javascript) é facilmente legível e / ou pode sofrer engenharia reversa se tiver sido ofuscado.

O código-fonte que fica no lado do servidor, no entanto, pode proteger com segurança algoritmos proprietários e retornar apenas o resultado; uma espécie de caixa preta.

Kosta Kontos
fonte
Sim, mas esse não é realmente o ponto mais importante, o servidor está lá para o servidor e o cliente está lá para receber. Alguma lógica é melhor executada no cliente (como um carrinho de compras, você não deixa o supermercado acompanhar o seu carrinho o tempo todo, não é?), E outra é melhor executada no servidor (obtendo informações do banco de dados)
Madara Uchiha
@MadaraUchiha, daí o preâmbulo: "Isto não é de forma pretende ser uma resposta aceita, mas sim eu oferecê-lo como um ponto complementar"
Kosta Kontos
Isso não deveria fazer parte de outro post? Sou novo aqui, mas não é preferível ter uma resposta completa do que as dispersas?
Julix