Apa perbedaan antara pemrograman sisi server dan sisi klien?

104

Saya telah melihat pertanyaan (terutama di Stack Overflow), yang tidak memiliki pengetahuan dasar ini. Inti dari pertanyaan ini adalah untuk memberikan informasi yang baik bagi mereka yang mencarinya, dan mereka yang merujuknya.

Dalam konteks pemrograman web, apa perbedaan antara pemrograman sisi server dan pemrograman sisi klien? Bahasa mana yang termasuk di dalamnya, dan kapan Anda menggunakannya?

Madara Uchiha
sumber
5
Pemrograman sisi server adalah penulisan kode yang berjalan di server, menggunakan bahasa yang didukung oleh server (seperti Java, PHP, C #; dimungkinkan untuk menulis kode yang dijalankan pada sisi server dalam JavaScript). Pemrograman sisi klien adalah penulisan kode yang akan dijalankan pada klien, dan dilakukan dalam bahasa yang dapat dieksekusi oleh browser, seperti JavaScript.
FrustratedWithFormsDesigner
7
Saya pikir Anda harus memasukkan dalam pertanyaan yang Anda rujuk hanya untuk pemrograman web, karena dalam bentuk saat ini jawabannya tidak lengkap. Misalnya, komunikasi server-klien tidak perlu dilakukan dalam HTTP; sisi klien mungkin tidak menggunakan browser, dll.
K.Steff
@ KSteff Anda dipersilakan untuk mengedit pertanyaan saya untuk menambahkan itu.
Madara Uchiha
2
Ketika web masih muda itu adalah praktik yang baik untuk menempatkan sebagian besar dari logika Anda mengangkat sisi server (java / c ++) dan menjaga logika browser sengaja tipis - terutama karena browser saat itu tidak siap untuk prime time. Sekarang penekanan ini telah terbalik sehingga alat berbasis browser (Angular.js) adalah tempat sebagian besar aplikasi web mengangkat logika sekarang berada (jauh dari logika sisi server yang semakin dipreteli). Ini telah difasilitasi oleh browser kekuatan industri modern yang menjalankan mesin javascript yang sangat cepat (dalam urutan besarnya kode asli).
Scott Stensland

Jawaban:

123

Latar Belakang

Pengembangan web adalah tentang komunikasi. Dalam hal ini, komunikasi antara dua (2) pihak, melalui protokol HTTP:

  • The Server - Partai ini bertanggung jawab untuk melayani halaman.
  • The Client - Partai ini meminta halaman dari Server , dan menampilkannya kepada pengguna. Dalam kebanyakan kasus, klien adalah browser web .
    • The Pengguna - Pengguna menggunakan satu Client untuk surfing web, mengisi formulir, menonton video online, dll

Pemrograman masing-masing pihak, mengacu pada kode yang berjalan pada mesin tertentu, server atau klien.

Contoh dasar

  1. The Pengguna membuka web browser-nya (yang Client ).
  2. The Pengguna menelusuri ke http://google.com .
  3. The Client (pada nama pengguna ), mengirimkan permintaan ke http://google.com (yang Server ), untuk halaman rumah mereka.
  4. The Server kemudian mengakui permintaan, dan balasan klien dengan beberapa meta-data (disebut header ), diikuti oleh sumber halaman.
  5. The Client kemudian menerima sumber halaman, dan menjadikan itu menjadi sebuah website dapat dilihat manusia.
  6. The Pengguna jenis Stack Overflowke dalam kotak pencarian, dan menekanEnter
  7. The Client menyampaikan data tersebut ke Server .
  8. The Server memproses data, dan balasan dengan halaman yang cocok dengan hasil pencarian.
  9. The Client , sekali lagi, merender halaman untuk Pengguna untuk melihat.

Pemrograman

Pemrograman sisi server

Pemrograman sisi server, adalah nama umum untuk jenis program yang dijalankan pada Server .

Penggunaan

  • Memproses input pengguna.
  • Kompilasi halaman.
  • Struktur aplikasi web.
  • Berinteraksi dengan penyimpanan permanen (SQL, file).

Bahasa Contoh

  • PHP
  • Python
  • ASP.Net dalam C #, C ++, atau Visual Basic.
  • Hampir semua bahasa (C ++, C #, Java). Ini tidak dirancang khusus untuk tugas tersebut, tetapi sekarang sering digunakan untuk layanan web tingkat aplikasi.

Pemrograman sisi klien

Sama seperti sisi server, pemrograman sisi Klien adalah nama untuk semua program yang dijalankan pada Klien .

Penggunaan

  • Buat halaman web interaktif.
  • Buat hal-hal terjadi secara dinamis di halaman web.
  • Berinteraksi dengan penyimpanan sementara, dan penyimpanan lokal (Cookies, localStorage).
  • Kirim permintaan ke server, dan ambil data darinya.
  • Menyediakan layanan jarak jauh untuk aplikasi sisi klien, seperti pendaftaran perangkat lunak, pengiriman konten, atau permainan multi-pemain jarak jauh.

Bahasa contoh

  • JavaScript (terutama)
  • HTML *
  • CSS *
  • Bahasa apa pun yang berjalan pada perangkat klien yang berinteraksi dengan layanan jarak jauh adalah bahasa sisi klien.

* HTML dan CSS tidak benar-benar "bahasa pemrograman" per-se. Itu adalah sintaks markup yang digunakan Klien untuk membuat halaman untuk Pengguna .

Madara Uchiha
sumber
8
Beri +1 untuk jawaban yang baik dengan contoh penggunaan! Hanya untuk nitpick: HTML dan CSS sebenarnya bukan bahasa pemrograman, jadi mereka mungkin tidak boleh dibandingkan dengan "PHP, ASP, dan Hampir semua bahasa (C ++, C #, Java)". ActionScript mungkin merupakan contoh lain yang baik dari bahasa sisi klien.
FrustratedWithFormsDesigner
5
Anda gagal mengidentifikasi mengapa server adalah server dan klien adalah klien. Server diketahui oleh klien, tetapi tidak sebaliknya. Server diharapkan dapat dieksekusi setiap saat, tidak ada harapan klien.
Chris McCall
3
Saya akan menambahkan fakta bahwa lingkungan server lebih terkontrol. Anda tidak tahu apa itu klien. Juga ada masalah keamanan (untuk kedua belah pihak) ketika melakukan hal-hal di sisi klien.
stonemetal
1
Jadi tambahkan saja, silakan.
Madara Uchiha
1
Saya tidak setuju dengan definisi @ ChrisMcCall sampai batas tertentu. Mungkin ada pengecualian untuk aturan itu, seperti di mana server mungkin bergantung pada klien untuk memproses data atau menyediakan layanan ke server agar server menyelesaikan tugas. Klien juga berbagi jumlah peningkatan beban untuk skalabilitas dan kinerja seperti dalam SPA. Teknologi ini mengaburkan definisi itu. Definisi yang lebih baik bisa jadi pengguna akhir dan klien adalah sama. Diharapkan bahwa pengguna akhir ada di perangkat klien, sedangkan semua node lain akan dianggap sebagai sisi server.
RyanJMcGowan
27

Dalam kata-kata awam:

Di sini saya hanya akan berbicara tentang pemrograman web.

Pemrograman sisi klien sebagian besar berkaitan dengan antarmuka pengguna, yang dengannya pengguna berinteraksi. Dalam pengembangan web itu adalah browser, di mesin pengguna, yang menjalankan kode, dan itu terutama dilakukan dalam javascript, flash, dll. Kode ini harus dijalankan di berbagai browser.

Tugas utamanya adalah:

  • memvalidasi input (Validasi harus dilakukan di server. Validasi berlebihan di klien dapat digunakan untuk menghindari panggilan server ketika kecepatan sangat kritis.)
  • animasi
  • memanipulasi elemen UI
  • menerapkan gaya
  • beberapa perhitungan dilakukan ketika Anda tidak ingin halaman terlalu sering disegarkan

Orang yang bertanggung jawab atas pemrograman ujung depan harus tahu :

  • javascript
  • css
  • HTML
  • desain grafis dasar
  • Ajax
  • mungkin Flash
  • beberapa perpustakaan javascript pihak ke-3 seperti JQuery
  • Desain UI
  • desain informasi, dll.

Pemrograman sisi server berkaitan dengan menghasilkan konten dinamis. Ini berjalan di server. Banyak dari server ini "tanpa kepala". Sebagian besar halaman web tidak statis, mereka mencari database untuk menunjukkan informasi pribadi yang diperbarui kepada pengguna. Sisi ini berinteraksi dengan ujung belakang, seperti misalnya, basis data.

Pemrograman ini dapat dilakukan dalam banyak bahasa:

  • PHP
  • Java dan jsp
  • asp
  • Perl
  • Python
  • Ruby on Rails, dll.

Kode ini berkaitan dengan:

  • Meminta basis data
  • Encode data ke dalam html
  • Masukkan dan perbarui informasi ke dalam basis data
  • Aturan dan perhitungan bisnis

Orang yang bertanggung jawab atas pemrograman sisi server harus tahu:

  • beberapa bahasa yang disebutkan di atas
  • HTML
  • SQL,
  • linux / unix shell scripting
  • OOP
  • aturan bisnis, dll.
Tulains Córdova
sumber
"Orang yang bertanggung jawab atas pemrograman front-end harus tahu" Harus? Saya akan mengatakan bahwa Anda dapat bertahan dengan sempurna hanya dengan HTML, CSS, Javascript dan Ajax. Mengatakan bahwa pemrograman sisi server ada hubungannya dengan menghasilkan konten dinamis dan tidak mengatakan hal yang sama untuk sisi klien mungkin akan memberikan intuisi yang salah ...
nbro
"Sebagian besar halaman web tidak statis, mereka mencari basis data untuk menunjukkan informasi pribadi yang diperbarui kepada pengguna. Sisi ini berinteraksi dengan bagian belakang, seperti misalnya, basis data." Saya akan mengulanginya sebagai: "Halaman dihasilkan secara dinamis dengan mengisi bagian dinamis dengan konten variabel yang diambil biasanya dari database. Bagian belakang sudah semuanya terkait dengan pemrograman sisi server, IMO.
nbro
Sekali lagi, secara umum, saya akan mengatakan "... seseorang harus tahu ..." dan bukan "harus" ...
nbro
@nbro Mengapa Anda tidak menulis jawaban Anda sendiri?
@ColeTrumbo Apa hubungan antara komentar saya dan komentar Anda? Bisakah orang mengkritik jawaban orang lain untuk memperbaikinya?
nbro
14

Jawaban lain terfokus pada apa yang client-side dan pemrograman server-side: bahasa apa sebagian besar digunakan, tugas apa yang harus dicapai, dll

Ini benar sekali, tetapi saya kehilangan sedikit fokus pada apa perbedaan antara kedua jenis pemrograman, dalam konteks pemrograman web. Biarkan saya mencoba mengatasinya.

Keamanan dan izin

Dalam pemrograman sisi klien, Anda tidak memiliki akses ke sistem lengkap, karena masalah keamanan. Pengguna tidak perlu memercayai setiap bagian dari kode yang diunduh dari web dan dieksekusi di mesinnya, dan ini adalah tujuan desain utama dari lingkungan sisi klien (browser dan mesin JavaScript): untuk menyediakan lingkungan yang terisolasi di mana kode klien dapat dijalankan tetapi tidak dapat mengakses apa pun di luar lingkup yang diizinkan.

Dalam pemrograman sisi server, adalah praktik yang baik untuk juga membatasi akses setiap aplikasi ke sistem yang mendasarinya, tetapi ini jauh lebih sedikit diberlakukan pada Anda, karena pada akhirnya, Anda atau perusahaan Anda mengendalikan sistem itu. Desain 'kandang terisolasi' ini tidak terintegrasi ke dalam alat dan bahasa pemrograman sisi server, tetapi diselesaikan melalui pengaturan instalasi (menggunakan pengguna khusus dengan izin terbatas, memilih port yang memerlukan atau tidak memerlukan izin root, dll).

Penyebaran dan platform

Dalam pemrograman sisi server, penyebaran harus terjadi dari luar kode Anda, menggunakan beberapa jenis alat (bahkan jika itu make installatau a git clone), dan penyebaran ini biasanya manual - atau setidaknya, diharapkan terjadi dalam semi-diawasi cara. Sistem (artinya OS) di mana Anda menyebarkan biasanya seragam di sejumlah mesin, tetapi dapat sangat disesuaikan dengan kebutuhan Anda.

Dalam pemrograman sisi klien, penyebaran terjadi dari kode sisi server Anda, yang melayani klien secara otomatis dan tanpa pengawasan. Sistem yang mendasarinya (terutama browser) bisa sangat berbeda di banyak mesin. Agar penyebaran bisa dilakukan, standar harus dijaga, dan ada kecenderungan yang lebih kuat untuk satu bahasa dan lingkungan.

Inilah sebabnya mengapa menyalin kode sisi server dari satu mesin ke komputer lain dapat memakan waktu berminggu-minggu, sementara kode sisi klien biasanya sepele untuk dieksekusi di mesin yang berbeda.

Efek negara dan sekunder

(Penafian: sejauh ini ini adalah titik paling subyektif dari semua. Mungkin ada banyak aspek yang salah dalam argumentasi saya. Ini hanya hipotesis yang menarik, dalam pandangan saya.)

Dalam pemrograman sisi server, keadaan adalah masalah yang jauh lebih besar, artinya bagaimana mengambil dan memperbarui data atas permintaan pengguna dengan kemungkinan konflik karena konkurensi. Bahkan jika sebagian besar kompleksitas ini diturunkan ke server database, itu adalah tanggung jawab kode sisi-server untuk memungkinkan database menjaga jaminannya pada integritas data dengan menggunakan antarmuka dengan benar (mis. Tidak menggunakan cache untuk pembaruan yang tidak pernah dilihat oleh DB), sementara itu juga merupakan tujuan dari kode sisi server untuk tidak membebani database dengan pekerjaan dan membuat pengguna menunggu tanggapan.

Dalam pemrograman sisi klien, menyajikan hasil kepada pengguna adalah masalah yang jauh lebih besar, dan ini menyiratkan efek sekunder (sebagian besar mencetak ke layar). Ini bukan untuk mengatakan bahwa tidak ada keadaan yang terlibat (misalnya cookie), hanya bahwa tujuan utama dari kode ini adalah untuk benar-benar berinteraksi dengan pengguna, dan ini tidak dapat terjadi tanpa efek sekunder.

Inilah sebabnya mengapa pemrograman sisi klien biasanya memerlukan (pada titik tertentu) melihat layar dengan demo, untuk memeriksa bahwa semua warna dan tata letak sudah benar, sementara pemrograman sisi server dapat terjadi hampir secara eksklusif di lingkungan berorientasi teks, di mana otomatis tes memeriksa bahwa logika masih melakukan apa yang seharusnya dilakukan.

logc
sumber
3

Ini sama sekali tidak dimaksudkan untuk menjadi jawaban yang diterima; alih-alih saya menawarkannya sebagai poin pelengkap (dalam menanggapi when do you use each of thempertanyaan) yang belum disebutkan dalam jawaban lain sejauh ini, yaitu:

Perlindungan kekayaan intelektual

Kode sumber yang berada di sisi klien (seperti dalam Javascript) mudah dibaca dan / atau mampu direkayasa ulang jika telah dikaburkan.

Namun, kode sumber yang berada di sisi server dapat dengan aman melindungi algoritma kepemilikan dan hanya mengembalikan hasilnya; semacam kotak hitam.

Kosta Kontos
sumber
Ya, tapi itu bukan poin yang paling penting, server ada di sana ke server, dan klien ada di sana untuk menerima. Beberapa logika paling baik dilakukan pada klien (seperti keranjang belanja, Anda tidak membiarkan supermarket melacak keranjang belanja Anda setiap saat, bukan?), Dan beberapa lebih baik dilakukan di server (mendapatkan informasi dari database)
Madara Uchiha
@MadaraUchiha, maka pembukaan: "Ini sama sekali tidak dimaksudkan untuk menjadi jawaban yang diterima; melainkan saya menawarkannya sebagai titik komplementer"
Kosta Kontos
Bukankah ini harus menjadi bagian dari posting lain? Saya baru di sini, tetapi bukankah lebih baik memiliki satu jawaban lengkap daripada yang tersebar?
Julix