Jakie są różnice między programowaniem po stronie serwera a oprogramowaniem po stronie klienta?

104

Widziałem pytania (głównie na temat przepełnienia stosu), w których brakuje tej podstawowej wiedzy. Celem tego pytania jest zapewnienie dobrych informacji dla osób poszukujących go i odnoszących się do niego.

Jakie są różnice w programowaniu po stronie serwera i programowaniu po stronie klienta? Do jakich języków należą i kiedy używasz każdego z nich?

Madara Uchiha
źródło
5
Programowanie po stronie serwera polega na pisaniu kodu działającego na serwerze przy użyciu języków obsługiwanych przez serwer (takich jak Java, PHP, C #; możliwe jest pisanie kodu, który jest wykonywany po stronie serwera w JavaScript). Programowanie po stronie klienta polega na pisaniu kodu, który będzie działał na kliencie i odbywa się w językach, które mogą być wykonywane przez przeglądarkę, takich jak JavaScript.
FrustratedWithFormsDesigner
1
Ten jest całkiem niezły: programmers.stackexchange.com/questions/138561/…
JeffO
7
Myślę, że powinieneś dołączyć do pytania, które dotyczy wyłącznie programowania internetowego, ponieważ w obecnej formie odpowiedzi nie są kompletne. Na przykład komunikacja serwer-klient nie musi odbywać się w HTTP; strona klienta może nie korzystać z przeglądarki itp.
K.Steff
@KSteff możesz edytować moje pytanie, aby je dodać.
Madara Uchiha
2
Gdy sieć była młoda, dobrą praktyką było umieszczanie dużej części logiki po stronie serwera (java / c ++) i utrzymywanie logiki przeglądarki celowo cienkiej - zwłaszcza, że ​​wtedy przeglądarki nie były gotowe na najlepszy czas. Teraz nacisk ten został odwrócony, tak więc obecnie znajduje się większość narzędzi logicznych do podnoszenia ciężarów aplikacji sieciowych (Angular.js) (z dala od coraz bardziej ograniczanej logiki po stronie serwera). Jest to ułatwione przez nowoczesne przeglądarki o sile przemysłowej, działające z bardzo szybkimi silnikami javascript (w zakresie wielkości kodu natywnego).
Scott Stensland,

Odpowiedzi:

123

tło

Tworzenie stron internetowych polega na komunikacji. W takim przypadku komunikacja między dwiema (2) stronami za pośrednictwem protokołu HTTP:

  • Server - Ta strona jest odpowiedzialna za podaniem stron.
  • Client - Ta partia żąda strony z serwera i wyświetla je użytkownikowi. W większości przypadków klient jest przeglądarką internetową .
    • Użytkownik - użytkownik korzysta z klienta , aby surfować po internecie, wypełniać formularze, oglądać filmy online, itd.

Programowanie każdej ze stron odnosi się do kodu działającego na konkretnej maszynie, serwerze lub kliencie.

Podstawowy przykład

  1. Użytkownik otwiera swoją przeglądarkę internetową (The Client ).
  2. Użytkownik przegląda http://google.com .
  3. Client (w imieniu użytkownika ), wysyła żądanie do http://google.com (The Server ), na swojej stronie głównej.
  4. Server następnie potwierdza wniosek, i odpowiada klientowi niektórych meta-danych (zwane nagłówki ), a następnie źródłowy strony.
  5. Klient odbiera wówczas źródłowy strony, i czyni go w widocznym ludzkiej strony.
  6. Do Użytkownika typy Stack Overfloww pasku wyszukiwania i prasyEnter
  7. Klient twierdzi, że dane do serwera .
  8. Serwer przetwarza te dane i odpowiada ze strony pasujące wyniki wyszukiwania.
  9. Klient , po raz kolejny, że renderuje strony dla użytkownika do przeglądania.

Programowanie

Programowanie po stronie serwera

Programowanie po stronie serwera to ogólna nazwa rodzajów programów uruchamianych na serwerze .

Używa

  • Przetwarzaj dane wprowadzone przez użytkownika.
  • Kompiluje strony.
  • Struktura aplikacji internetowych.
  • Interakcja z pamięcią stałą (SQL, pliki).

Przykładowe języki

  • PHP
  • Pyton
  • ASP.Net w C #, C ++ lub Visual Basic.
  • Prawie każdy język (C ++, C #, Java). Nie zostały one zaprojektowane specjalnie do tego zadania, ale obecnie są często używane w usługach sieciowych na poziomie aplikacji.

Programowanie po stronie klienta

Podobnie jak po stronie serwera, programowanie po stronie klienta to nazwa wszystkich programów uruchamianych na kliencie .

Używa

  • Twórz interaktywne strony internetowe.
  • Spraw, aby rzeczy działały dynamicznie na stronie internetowej.
  • Interakcja z tymczasowym przechowywaniem i przechowywaniem lokalnym (pliki cookie, lokalne przechowywanie).
  • Wysyłaj żądania do serwera i pobieraj z niego dane.
  • Zapewnij zdalną usługę dla aplikacji po stronie klienta, taką jak rejestracja oprogramowania, dostarczanie treści lub zdalne granie dla wielu graczy.

Przykładowe języki

  • JavaScript (przede wszystkim)
  • HTML *
  • CSS *
  • Każdy język działający na urządzeniu klienckim, który współdziała ze zdalną usługą, jest językiem po stronie klienta.

* HTML i CSS nie są tak naprawdę „językami programowania” jako takimi. Są to składnia znaczników, według której klient renderuje stronę dla użytkownika .

Madara Uchiha
źródło
8
+1 za dobrą odpowiedź z przykładami zastosowań! Po prostu nitpick: HTML i CSS nie są tak naprawdę językami programowania, więc prawdopodobnie nie należy ich porównywać z „PHP, ASP i prawie dowolnym językiem (C ++, C #, Java)”. ActionScript może być kolejnym dobrym przykładem języka po stronie klienta.
FrustratedWithFormsDesigner
5
Nie można ustalić, dlaczego serwer jest serwerem, a klient jest klientem. Serwer jest znany klientowi, ale nie na odwrót. Serwer powinien działać przez cały czas, nie ma żadnych oczekiwań klienta.
Chris McCall
3
Dodałbym fakt, że środowisko serwera jest bardziej kontrolowane. Nie masz pojęcia, kim jest klient. Istnieją również obawy dotyczące bezpieczeństwa (dla obu stron) podczas robienia rzeczy po stronie klienta.
stonemetal
1
Więc dodaj to, nie krępuj się.
Madara Uchiha
1
Nie zgadzam się z definicją @ ChrisMcCall do pewnego stopnia. Mogą istnieć wyjątki od tej reguły, na przykład gdy serwer może polegać na kliencie, który przetwarza dane lub świadczy usługę na serwerze, aby serwer mógł wykonać zadanie. Klienci dzielą także coraz większe obciążenia związane ze skalowalnością i wydajnością, na przykład w SPA. Te technologie zacierają tę definicję. Lepszą definicją może być to, że użytkownik końcowy i klient są synonimami. Oczekuje się, że użytkownik końcowy istnieje na urządzeniu klienckim, podczas gdy wszystkie inne węzły będą uważane za serwerowe.
RyanJMcGowan
27

Słowami laika:

Tutaj będę mówić tylko o programowaniu internetowym.

Programowanie po stronie klienta ma głównie związek z interfejsem użytkownika, z którym użytkownik wchodzi w interakcje. W programowaniu internetowym to przeglądarka, na komputerze użytkownika, uruchamia kod i odbywa się to głównie w javascript, flash itp. Ten kod musi działać w różnych przeglądarkach.

Jego główne zadania to:

  • sprawdzanie poprawności danych wejściowych (sprawdzanie poprawności musi być wykonane na serwerze. Nadmiarowe sprawdzanie poprawności w kliencie można wykorzystać, aby uniknąć wywołań serwera, gdy szybkość jest bardzo ważna.)
  • animacja
  • manipulowanie elementami interfejsu użytkownika
  • stosowanie stylów
  • niektóre obliczenia są wykonywane, gdy nie chcesz tak często odświeżać strony

Osoba odpowiedzialna za programowanie przedniej musi wiedzieć :

  • javascript
  • css
  • HTML
  • podstawowy projekt graficzny
  • Ajax
  • może Flash
  • niektóre zewnętrzne biblioteki javascript, takie jak JQuery
  • Projekt interfejsu użytkownika
  • projektowanie informacji itp.

Programowanie po stronie serwera ma związek z generowaniem dynamicznej zawartości. Działa na serwerach. Wiele z tych serwerów jest „bezgłowych”. Większość stron internetowych nie jest statyczna, przeszukują bazę danych w celu wyświetlenia zaktualizowanych spersonalizowanych informacji. Ta strona współdziała z zapleczem, jak powiedzmy, z bazą danych.

To programowanie można wykonać w wielu językach:

  • PHP
  • Java i jsp
  • żmija
  • Perl
  • Pyton
  • Ruby on Rails itp.

Ten kod dotyczy:

  • Zapytanie do bazy danych
  • Zakoduj dane w formacie HTML
  • Wstaw i zaktualizuj informacje w bazie danych
  • Reguły biznesowe i obliczenia

Osoba odpowiedzialna za programowanie po stronie serwera musi wiedzieć:

  • niektóre z wyżej wymienionych języków
  • HTML
  • SQL,
  • skrypty powłoki linux / unix
  • OOP
  • reguły biznesowe itp.
Tulains Córdova
źródło
„Osoba odpowiedzialna za programowanie front-end musi wiedzieć” Musisz? Powiedziałbym, że możesz doskonale przetrwać tylko przy pomocy HTML, CSS, JavaScript i Ajax. Powiedzenie, że programowanie po stronie serwera ma związek z generowaniem dynamicznej treści, a nie powiedzenie tego samego po stronie klienta, prawdopodobnie da niewłaściwą intuicję ...
nbro
„Większość stron internetowych nie jest statyczna, przeszukują bazę danych w celu wyświetlenia zaktualizowanych spersonalizowanych informacji. Ta strona współdziała z zapleczem, na przykład z bazą danych”. Sformułowałbym to w następujący sposób: „Strony są generowane dynamicznie przez wypełnienie dynamicznych części zmienną zawartością, która jest zwykle pobierana z bazy danych. Back-end jest już wszystkim, co związane z programowaniem po stronie serwera, IMO.
nbro
Zasadniczo powiedziałbym: „... osoba powinna wiedzieć ...”, a nie „musi” ...
nbro
@ nbro Dlaczego nie napiszesz własnej odpowiedzi?
@ColeTrumbo Jaki jest związek między moim komentarzem a twoim? Czy ludzie mogą krytykować odpowiedzi innych, aby je poprawić?
nro
14

Inne odpowiedzi koncentrowały się na to, co jest po stronie klienta i programowania po stronie serwera: jakie języki są najczęściej wykorzystywane, jakie zadania muszą być wykonane, itp

Jest to absolutnie słuszne, ale brakuje mi trochę skupienia się na różnicach między oboma rodzajami programowania w kontekście programowania internetowego. Pozwól mi spróbować rozwiązać ten problem.

Bezpieczeństwo i uprawnienia

W programowaniu po stronie klienta nie masz dostępu do pełnego systemu ze względów bezpieczeństwa. Użytkownik niekoniecznie ufa każdemu kawałkowi kodu, który jest pobierany z sieci i wykonywany na jego komputerze, i jest to główny cel projektowania środowiska po stronie klienta (przeglądarki i silnika JavaScript): zapewnienie izolowanego środowiska gdzie kod klienta może zostać wykonany, ale nie może uzyskać dostępu do niczego poza dozwolonym zakresem.

W programowaniu po stronie serwera dobrą praktyką jest również ograniczenie dostępu każdej aplikacji do systemu bazowego, ale jest to znacznie mniej wymuszone na tobie, ponieważ ostatecznie ty lub twoja firma kontroluje ten system. Ten projekt „izolowanej klatki” nie jest wbudowany w narzędzia i języki programowania po stronie serwera, ale jest realizowany poprzez konfigurację instalacji (użycie dedykowanych użytkowników z ograniczonymi uprawnieniami, wybranie portów, które wymagają lub nie wymagają uprawnień roota itp.).

Wdrożenie i platforma

W programowaniu po stronie serwera wdrażanie musi odbywać się spoza kodu, przy użyciu jakiegoś narzędzia (nawet jeśli jest to make installlub a git clone), a wdrożenie to zwykle odbywa się ręcznie - lub przynajmniej oczekuje się, że nastąpi w trybie pół-nadzorowanym droga. System (czyli system operacyjny), na którym wdrażasz, jest zwykle jednolity na wielu komputerach, ale można go w dużym stopniu dostosować do własnych potrzeb.

W programowaniu po stronie klienta wdrażanie odbywa się na podstawie kodu po stronie serwera, który obsługuje klientów automatycznie i bez nadzoru. Podstawowy system (głównie przeglądarka) może się znacznie różnić na znacznie większej liczbie komputerów. Aby wdrożenie było w ogóle wykonalne, należy zachować standardy, a jeden język i środowisko wykazują znacznie silniejszą tendencję.

Dlatego kopiowanie kodu po stronie serwera z jednego komputera na inny może zająć tygodnie, podczas gdy kod po stronie klienta jest zwykle trywialny do wykonania na różnych komputerach.

Skutki państwowe i wtórne

(Zastrzeżenie: jest to zdecydowanie najbardziej subiektywny punkt ze wszystkich. Prawdopodobnie jest wiele błędnych aspektów mojej argumentacji. Moim zdaniem jest to po prostu interesująca hipoteza).

W programowaniu po stronie serwera stan jest znacznie większym problemem, tzn. Jak pobierać i aktualizować dane na żądanie użytkownika z możliwością wystąpienia konfliktów z powodu współbieżności. Nawet jeśli większość tej złożoności jest przeniesiona na serwer bazy danych, obowiązkiem kodu po stronie serwera jest umożliwienie bazie danych zachowania gwarancji integralności danych poprzez prawidłowe użycie interfejsu (np. Nie używanie pamięci podręcznej dla aktualizacji, których nigdy nie widzi DB), podczas gdy celem po stronie serwera jest również nie przeciążanie bazy danych pracą i zmuszanie użytkownika do oczekiwania na odpowiedź.

W programowaniu po stronie klienta prezentowanie wyników użytkownikowi jest znacznie większym problemem, a to implikuje efekty wtórne (głównie drukowanie na ekranie). Nie oznacza to, że nie ma w tym żadnego stanu (np. Pliki cookie), a jedynie, że głównym celem kodu jest rzeczywista interakcja z użytkownikiem i nie może się to zdarzyć bez efektów wtórnych.

Dlatego programowanie po stronie klienta zwykle wymaga (w pewnym momencie) spojrzenia na ekran za pomocą demonstracji, aby sprawdzić, czy wszystkie kolory i układ są prawidłowe, podczas gdy programowanie po stronie serwera może się odbywać prawie wyłącznie w środowisku tekstowym, w którym zautomatyzowane testy sprawdzają, czy logika nadal robi to, co powinna.

logc
źródło
3

W żadnym wypadku nie jest to zamierzona odpowiedź; proponuję raczej jako punkt uzupełniający (w odpowiedzi na when do you use each of thempytanie), o którym jeszcze nie wspomniano w innych odpowiedziach, a mianowicie:

Ochrona własności intelektualnej

Kod źródłowy, który znajduje się po stronie klienta (np. W Javascript), jest łatwy do odczytania i / lub może być poddany inżynierii wstecznej, jeśli został zaciemniony.

Kod źródłowy, który znajduje się po stronie serwera, może jednak bezpiecznie chronić zastrzeżone algorytmy i zwracać tylko wynik; rodzaj czarnej skrzynki.

Kosta Kontos
źródło
Tak, ale to nie jest naprawdę najważniejszy punkt, serwer jest do serwera, a klient jest do odbioru. Część logiki najlepiej jest wykonać na kliencie (np. Koszyk, nie pozwalasz supermarketowi cały czas śledzić koszyka, prawda?), A część najlepiej na serwerze (pobieranie informacji z bazy danych)
Madara Uchiha,
@MadaraUchiha, stąd preambuła: „To w żadnym wypadku nie jest zamierzona odpowiedź; raczej proponuję ją jako punkt uzupełniający”
Kosta Kontos,
Czy to nie powinno być częścią innego postu? Jestem tu nowy, ale czy nie lepiej jest mieć jedną pełną odpowiedź niż rozproszoną?
Julix,