Каковы различия между программированием на стороне сервера и на стороне клиента?

104

Я видел вопросы (в основном о переполнении стека), в которых отсутствуют базовые знания. Суть этого вопроса - предоставить хорошую информацию тем, кто ищет ее, и тем, кто на нее ссылается.

Каковы различия между программированием на стороне сервера и программированием на стороне клиента в контексте веб-программирования? Какие языки принадлежат к какому и когда вы используете каждый из них?

Мадара Учиха
источник
5
Программирование на стороне сервера - это написание кода, который выполняется на сервере, с использованием языков, поддерживаемых сервером (таких как Java, PHP, C #; возможно написание кода, который выполняется на стороне сервера, в JavaScript). Клиентское программирование - это написание кода, который будет выполняться на клиенте, и выполняется на языках, которые могут выполняться браузером, таких как JavaScript.
FrustratedWithFormsDesigner
1
Это довольно хорошо: programmers.stackexchange.com/questions/138561/…
JeffO
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 на самом деле не являются "языками программирования" сами по себе. Это синтаксис разметки, с помощью которого Клиент отображает страницу для Пользователя .

Madara Uchiha
источник
8
+1 за хороший ответ с примерами использования! Просто чтобы придираться: HTML и CSS на самом деле не являются языками программирования, поэтому их, вероятно, не следует сравнивать с «PHP, ASP и почти любым языком (C ++, C #, Java)». ActionScript может быть еще одним хорошим примером клиентского языка.
FrustratedWithFormsDesigner
5
Вы не можете определить, почему сервер является сервером, а клиент - клиентом. Сервер известен клиенту, но не наоборот. Ожидается, что сервер будет работать постоянно, ожидания клиентов отсутствуют.
Крис Макколл
3
Я бы добавил тот факт, что серверная среда более контролируема. Вы понятия не имеете, что такое клиент. Также существуют проблемы безопасности (для обеих сторон) при выполнении действий на стороне клиента.
каменный металл
1
Так что добавьте это, не стесняйтесь.
Мадара Учиха
1
Я не согласен с определением @ ChrisMcCall в точку. Из этого правила могут быть исключения, например, когда сервер может полагаться на клиента для обработки данных или предоставлять серверу услугу для выполнения задачи сервером. Клиенты также распределяют все большую нагрузку на масштабируемость и производительность, например в SPA. Эти технологии стирают это определение. Лучшим определением может быть то, что конечный пользователь и клиент являются синонимами. Ожидается, что конечный пользователь существует на клиентском устройстве, тогда как все остальные узлы будут рассматриваться на стороне сервера.
RyanJMcGowan
27

По словам непрофессионала:

Здесь я буду говорить только о веб-программировании.

Программирование на стороне клиента в основном связано с пользовательским интерфейсом, с которым взаимодействует пользователь. В веб-разработке это браузер, на компьютере пользователя, который выполняет код, и в основном это делается на javascript, flash и т. Д. Этот код должен работать в различных браузерах.

Его основными задачами являются:

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

Лицо, ответственное за передней торцевой программирования должен знать :

  • Javascript
  • CSS
  • HTML
  • базовый графический дизайн
  • Ajax
  • может быть Flash
  • некоторые сторонние библиотеки javascript, такие как JQuery
  • Дизайн интерфейса
  • информационный дизайн и др.

Программирование на стороне сервера связано с генерацией динамического контента. Он работает на серверах. Многие из этих серверов являются "безголовыми". Большинство веб-страниц не являются статичными, они выполняют поиск в базе данных, чтобы показать пользователю обновленную персональную информацию. Эта сторона взаимодействует с серверной частью, например, с базой данных.

Это программирование может быть сделано на многих языках:

  • PHP
  • Java и JSP
  • гадюка
  • Perl
  • питон
  • Ruby on Rails и др.

Этот код имеет отношение к:

  • Запрос к базе данных
  • Кодировать данные в HTML
  • Вставьте и обновите информацию в базе данных
  • Деловые правила и расчеты

Ответственный за программирование на стороне сервера должен знать:

  • некоторые из языков, упомянутых выше
  • HTML
  • SQL,
  • сценарии оболочки linux / unix
  • OOP
  • деловые правила и т. д.
Тулаинс Кордова
источник
"Человек, отвечающий за программирование внешнего интерфейса, должен знать" Должен? Я бы сказал, что вы можете прекрасно выжить только с HTML, CSS, Javascript и Ajax. Сказать, что программирование на стороне сервера связано с генерацией динамического контента, и не сказать то же самое для клиентской стороны, вероятно, даст неправильная интуиция ...
nbro
«Большинство веб-страниц не являются статичными, они выполняют поиск в базе данных, чтобы показать пользователю обновленную персонализированную информацию. Эта сторона взаимодействует с серверной частью, как, скажем, база данных». Я бы перефразировал его следующим образом: «Страницы генерируются динамически, заполняя динамические части переменным содержимым, которое обычно выбирается из базы данных.
Бэкэнд
Опять же, в общем, я бы сказал "... человек должен знать ...", а не "должен" ...
nbro
@nbro Почему бы тебе просто не написать свой собственный ответ?
@ColeTrumbo Какая связь между моим комментарием и вашим? Могут ли люди критиковать ответы других, чтобы улучшить их?
nbro
14

Другие ответы были сосредоточены на том, что такое программирование на стороне клиента и на стороне сервера: какие языки чаще всего используются, какие задачи должны быть выполнены и т. Д.

Это абсолютно правильно, но я скучаю по тому, каковы различия между двумя типами программирования в контексте веб-программирования. Позвольте мне попытаться решить это.

Безопасность и разрешения

В программировании на стороне клиента у вас нет доступа ко всей системе из-за проблем безопасности. Пользователь не обязательно доверяет каждому фрагменту кода, который загружается из Интернета и выполняется на его компьютере, и это является основной целью разработки клиентской среды (браузера и механизма JavaScript): обеспечить изолированную среду где клиентский код может выполняться, но не может получить доступ к чему-либо за пределами разрешенной области.

В программировании на стороне сервера также целесообразно ограничивать доступ каждого приложения к базовой системе, но это гораздо менее навязано вам, поскольку в конечном итоге вы или ваша компания контролируете эту систему. Эта конструкция «изолированной клетки» не встроена в инструменты и языки программирования на стороне сервера, но реализуется посредством установки (использование выделенных пользователей с ограниченными разрешениями, выбор портов, которые требуют или не требуют корневых разрешений и т. Д.).

Развертывание и платформа

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

В программировании на стороне клиента развертывание происходит из кода на стороне сервера, который обслуживает клиентов автоматически и без присмотра. Базовая система (в основном браузер) может сильно отличаться на гораздо большем количестве машин. Чтобы сделать развертывание вообще осуществимым, необходимо соблюдать стандарты, и существует гораздо более сильная тенденция к единому языку и среде.

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

Состояние и вторичные эффекты

(Отказ от ответственности: это, безусловно, самый субъективный момент из всех. Возможно, в моей аргументации есть много неправильных аспектов. На мой взгляд, это просто интересная гипотеза.)

В программировании на стороне сервера состояние представляет собой гораздо большую проблему, то есть способы извлечения и обновления данных по запросу пользователя с возможностью возникновения конфликтов из-за параллелизма. Даже если большая часть этой сложности выгружается на сервер базы данных, серверный код отвечает за то, чтобы позволить базе данных сохранять свои гарантии целостности данных, правильно используя ее интерфейс (например, не использовать кэш для обновлений, которые никогда не видны БД), хотя целью серверного кода также является не перегружать базу данных работой и заставлять пользователя ждать ответа.

В программировании на стороне клиента представление результатов пользователю представляет гораздо большую проблему, и это подразумевает вторичные эффекты (в основном печать на экране). Это не означает, что состояние не задействовано (например, файлы cookie), а лишь то, что основная цель кода состоит в том, чтобы фактически взаимодействовать с пользователем, и это не может произойти без вторичных эффектов.

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

logc
источник
3

Это ни в коем случае не должно быть принятым ответом; скорее я предлагаю это в качестве дополнительного пункта (в ответ на when do you use each of themвопрос), который еще должен быть упомянут в других ответах, а именно:

Защита интеллектуальной собственности

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

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

Коста Контос
источник
Да, но это на самом деле не самый важный момент, сервер находится там, чтобы сервер, и клиент там, чтобы получить. Некоторая логика лучше всего работает на клиенте (например, корзина покупок, вы не позволяете супермаркету постоянно отслеживать вашу корзину покупок, не так ли?), А некоторая лучше всего делается на сервере (получение информации из базы данных)
Мадара Учиха
@MadaraUchiha, отсюда и преамбула: «Это ни в коем случае не является приемлемым ответом; скорее, я предлагаю его в качестве дополнительного пункта»
Коста Контос
Разве это не должно быть частью другого поста? Я новичок здесь, но не лучше ли иметь один полный ответ, чем разрозненные?
Julix