Quali sono le differenze tra la programmazione lato server e lato client?


104

Ho visto domande (principalmente su Stack Overflow), che mancano di queste conoscenze di base. Il punto di questa domanda è fornire buone informazioni a coloro che la cercano e a coloro che si riferiscono ad essa.

Nel contesto della programmazione Web, quali sono le differenze tra la programmazione lato server e la programmazione lato client? Quali lingue appartengono a quali e quando le usi ciascuna?


5
La programmazione lato server sta scrivendo il codice che viene eseguito sul server, utilizzando le lingue supportate dal server (come Java, PHP, C #; è possibile scrivere codice che viene eseguito sul lato server in JavaScript). La programmazione lato client è la scrittura di codice che verrà eseguito sul client e viene eseguita in lingue che possono essere eseguite dal browser, come JavaScript.
FrustratedWithFormsDesigner,


7
Penso che dovresti includere nella domanda che ti riferisci solo alla programmazione web, poiché nella forma attuale le risposte non sono complete. Ad esempio, la comunicazione server-client non deve essere effettuata in HTTP; lato client potrebbe non utilizzare un browser, ecc.
K.Steff

@KSteff sei invitato a modificare la mia domanda per aggiungerla.
Madara Uchiha,

2
Quando il Web era giovane, era buona norma mettere la maggior parte della propria logica di sollevamento sul lato server (java / c ++) e mantenere la logica del browser intenzionalmente sottile, in particolare poiché i browser allora non erano pronti per la prima serata. Ora questa enfasi si è invertita in modo tale che gli strumenti basati su browser (Angular.js) sono dove risiede la maggior parte della logica di sollevamento pesante delle applicazioni Web (lontano dalla logica lato server sempre più ridotta). Ciò è stato facilitato dai moderni browser di forza industriale che eseguono motori javascript estremamente veloci (entro un ordine di grandezza del codice nativo).
Scott Stensland,

Risposte:


123

sfondo

Lo sviluppo Web è tutto incentrato sulla comunicazione. In questo caso, comunicazione tra due (2) parti, tramite il protocollo HTTP:

  • Il server : questa parte è responsabile della pubblicazione delle pagine.
  • Il client : questa parte richiede pagine dal server e le visualizza all'utente. Nella maggior parte dei casi, il client è un browser web .
    • L' utente : l'utente utilizza il cliente per navigare sul Web, compilare moduli, guardare video online, ecc.

La programmazione di ciascuna parte, si riferisce al codice che viene eseguito sulla macchina specifica, sul server o sul client.

Esempio di base

  1. L' utente apre il suo browser web (il client ).
  2. L' utente accede a http://google.com .
  3. Il Cliente (per conto dell'Utente ), invia una richiesta a http://google.com (il Server ), per la propria home page.
  4. Il server quindi riconosce la richiesta e risponde al client con alcuni metadati (chiamati header ), seguiti dall'origine della pagina.
  5. Il cliente riceve quindi sorgente della pagina, e rende in un sito web visibile umana.
  6. L' utente digita Stack Overflownella barra di ricerca e premeEnter
  7. Il client invia tali dati al server .
  8. Il server elabora tali dati e risponde con una pagina corrispondente ai risultati della ricerca.
  9. Il Cliente , ancora una volta, esegue il rendering di quella pagina affinché l' utente possa visualizzarla.

Programmazione

Programmazione lato server

Programmazione lato server, è il nome generale per i tipi di programmi eseguiti sul server .

usi

  • Elaborazione dell'input dell'utente.
  • Compila pagine.
  • Struttura delle applicazioni web.
  • Interagisci con l'archiviazione permanente (SQL, file).

Lingue di esempio

  • PHP
  • Pitone
  • ASP.Net in C #, C ++ o Visual Basic.
  • Quasi ogni lingua (C ++, C #, Java). Questi non sono stati progettati specificamente per l'attività, ma ora vengono spesso utilizzati per servizi Web a livello di applicazione.

Programmazione lato client

Proprio come il lato server, la programmazione lato client è il nome di tutti i programmi eseguiti sul client .

usi

  • Crea pagine Web interattive.
  • Fai in modo che le cose accadano in modo dinamico sulla pagina web.
  • Interagisci con l'archiviazione temporanea e l'archiviazione locale (cookie, localStorage).
  • Invia richieste al server e recupera i dati da esso.
  • Fornire un servizio remoto per le applicazioni lato client, come la registrazione del software, la consegna dei contenuti o il gioco multiplayer remoto.

Lingue di esempio

  • JavaScript (principalmente)
  • HTML *
  • CSS *
  • Qualsiasi lingua in esecuzione su un dispositivo client che interagisce con un servizio remoto è una lingua lato client.

* HTML e CSS non sono in realtà "linguaggi di programmazione" di per sé. Sono sintassi di markup con cui il client esegue il rendering della pagina per l' utente .


8
+1 per una buona risposta con esempi degli usi! Giusto per nitpick: HTML e CSS non sono in realtà linguaggi di programmazione, quindi probabilmente non dovrebbero essere confrontati con "PHP, ASP e Quasi qualsiasi linguaggio (C ++, C #, Java)". ActionScript potrebbe essere un altro buon esempio di un linguaggio lato client.
FrustratedWithFormsDesigner,

5
Non riesci a identificare il motivo per cui il server è un server e il client è un client. Il server è noto dal client, ma non viceversa. Il server dovrebbe essere eseguito in qualsiasi momento, non ci sono aspettative da parte del cliente.
Chris McCall,

3
Aggiungerei il fatto che un ambiente server è più controllato. Non hai idea di cosa sia il cliente. Inoltre ci sono problemi di sicurezza (per entrambe le parti) quando si eseguono operazioni sul lato client.
stonemetal

1
Quindi aggiungilo, sentiti libero.
Madara Uchiha,

1
Non sono d'accordo con la definizione di @ ChrisMcCall fino a un certo punto. Potrebbero esserci eccezioni a tale regola, ad esempio quando un server può fare affidamento su un client per elaborare i dati o fornire un servizio al server affinché il server completi un'attività. I clienti condividono inoltre una quantità crescente di carico per scalabilità e prestazioni come nelle SPA. Queste tecnologie sfocano questa definizione. Una definizione migliore potrebbe essere che l'utente finale e il client sono sinonimi. Si prevede che l'utente finale esista sul dispositivo client, mentre tutti gli altri nodi verrebbero considerati lato server.
RyanJMcGowan,

27

Nelle parole di laici:

Qui parlerò solo della programmazione web.

La programmazione lato client ha principalmente a che fare con l'interfaccia utente, con la quale l'utente interagisce. Nello sviluppo web è il browser, nel computer dell'utente, che esegue il codice ed è principalmente eseguito in javascript, flash, ecc. Questo codice deve essere eseguito in una varietà di browser.

I suoi compiti principali sono:

  • input di convalida (la convalida deve essere eseguita nel server. Una convalida ridondante nel client potrebbe essere utilizzata per evitare chiamate al server quando la velocità è molto critica.)
  • animazione
  • manipolazione di elementi dell'interfaccia utente
  • applicare gli stili
  • alcuni calcoli vengono eseguiti quando non si desidera aggiornare la pagina così spesso

Il responsabile della programmazione front-end deve conoscere :

  • javascript
  • css
  • HTML
  • progettazione grafica di base
  • Ajax
  • forse Flash
  • alcune librerie javascript di terze parti come JQuery
  • Progettazione dell'interfaccia utente
  • progettazione delle informazioni, ecc.

La programmazione lato server ha a che fare con la generazione di contenuti dinamici. Funziona su server. Molti di questi server sono "senza testa". La maggior parte delle pagine Web non è statica, cerca in un database per mostrare all'utente informazioni personalizzate aggiornate. Questo lato interagisce con il back-end, come ad esempio il database.

Questa programmazione può essere eseguita in molti linguaggi:

  • PHP
  • Java e jsp
  • aspide
  • Perl
  • Pitone
  • Ruby on Rails, ecc.

Questo codice ha a che fare con:

  • Interrogazione del database
  • Codifica i dati in html
  • Inserisci e aggiorna le informazioni nel database
  • Regole commerciali e calcoli

Il responsabile della programmazione lato server deve conoscere:

  • alcune delle lingue sopra menzionate
  • HTML
  • SQL,
  • scripting shell linux / unix
  • OOP
  • regole commerciali, ecc.

"Il responsabile della programmazione front-end deve sapere" Deve? Direi che puoi sopravvivere perfettamente solo con HTML, CSS, Javascript e Ajax. Dire che la programmazione lato server ha a che fare con la generazione di contenuto dinamico e non dire lo stesso per lato client probabilmente darà l'intuizione sbagliata ...
nbro,

"La maggior parte delle pagine Web non è statica, cerca in un database per mostrare all'utente informazioni personalizzate aggiornate. Questo lato interagisce con il back-end, come per esempio il database." Lo riformulerei come segue: "Le pagine vengono generate in modo dinamico riempiendo le parti dinamiche di contenuto variabile che viene recuperato solitamente da un database. Il back-end è già tutto relativo alla programmazione lato server, IMO.
nbro,

Ancora una volta, in generale, direi "... una persona dovrebbe sapere ..." e non "deve" ...
nbro,

@nbro Perché non scrivi semplicemente la tua risposta?

@ColeTrumbo Qual è la connessione tra il mio commento e il tuo? Le persone possono criticare le risposte degli altri per migliorarle?
nbro,

14

Altre risposte si sono concentrate su ciò che è la programmazione lato client e lato server: quali lingue sono maggiormente utilizzate, quali attività devono essere eseguite, ecc.

Questo è assolutamente giusto, ma mi manca un po 'di attenzione su quali sono le differenze tra i due tipi di programmazione, nel contesto della programmazione web. Vorrei provare a risolverlo.

Sicurezza e autorizzazioni

Nella programmazione lato client, non si ha accesso al sistema completo a causa di problemi di sicurezza. L'utente non si fida necessariamente di ogni singolo pezzo di codice che viene scaricato dal Web ed eseguito sulla sua macchina, e questo è l'obiettivo principale di progettazione dell'ambiente lato client (browser e motore JavaScript): fornire un ambiente isolato dove il codice client può essere eseguito ma non può accedere a nulla al di fuori dell'ambito consentito.

Nella programmazione lato server, è buona norma limitare anche l'accesso di ciascuna applicazione al sistema sottostante, ma ciò è molto meno imposto per te, poiché alla fine tu o la tua azienda avete il controllo di quel sistema. Questo design di "gabbia isolata" non è integrato negli strumenti e nei linguaggi di programmazione lato server, ma è realizzato attraverso l'installazione dell'installazione (utilizzando utenti dedicati con autorizzazioni limitate, scegliendo porte che richiedono o non richiedono autorizzazioni di root, ecc.).

Distribuzione e piattaforma

Nella programmazione lato server, la distribuzione deve avvenire al di fuori del tuo codice, usando un qualche tipo di strumento (anche se lo è make installo a git clone), e questa distribuzione è di solito manuale - o almeno, dovrebbe avvenire in un semi supervisionato modo. Il sistema (ovvero il sistema operativo) su cui viene distribuito è generalmente uniforme su più macchine, ma può essere fortemente personalizzato in base alle proprie esigenze.

Nella programmazione lato client, la distribuzione avviene dal codice lato server, che serve i client automaticamente e senza supervisione. Il sistema sottostante (che significa principalmente il browser) può essere molto diverso su un numero molto più ampio di macchine. Al fine di rendere fattibile l'implementazione, è necessario mantenere gli standard e vi è una tendenza molto più forte in una singola lingua e ambiente.

Questo è il motivo per cui la copia del codice lato server da una macchina all'altra può richiedere settimane, mentre il codice lato client è di solito banale da eseguire su macchine diverse.

Effetti secondari e di stato

(Disclaimer: questo è di gran lunga il punto più soggettivo di tutti. Probabilmente ci sono molti aspetti sbagliati nella mia argomentazione. È solo un'ipotesi interessante, a mio avviso.)

Nella programmazione lato server, lo stato è una preoccupazione molto più grande, che significa come recuperare e aggiornare i dati su richiesta dell'utente con la possibilità di conflitti dovuti alla concorrenza. Anche se la maggior parte di questa complessità viene scaricata su un server di database, è responsabilità del codice lato server consentire al database di mantenere le proprie garanzie sull'integrità dei dati utilizzando la sua interfaccia correttamente (ad esempio, non utilizzare una cache per gli aggiornamenti che non sono mai stati visti da il DB), mentre è anche un obiettivo del codice lato server non sovraccaricare il database con il lavoro e mantenere l'utente in attesa di risposta.

Nella programmazione lato client, presentare i risultati all'utente è una preoccupazione molto più grande, e questo implica effetti secondari (principalmente stampa sullo schermo). Questo non vuol dire che non esiste uno stato coinvolto (ad esempio i cookie), ma solo che l'obiettivo principale del codice è di interfacciarsi effettivamente con l'utente e ciò non può avvenire senza effetti secondari.

Questo è il motivo per cui la programmazione lato client di solito richiede (ad un certo punto) di guardare lo schermo con una demo, per verificare che tutti i colori e il layout siano corretti, mentre la programmazione lato server può avvenire quasi esclusivamente in un ambiente orientato al testo, dove l'automazione i test controllano che la logica stia ancora facendo ciò che dovrebbe fare.


3

Non si intende affatto una risposta accettata; piuttosto lo offro come un punto complementare (in risposta alla when do you use each of themdomanda) che deve ancora essere menzionato nelle altre risposte finora, vale a dire:

Protezione della proprietà intellettuale

Il codice sorgente che si trova sul lato client (come in Javascript) è facilmente leggibile e / o può essere retroingegnerizzato se è stato offuscato.

Il codice sorgente che si trova sul lato server può tuttavia proteggere in modo sicuro algoritmi proprietari e restituire solo il risultato; una specie di scatola nera.


Sì, ma non è proprio questo il punto più importante, il server è lì per il server e il client è lì per ricevere. Qualche logica è meglio eseguita sul client (come un carrello, non lasciare che il supermercato tenga sempre traccia del tuo carrello, vero?), E alcuni sono meglio fatti sul server (ottenere informazioni dal database)
Madara Uchiha,

@MadaraUchiha, da cui il preambolo: "Non si tratta affatto di una risposta accettata; piuttosto la offro come punto complementare"
Kosta Kontos,

Allora questo non dovrebbe far parte di un altro post? Sono nuovo qui, ma non è preferibile avere una risposta completa rispetto a quelle sparse?
Julix,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.