web-dev-qa-db-ja.com

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

この基本的な知識がない質問(主にスタックオーバーフローに関する)を見てきました。この質問の要点は、それを探している人とそれを参照している人に良い情報を提供することです。

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

108
Madara's Ghost

バックグラウンド

Web開発はすべてコミュニケーションに関するものです。この場合、HTTPプロトコルを介した2つのパーティ間の通信:

  • サーバー-このパーティーはサービングページを担当します。
  • クライアント-このパーティリクエストサーバーからのページ、それらをユーザーに表示します。ほとんどの場合、クライアントはWebブラウザーです。
    • User-ユーザーses theClientウェブを閲覧したり、フォームに記入したり、オンラインでビデオを見たりするためなど。

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

基本的な例

  1. UserがWebブラウザを開きます(Client)。
  2. Userhttp://google.com を参照します。
  3. ClientUserに代わって)リクエストを送信します http://google.com (theServer)に、彼らのホームページのために。
  4. 次に、Serverがリクエストを確認し、クライアントにメタデータ(headersと呼ばれる)を返し、その後にページのソース。
  5. 次に、Clientがページのソースを受け取り、rendersで人間が表示できるWebサイトにそれを送ります。
  6. Userタイプ Stack Overflow 検索バーに入力し、 Enter
  7. ClientがそのデータをServerに送信します。
  8. Serverはそのデータを処理し、検索結果と一致するページで応答します。
  9. Clientは、再びUserが表示するページをレンダリングします。

プログラミング

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

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

用途

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

言語の例

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

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

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

用途

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

言語の例

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

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

125
Madara's Ghost

素人の言葉で:

ここでは、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
  • ビジネスルールなど.
27

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

これは完全に正しいですが、Webプログラミングのコンテキストでは、両方のタイプのプログラミング間の違いは何ですかに少し焦点を当てることができません。それを取り上げさせてください。

セキュリティと権限

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

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

展開とプラットフォーム

サーバー側のプログラミングでは、何らかのツールを使用して(たとえそれがmake installまたはgit clone)、そしてこの展開は通常手動で行われます—または、少なくとも、監視された方法で行われることが期待されます。デプロイするシステム(OSを意味します)は通常、複数のマシンで同じですが、ニーズに合わせて大幅にカスタマイズできます。

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

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

状態と二次的影響

(免責事項:これは、これまでで最も主観的なポイントです。おそらく、私の主張には多くの誤った側面があります。それは、私の見解では、興味深い仮説にすぎません。)

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

クライアント側のプログラミングでは、結果をユーザーに提示することは非常に大きな懸念事項であり、これは副次的な影響(主に画面への出力)を意味します。これは、関係する状態(Cookieなど)がないことを意味しているのではなく、コードの主な目的が実際にユーザーとのインターフェースをとることであり、これは副次的な影響なしには起こり得ないことです。

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

14
logc

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

知的財産の保護

(JavaScriptなどの)クライアント側にあるソースコードは、簡単に読み取ることができ、難読化されている場合はリバースエンジニアリングすることができます。

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

3
Kosta Kontos