Які відмінності між програмуванням на стороні сервера та клієнта?


104

Я бачив запитання (головним чином щодо Stack Overflow), яким не вистачає цього елементарних знань. Сенс цього питання полягає в наданні хорошої інформації тим, хто її шукає, і тим, хто посилається на неї.

У контексті веб-програмування, чим відрізняються програмування на стороні сервера та програмування на стороні клієнта? Які мови належать до якої та коли ви використовуєте кожну з них?


5
Програмування на стороні сервера - це написання коду, який працює на сервері, використовуючи підтримувані сервером мови (наприклад, Java, PHP, C #; можна записати код, який виконується на сервері в JavaScript). Програмування на стороні клієнта - це запис коду, який запускається на клієнті, і виконується мовами, які можуть виконувати браузер, наприклад JavaScript.
FrustratedWithFormsDesigner


7
Я думаю, ви повинні включити у запитання, що ви посилаєтесь лише на веб-програмування, так як у нинішній формі відповіді не є повними. Наприклад, зв’язок сервер-клієнт не повинен здійснюватися в HTTP; клієнт може не використовувати браузер тощо.
K.Steff

@KSteff Ви можете редагувати моє запитання, щоб додати це.
Мадара Учіха

2
Коли в Інтернеті було молодо, це була хороша практика розмістити більшу частину вашої логіки важкого підйому на стороні сервера (java / c ++) і тримати логіку браузера навмисно тонкою - тим більше, що браузери тоді ще не були готові до першочергового часу. Тепер цей акцент змінився таким чином, що інструменти на базі браузера (Angular.js) знаходяться там, де основна частина логіки важкої підйомності веб-додатків зараз перебуває (далеко від все більш збитої логіки на стороні сервера). Цьому сприяли сучасні індустріальні браузери, що працюють в надзвичайно швидких двигунах javascript (в порядку величини нативного коду).
Скотт Стенсленд

Відповіді:


123

Фон

Веб-розробка - це все про спілкування. У цьому випадку спілкування між двома (2) сторонами через протокол HTTP:

  • Сервер - Ця сторона несе відповідальність за обслуговування сторінок.
  • Клієнт - Ця партія просить сторінки з сервера , і відображає їх користувачеві. У більшості випадків клієнтом є веб-браузер .
    • Користувач - Користувач використовує на клієнта для того , щоб переглядати веб - сторінки, заповнювати форми, дивитися відео онлайн і т.д.

Програмування кожної сторони стосується коду, який працює на певній машині, сервері або клієнті.

Основний приклад

  1. Користувач відкриває свій веб - браузер ( Client ).
  2. Користувач переходить на http://google.com .
  3. Клієнт (від імені користувача ), надсилає запит на http://google.com ( сервер ), для їх домашньої сторінки.
  4. Потім Сервер підтверджує запит і відповідає клієнту на деякі метадані (звані заголовками ) з подальшим джерелом сторінки.
  5. Потім Клієнт отримує джерело сторінки та перетворює його на веб-сайт, який можна побачити.
  6. У користувача типів Stack Overflowв рядок пошуку, і пресиEnter
  7. Клієнт відправляє ці дані на сервер .
  8. Сервер обробляє ці дані і відповідає на сторінці зіставлення результатів пошуку.
  9. Клієнт , ще раз, робить цю сторінку для користувача для перегляду.

Програмування

Програмування на стороні сервера

Програмування на стороні сервера - загальна назва типів програм, які виконуються на сервері .

Використання

  • Обробляти введення користувача.
  • Складає сторінки.
  • Структура веб-додатків.
  • Взаємодія з постійним сховищем (SQL, файли).

Приклад мови

  • PHP
  • Пітон
  • ASP.Net в C #, C ++ або Visual Basic.
  • Практично на будь-якій мові (C ++, C #, Java). Вони не були розроблені спеціально для завдання, але зараз часто використовуються для веб-служб на рівні додатків.

Програмування на стороні клієнта

Так само, як і на стороні сервера, програмування на стороні клієнта - це назва всіх програм, які виконуються на Клієнті .

Використання

  • Створіть інтерактивні веб-сторінки.
  • Зробіть так, щоб речі динамічно відбувалися на веб-сторінці.
  • Взаємодіяти з тимчасовим зберіганням та локальним сховищем (Cookies, localStorage).
  • Надсилайте запити на сервер та отримуйте з нього дані.
  • Надайте віддалений сервіс для клієнтських додатків, таких як реєстрація програмного забезпечення, доставка контенту або віддалене багатокористувацькі ігри.

Приклад мови

  • JavaScript (насамперед)
  • HTML *
  • CSS *
  • Будь-яка мова, що працює на клієнтському пристрої, який взаємодіє з віддаленою службою, є мовою на стороні клієнта.

* HTML і CSS насправді насправді не є "мовами програмування". Вони розмітка синтаксису , з допомогою якого клієнт виводить сторінку для користувача .


8
+1 за гарну відповідь із прикладами використання! Тільки до nitpick: HTML і CSS насправді не є мовами програмування, тому їх, мабуть, не слід порівнювати з "PHP, ASP і майже будь-якою мовою (C ++, C #, Java)". ActionScript може бути ще одним хорошим прикладом мови на стороні клієнта.
FrustratedWithFormsDesigner

5
Ви не можете визначити, чому сервер є сервером, а клієнт - клієнтом. Клієнт знає про сервер, але не навпаки. Очікується, що сервер буде виконуватися постійно, очікувань клієнтів немає.
Кріс МакКолл

3
Я б додав той факт, що середовище сервера більш контрольоване. Ви не маєте поняття, що таке клієнт. Також є проблеми щодо безпеки (для обох сторін), коли це робиться на стороні клієнта.
каменеметал

1
Тож додайте його, не соромтеся.
Мадара Учіха

1
Я не згоден з визначенням @ ChrisMcCall до певної міри. З цього правила можуть бути винятки, наприклад, коли сервер може покластися на клієнта для обробки даних або надання сервісу для сервера для виконання завдання. Клієнти також діляться все більшим навантаженням на масштабованість та ефективність роботи, наприклад, у SPA. Ці технології розмивають це визначення. Кращим визначенням може бути те, що кінцевий користувач та клієнт є синонімами. Очікується, що кінцевий користувач існує на клієнтському пристрої, тоді як усі інші вузли вважатимуться серверними.
RyanJMcGowan

27

Словами мирянина:

Тут я розповім лише про веб-програмування.

Програмування на стороні клієнта пов'язане з інтерфейсом користувача, з яким користувач взаємодіє. У веб-розробці це браузер, на машині користувача, який запускає код, і це в основному робиться в JavaScript, флеш і т. Д. Цей код повинен працювати в різних браузерах.

Основними її завданнями є:

  • валідація вводу (перевірку потрібно виконати на сервері. Надмірне підтвердження в клієнті може бути використане для уникнення викликів сервера, коли швидкість дуже критична.)
  • анімація
  • маніпулювання елементами інтерфейсу
  • застосування стилів
  • деякі обчислення робляться, коли ви не хочете, щоб сторінка оновлювалася так часто

Особа, відповідальна за передній торцевій програмування повинен знати :

  • javascript
  • css
  • HTML
  • базовий графічний дизайн
  • Аякс
  • можливо, спалах
  • деякі сторонні бібліотеки javascript, такі як JQuery
  • Дизайн інтерфейсу
  • інформаційне оформлення тощо.

Програмування на стороні сервера пов'язане з генерацією динамічного контенту. Він працює на серверах. Багато з цих серверів "без голови". Більшість веб-сторінок не є статичними, вони шукають в базі даних, щоб показати користувачеві оновлену персоналізовану інформацію. Ця сторона взаємодіє із задньою частиною, як, скажімо, базою даних.

Це програмування можна виконати багатьма мовами:

  • PHP
  • Java та jsp
  • асп
  • Perl
  • Пітон
  • Рубін на рейках тощо.

Цей код пов'язаний з:

  • Запит на базу даних
  • Кодуйте дані в html
  • Вставте та оновіть інформацію в базу даних
  • Правила бізнесу та розрахунки

Особа, яка відповідає за програмування на сервері, повинна знати:

  • деякі мови, згадані вище
  • HTML
  • SQL,
  • Сценарії оболонок Linux / Unix
  • ООП
  • правила ведення бізнесу тощо.

"Особа, відповідальна за програмування на передньому кінці, повинна знати" Повинен? Я б сказав, що ви можете ідеально вижити лише за допомогою HTML, CSS, Javascript та Ajax. Скажімо, що програмування на стороні сервера пов’язане з генеруванням динамічного контенту, а не сказати те саме для клієнтської сторони, ймовірно, дасть неправильну інтуїцію ...
nbro

"Більшість веб-сторінок не є статичними, вони здійснюють пошук у базі даних, щоб показати користувачеві оновлену персоналізовану інформацію. Ці сторони взаємодіють із задньою частиною, як, скажімо, базою даних." Я б перефразовував це так: "Сторінки генеруються динамічно, заповнюючи динамічні частини змінним контентом, який витягується, як правило, з бази даних. Задній бік - це вже все, що стосується програмування на стороні сервера, IMO.
nbro

Знову ж таки, загалом я б сказав "... людина повинна знати ...", а не "мусить" ...
nbro

@nbro Чому ти просто не напишеш власну відповідь?

@ColeTrumbo Який зв’язок між моїм коментарем та вашим? Чи можуть люди критикувати відповіді інших, щоб покращити їх?
nbro

14

Інші відповіді були зосереджені на тому, що таке клієнтське та серверне програмування: які мови в основному використовуються, які завдання потрібно виконати тощо.

Це абсолютно правильно, але я пропускаю трохи акцентувати увагу на відмінності між обома типами програмування в контексті веб-програмування. Дозвольте спробувати вирішити це.

Безпека та дозволи

У програмуванні на стороні клієнта ви не маєте доступу до повної системи через проблеми безпеки. Користувачеві не обов’язково довіряти кожен фрагмент коду, який завантажується з Інтернету та виконується на його машині, і це головна мета дизайну для клієнтського середовища (браузера та двигуна JavaScript): забезпечити ізольоване середовище де клієнтський код може виконуватись, але не може отримати доступ до нічого, що не дозволено.

У серверному програмуванні добре застосовувати також обмеження доступу кожної програми до базової системи, але це значно менше накладається на вас, оскільки, зрештою, ви або ваша компанія контролюєте цю систему. Цей дизайн "ізольованої клітки" не вбудований у інструменти та мови програмування на стороні сервера, а здійснюється за допомогою установки інсталяції (використовуючи виділених користувачів з обмеженими дозволами, вибираючи порти, які вимагають або не потребують кореневих дозволів тощо).

Розгортання та платформа

У програмуванні на стороні сервера розгортання має відбуватися за межами коду, використовуючи якийсь інструмент (навіть якщо він є make installчи а git clone), і це розгортання зазвичай ручне - або, принаймні, очікується, що воно відбудеться під наглядом шлях. Система (мається на увазі ОС), в якій ви розгортаєтесь, зазвичай є рівномірною для декількох машин, але вона може бути сильно налаштована під ваші потреби.

У програмуванні на стороні клієнта розгортання відбувається з вашого серверного коду, який обслуговує клієнтів автоматично та без нагляду. Базова система (мається на увазі головним чином браузер) може бути дуже різною для значно більшої кількості машин. Для того, щоб зробити розгортання взагалі можливим, потрібно дотримуватися стандартів, і існує набагато сильніша тенденція до єдиної мови та середовища.

Ось чому копіювання коду на стороні сервера з однієї машини на інший може зайняти кілька тижнів, тоді як код на стороні клієнта зазвичай тривіальний для виконання на різних машинах.

Державні та вторинні ефекти

(Відмова: це, безумовно, самий суб'єктивний пункт із усіх. Напевно, у моїй аргументації є багато неправильних аспектів. На мою думку, це просто цікава гіпотеза.)

У серверному програмуванні стан викликає набагато більшу стурбованість, тобто, як отримати та оновити дані на вимогу користувача з можливістю конфліктів через одночасність. Навіть якщо більша частина цієї складності завантажена на сервер бази даних, це відповідальність коду на стороні сервера, щоб дозволити базі даних зберігати гарантії цілісності даних, використовуючи правильно свій інтерфейс (наприклад, не використовувати кеш для оновлень, які ніколи не бачать БД), хоча кодом на сервері також є мета не перевантажувати базу даних роботою, а користувач чекати відповіді.

У програмуванні на стороні клієнта представлення результатів користувачеві викликає набагато більшу стурбованість, і це передбачає вторинні ефекти (переважно друк на екран). Це не означає, що немає жодної держави (наприклад, файли cookie), а лише те, що головна мета коду - це фактично взаємодія з користувачем, і це не може відбутися без вторинних наслідків.

Ось чому програмування на стороні клієнта зазвичай вимагає (у якийсь момент) дивитися на екран з демонстраційною версією, щоб перевірити, чи всі кольори та макет правильні, тоді як програмування на стороні сервера може відбуватися майже виключно в текстово-орієнтованому середовищі, де автоматизовано тести перевіряють, чи логіка все ще робить те, що належить робити.


3

Це аж ніяк не має бути прийнятою відповіддю; радше я пропоную це як додатковий пункт (у відповідь на when do you use each of themзапитання), який поки що не згадується в інших відповідях, а саме:

Захист інтелектуальної власності

Вихідний код, що знаходиться на стороні клієнта (наприклад, у Javascript), легко читається та / або може бути реверсивним, якщо він був затуманений.

Вихідний код, який знаходиться на стороні сервера, проте може безпечно захищати захищені алгоритми і лише повертати результат; чорна скринька сортів.


Так, але це насправді не найважливіший момент, сервер є там, щоб сервер, а клієнт - там, щоб отримувати. Деяка логіка найкраще виконувати на клієнті (наприклад, кошик для покупок, ви не дозволяєте супермаркету постійно відслідковувати вашу кошик, чи не так?), А деякі найкраще робити на сервері (отримання інформації з бази даних)
Мадара Учіха

@MadaraUchiha, звідси преамбула: "Це аж ніяк не є прийнятною відповіддю; скоріше я пропоную це як додатковий пункт"
Коста Контос

Чи не повинно це бути частиною іншого допису? Я новачок тут, але хіба не бажано мати одну повну відповідь, ніж розсіяні?
Джулікс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.