この基本的な知識がない質問(主にスタックオーバーフローに関する)を見てきました。この質問の要点は、それを探している人とそれを参照している人に良い情報を提供することです。
Webプログラミングのコンテキストで、サーバー側プログラミングとクライアント側プログラミングの違いは何ですか?どの言語がどの言語に属していて、どの言語をいつ使用しますか?
Web開発はすべてコミュニケーションに関するものです。この場合、HTTPプロトコルを介した2つのパーティ間の通信:
各サイドのプログラミングは、特定のマシン、サーバー、またはクライアントで実行されるコードを指します。
サーバー側プログラミングは、Serverで実行されるプログラムの種類の一般的な名前です。
サーバー側と同様に、クライアント側プログラミングは、Clientで実行されるすべてのプログラムの名前です。
* HTMLとCSSは、それ自体「プログラミング言語」ではありません。これらは、ClientがUserのページをレンダリングするためのマークアップ構文です。
素人の言葉で:
ここでは、Webプログラミングについてのみ説明します。
クライアント側プログラミングは主に、ユーザーが操作するユーザーインターフェイスに関係しています。 Web開発では、コードを実行するのはユーザーのマシンのブラウザーであり、主にjavascript、flash、などで行われます。このコードはさまざまなブラウザーで実行する必要があります。
その主なタスクは:
担当者フロントエンドプログラミング知っておくべきこと:
サーバー側プログラミングは動的コンテンツの生成に関係しています。サーバー上で実行されます。これらのサーバーの多くは「ヘッドレス」です。ほとんどのWebページは静的ではなく、ユーザーが更新した個人情報を表示するためにデータベースを検索します。このサイドは、データベースなどのバックエンドと対話します。
このプログラミングは多くの言語で行うことができます:
このコードは次のものと関係があります:
サーバー側プログラミングの担当者は、次のことを知っている必要があります。
他の回答はwhatがクライアント側とサーバー側のプログラミングに焦点を当てています:どの言語が主に使用されているか、どのようなタスクを実行する必要があるかなどです。
これは完全に正しいですが、Webプログラミングのコンテキストでは、両方のタイプのプログラミング間の違いは何ですかに少し焦点を当てることができません。それを取り上げさせてください。
クライアント側のプログラミングでは、セキュリティ上の理由から、システム全体にアクセスすることはできません。ユーザーは、Webからダウンロードされて自分のマシンで実行されるすべてのコードを必ずしも信頼する必要はありません。これが、クライアント側環境(ブラウザーとJavaScriptエンジン)の主な設計目標です。分離された環境を提供することです。クライアントコードは実行できますが、許可されたスコープの外にはアクセスできません。
サーバー側プログラミングでは、基盤となるシステムへの各アプリケーションのアクセスも制限することをお勧めしますが、最終的には、あなたまたはあなたの会社がそのシステムを制御するため、これははるかに少なく強制されます。この「分離されたケージ」の設計はnotがサーバー側のプログラミングツールと言語に組み込まれていますが、インストールのセットアップ(アクセス許可が制限された専用ユーザーを使用し、必要または不要なポートを選択する)によって実現されますルート権限など)。
サーバー側のプログラミングでは、何らかのツールを使用して(たとえそれがmake install
またはgit clone
)、そしてこの展開は通常手動で行われます—または、少なくとも、監視された方法で行われることが期待されます。デプロイするシステム(OSを意味します)は通常、複数のマシンで同じですが、ニーズに合わせて大幅にカスタマイズできます。
クライアント側のプログラミングでは、サーバー側のコードからデプロイメントが行われ、監督なしで自動的にクライアントにサービスを提供します。基盤となるシステム(主にブラウザを意味します)は、より多くのマシン間で非常に異なる可能性があります。展開をまったく実行可能にするためには、標準を維持する必要があり、単一の言語と環境への傾向がはるかに強くなります。
これが、サーバー側のコードをあるマシンから別のマシンにコピーするのに数週間かかる可能性がある理由ですが、クライアント側のコードは通常、異なるマシンで実行するのは簡単です。
(免責事項:これは、これまでで最も主観的なポイントです。おそらく、私の主張には多くの誤った側面があります。それは、私の見解では、興味深い仮説にすぎません。)
サーバー側プログラミングでは、状態ははるかに大きな懸念事項です。つまり、同時実行性による競合の可能性があるユーザーの要求に応じてデータを取得および更新する方法です。この複雑さのほとんどがデータベースサーバーにオフロードされている場合でも、データベースがそのインターフェイスを正しく使用することによってデータベースがデータの整合性を保証できるようにするのはサーバー側コードの責任です(たとえば、 DB)、これはサーバー側のコードの目標でもありますが、データベースを作業で過負荷にせず、ユーザーが応答を待ち続けるようにすることも目的です。
クライアント側のプログラミングでは、結果をユーザーに提示することは非常に大きな懸念事項であり、これは副次的な影響(主に画面への出力)を意味します。これは、関係する状態(Cookieなど)がないことを意味しているのではなく、コードの主な目的が実際にユーザーとのインターフェースをとることであり、これは副次的な影響なしには起こり得ないことです。
このため、クライアント側のプログラミングでは通常、(ある時点で)デモで画面を見て、すべての色とレイアウトが正しいことを確認する必要があります。一方、サーバー側のプログラミングは、自動化されているテキスト指向の環境でのみ発生します。テストでは、ロジックが想定どおりに動作していることを確認します。
これは、決して受け入れられる回答を意図したものではありません。むしろ私はそれを補足ポイントとして提供します(when do you use each of them
質問)これまでのところ、他の回答ではまだ言及されていません。
知的財産の保護
(JavaScriptなどの)クライアント側にあるソースコードは、簡単に読み取ることができ、難読化されている場合はリバースエンジニアリングすることができます。
ただし、サーバー側にあるソースコードは、独自のアルゴリズムを安全に保護し、結果のみを返すことができます。一種のブラックボックス。