サーバー側とクライアント側のプログラミングの違いは何ですか?


104

この基本的な知識に欠ける質問(主にStack Overflowについて)を見てきました。この質問のポイントは、それを求めている人々とそれを参照している人々に良い情報を提供することです。

Webプログラミングのコンテキストでは、サーバー側プログラミングとクライアント側プログラミングの違いは何ですか?どの言語がどの言語に属し、どの言語をいつ使用しますか?


5
サーバー側のプログラミングとは、サーバーでサポートされている言語(Java、PHP、C#など。サーバー側で実行されるコードをJavaScriptで実行することができます)を使用して、サーバー上で実行するコードを記述します。クライアント側のプログラミングは、クライアントで実行されるコードを記述しており、JavaScriptなどのブラウザーで実行可能な言語で実行されます。
FrustratedWithFormsDesigner


7
現在のフォームでは回答が完全ではないため、Webプログラミングのみを参照する質問に含める必要があると思います。たとえば、サーバーとクライアントの通信をHTTPで行う必要はありません。クライアント側はブラウザーなどを使用しない可能性があります
-K.Steff

@KSteff質問を編集して追加してください。
マダラ

2
Webが若かった頃は、特にロジックの大部分をサーバー側(java / c ++)で処理し、ブラウザロジックを意図的に薄くしておくことをお勧めしました-特に当時のブラウザはプライムタイムに対応できなかったためです。現在、この強調は逆転し、ブラウザベースのツール(Angular.js)は、Webアプリケーションの大規模なリフティングロジックの大部分が(ますますサーバーサイドのロジックから離れて)存在するようになりました。これは、非常に高速なjavascriptエンジンを実行している最新の産業用の強力なブラウザー(ネイティブコードの規模内)によって促進されています。
スコットステンランド14年

回答:


123

バックグラウンド

Web開発とはコミュニケーションです。この場合、HTTPプロトコルを介した2者間の通信:

  • サーバー -このパーティが担当するサービス提供のページを。
  • クライアントは -このパーティーは要求からページをサーバー、およびユーザーに表示します。ほとんどの場合、クライアントはWebブラウザーです
    • ユーザー -ユーザーが使用するクライアントなど、Webサーフィンのフォームに記入し、オンラインビデオを視聴するために、

各側のプログラミングは、特定のマシン、サーバー、またはクライアントで実行されるコードを指します。

基本的な例

  1. ユーザーは、自分のWebブラウザ(開いたクライアント)。
  2. ユーザーはを閲覧http://google.com
  3. クライアント(の代わりにユーザー)に要求を送信http://google.comサーバーを自分のホームページのために、)。
  4. サーバーはその要求を承認し、(と呼ばれるいくつかのメタデータをクライアントに返信するヘッダページのソースが続きます)、。
  5. 次に、クライアントはページのソースを受け取り、人間が表示できるWebサイトにレンダリングします。
  6. ユーザータイプStack Overflow検索バーに、そしてプレスEnter
  7. クライアントがにそのデータを送信するサーバー
  8. サーバーは、そのデータを処理し、検索結果に一致するページで応答します。
  9. クライアントは、もう一度、ためにそのページをレンダリングするユーザーを表示します。

プログラミング

サーバー側プログラミング

サーバー側プログラミングは、サーバーで実行されるプログラムの種類の一般的な名前です。

用途

  • ユーザー入力を処理します。
  • ページをコンパイルします。
  • Webアプリケーションを構造化します。
  • 永続ストレージ(SQL、ファイル)と対話します。

サンプル言語

  • PHP
  • Python
  • C#、C ++、またはVisual BasicのASP.Net。
  • ほぼすべての言語(C ++、C#、Java)。これらはタスク専用に設計されたものではありませんが、現在ではアプリケーションレベルのWebサービスでよく使用されています。

クライアント側のプログラミング

サーバー側と同様に、クライアント側プログラミングは、クライアントで実行されるすべてのプログラムの名前です。

用途

  • インタラクティブなWebページを作成します。
  • Webページ上で動的に処理を行います。
  • 一時ストレージ、およびローカルストレージ(Cookie、localStorage)と対話します。
  • サーバーにリクエストを送信し、サーバーからデータを取得します。
  • ソフトウェア登録、コンテンツ配信、リモートマルチプレイヤーゲームなどのクライアント側アプリケーションにリモートサービスを提供します。

サンプル言語

  • JavaScript(主に)
  • HTML *
  • CSS *
  • リモートサービスと対話するクライアントデバイスで実行されている言語は、クライアント側の言語です。

* HTMLとCSSは、実際には「プログラミング言語」ではありません。これらは、クライアントユーザーのページをレンダリングするためのマークアップ構文です。


8
使用例とともに +1 簡単に言えば、HTMLとCSSは実際にはプログラミング言語ではないため、「PHP、ASP、およびほぼすべての言語(C ++、C#、Java)」と比較すべきではないでしょう。ActionScriptは、クライアント側言語の別の良い例かもしれません。
FrustratedWithFormsDesigner

5
サーバーがサーバーであり、クライアントがクライアントである理由を特定できません。サーバーはクライアントに知られていますが、その逆ではありません。サーバーは常に実行されることが期待されており、クライアントの期待はありません。
クリスマッコール

3
サーバー環境がより制御されているという事実を追加します。クライアントが何であるかわかりません。また、クライアント側で物事を行う際に、セキュリティ上の懸念があります(両方の当事者にとって)。
ストーンメタル

1
追加してください、お気軽に。
マダラ

1
私は@ChrisMcCallの定義にある程度同意しません。サーバーがタスクを完了するためにサーバーがデータを処理したり、サーバーにサービスを提供するためにクライアントに依存する場合など、そのルールには例外があります。また、クライアントは、SPAなどのスケーラビリティとパフォーマンスのために、増加する負荷を共有しています。これらのテクノロジーはその定義を曖昧にします。より良い定義は、エンドユーザーとクライアントが同義であるということです。エンドユーザーはクライアントデバイスに存在することが予想されますが、他のすべてのノードはサーバー側と見なされます。
-RyanJMcGowan

27

素人の言葉で:

ここでは、Webプログラミングについてのみ説明します。

クライアント側のプログラミングは、主にユーザーが操作するユーザーインターフェイスに関係しています。Web開発では、コードを実行するのはユーザーのマシンのブラウザーであり、主にjavascript、flashなどで実行されます。このコードはさまざまなブラウザーで実行する必要があります。

主なタスクは次のとおりです。

  • 入力の検証(検証はサーバーで行う必要があります。速度が非常に重要な場合は、クライアントでの冗長検証を使用してサーバー呼び出しを回避できます。)
  • アニメーション
  • UI要素の操作
  • スタイルを適用する
  • ページをそれほど頻繁に更新したくない場合は、いくつかの計算が行われます

担当者のフロントエンドプログラミングのは知っている必要があります

  • javascript
  • CSS
  • HTML
  • 基本的なグラフィックデザイン
  • アヤックス
  • 多分フラッシュ
  • JQueryのようないくつかのサードパーティのjavascriptライブラリ
  • UIデザイン
  • 情報デザインなど

サーバー側のプログラミングは、動的コンテンツの生成に関係しています。サーバー上で実行されます。これらのサーバーの多くは「ヘッドレス」です。ほとんどのWebページは静的ではなく、データベースを検索して、ユーザーに更新された個人情報を表示します。このサイドは、データベースなどのバックエンドと対話します。

このプログラミングは、多くの言語で実行できます。

  • PHP
  • Javaとjsp
  • asp
  • Perl
  • Python
  • Ruby on Railsなど

このコードは次のことと関係しています:

  • データベースのクエリ
  • データをHTMLにエンコードする
  • データベースへの情報の挿入と更新
  • ビジネスルールと計算

サーバー側のプログラミング担当者は次のことを知っている必要があります。

  • 上記の言語の一部
  • HTML
  • SQL、
  • linux / unixシェルスクリプト
  • OOP
  • ビジネスルールなど

「フロントエンドプログラミングの担当者は知っている必要があります」HTML、CSS、Javascript、Ajaxだけで完璧に生き残ることができると思います。サーバー側のプログラミングは動的コンテンツの生成に関係していると言って、クライアント側にも同じことを言っていないのはおそらく間違った直感を与えるでしょう
...-nbro

「ほとんどのWebページは静的ではありません。ユーザーが更新した個人情報を表示するためにデータベースを検索します。このサイドは、データベースなどのバックエンドと対話します。」「ページは、通常データベースからフェッチされる可変コンテンツで動的部分を埋めることにより動的に生成されます。バックエンドは、サーバー側プログラミング、IMOに関連するすべてのものです。
nbro

繰り返しになりますが、一般に、「...人は知っておくべき...」ではなく、「必須」ではありません
...-nbro

@nbroなぜあなたはあなた自身の答えを書いてみませんか?

@ColeTrumbo私のコメントとあなたのコメントの関係は?人々は他人の答えを批判して、彼らを改善することができますか?
-nbro

14

他の答えは、クライアント側およびサーバー側のプログラミングとは何かに焦点を当ててます。主に使用される言語、実行する必要のあるタスクなどです。

これは絶対に正しいことですが、 Webプログラミングのコンテキストで、両方のタイプのプログラミングの違い何であるかという点に少し焦点を当てていません。それに対処してみましょう。

セキュリティと権限

クライアント側のプログラミングでは、セキュリティ上の懸念のため、システム全体にアクセスできません。ユーザーは、Webからダウンロードされ、自分のマシンで実行されるすべてのコードを必ずしも信頼する必要はありません。これは、クライアント側環境(ブラウザーとJavaScriptエンジン)の主要な設計目標です。クライアントコードは実行できますが、許可されたスコープ外にはアクセスできません。

サーバー側のプログラミングでは、基礎となるシステムへの各アプリケーションのアクセスも制限することをお勧めしますが、最終的にはあなたまたはあなたの会社がそのシステムを制御しているため、これはあまり強制されません。この「隔離されたケージ」設計は、サーバー側のプログラミングツールや言語に組み込まれていませんが、インストールのセットアップ(アクセス許可が制限された専用ユーザーの使用、ルートアクセス許可が必要または不要なポートの選択など)によって実現されます。

展開とプラットフォーム

サーバー側のプログラミングでは、何らかのツールを使用して(make installまたはそうであっても)コードの外部からgit clone展開する必要があり、この展開は通常手動で行われます-または少なくとも、半監視下で行われることが予想されます仕方。展開するシステム(OSを意味します)は通常、多数のマシンで統一されていますが、ニーズに合わせて大幅にカスタマイズできます。

クライアント側のプログラミングでは、サーバー側のコードから展開が行われます。このコードは、監督なしで自動的にクライアントにサービスを提供します。基になるシステム(主にブラウザーを意味します)は、非常に多くのマシン間で大きく異なる場合があります。展開をまったく実行可能にするためには、標準を維持する必要があり、単一の言語と環境へのはるかに強い傾向があります。

これが、サーバー側のコードをあるマシンから別のマシンにコピーするのに数週間かかることがある理由です。一方、クライアント側のコードは通常、異なるマシンで実行するのは簡単です。

状態と二次効果

(免責事項:これはすべての中で最も主観的な点です。おそらく、私の議論には多くの間違った側面があります。私の見解では、これは単なる興味深い仮説です。)

サーバー側のプログラミングでは、状態ははるかに大きな懸念事項です。つまり、ユーザーの要求に応じて、同時実行による競合の可能性があるデータを取得および更新する方法を意味します。この複雑さのほとんどがデータベースサーバーにオフロードされた場合でも、データベースがインターフェイスを正しく使用してデータの整合性を保証できるようにするのはサーバー側のコードの責任です(たとえば、 DB)、サーバー側のコードの目標でもありますが、作業でデータベースを過負荷にせず、ユーザーが応答を待機し続けることです。

クライアント側のプログラミングでは、ユーザーに結果を提示することははるかに大きな懸念事項であり、これは二次的な影響(主に画面への印刷)を意味します。これは、関係する状態(Cookieなど)がないことを意味するのではなく、コードの主な目標は実際にユーザーとやり取りすることであり、これは二次的な効果なしでは起こり得ません。

これが、クライアント側のプログラミングが通常(ある時点で)すべての色とレイアウトが正しいことを確認するためにデモで画面を見ることを必要とするのに対し、サーバー側のプログラミングは、自動化されたテキスト指向環境テストでは、ロジックがまだ想定どおりに機能していることを確認します。


3

これは、受け入れられた回答を意図したものではありません。むしろ、私はそれを(when do you use each of them質問に対する回答として)これまでの他の答えでまだ言及されていない補完的なポイントとして提供します。すなわち:

知的財産の保護

クライアント側(Javascriptなど)にあるソースコードは、難読化されていれば簡単に読み取り可能、および/またはリバースエンジニアリングできます。

ただし、サーバー側にあるソースコードは、独自のアルゴリズムを安全に保護し、結果のみを返すことができます。種類のブラックボックス。


ええ、しかしそれは本当に最も重要なポイントではありません。サーバーはサーバーにあり、クライアントは受信するためにあります。いくつかのロジックはクライアント上で最適に実行されます(ショッピングカートのように、スーパーマーケットに常にショッピングカートを追跡させないようにしますか?)、そしていくつかはサーバー上で最適に実行されます(データベースから情報を取得)
マダラ

@MadaraUchiha、したがって前文:「これは決して受け入れられた答えを意図したものではなく、むしろ補完的なポイントとして提供します」
コスタコントス

これは別の投稿の一部ではありませんか?私はここに新しいですが、散在するものよりも1つの完全な答えを持っていることは好ましくありませんか?
ジュリックス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.