Sunucu tarafı ve istemci tarafı programlama arasındaki farklar nelerdir?


104

Bu temel bilgiden yoksun soruları (çoğunlukla Yığın Taşması üzerine) gördüm. Bu sorunun amacı, arayanlar ve kendisine atıfta bulunanlar için iyi bilgi sağlamaktır.

Web programlama bağlamında, Sunucu tarafı programlama ile İstemci tarafı programlama arasındaki farklar nelerdir? Hangi diller kime aittir ve bunları ne zaman kullanıyorsunuz?


5
Sunucu tarafı programlama, sunucu tarafından desteklenen dilleri kullanarak (Java, PHP, C #; sunucu tarafında çalışan kodu JavaScript ile yazmak mümkündür) sunucuda çalışan kod yazmaktır. İstemci tarafı programlama, istemcide çalışacak bir kod yazıyor ve JavaScript gibi tarayıcı tarafından çalıştırılabilecek dillerde yapılıyor.
SinirliFormsDesigner ile


7
Bence sadece web programlamasına atıfta bulunduğunuz soruya cevap vermelisiniz, çünkü şu anki cevaplar tam değil. Örneğin, sunucu-müşteri iletişiminin HTTP'de yapılması gerekmez; müşteri tarafı tarayıcı vb. kullanamaz.
K.Steff

@KSteff bunu eklemek için sorumu düzenleyebilirsin.
Madara Uchiha

2
Web küçükken, mantığınızın çoğunu sunucu tarafında ağır bir şekilde kaldırmak (java / c ++) ve tarayıcı mantığını kasıtlı olarak ince tutmak - özellikle de tarayıcılar asal zaman için hazır olmadıkları için - iyi bir pratikti. Şimdi bu vurgu, tarayıcı tabanlı araçların (Angular.js) şu anda web uygulamasının ağır kaldırma mantığının (artık giderek aşağı sıyrılmış sunucu tarafı mantığından uzakta) bulunduğu yerde olduğu şeklinde tersine döndü. Bu, son derece hızlı javascript motorları çalıştıran (yerel kodun büyüklüğü içerisinde) modern endüstriyel güç tarayıcıları tarafından kolaylaştırılmıştır.
Scott Stensland

Yanıtlar:


123

Arka fon

Web geliştirme tamamen iletişim ile ilgilidir. Bu durumda, iki (2) parti arasındaki iletişim, HTTP protokolü üzerinden:

  • Sunucu - Bu parti sorumludur hizmet veren sayfalar.
  • İstemci - Bu parti istekleri sayfaları Sunucusu ve kullanıcıya görüntüler. Çoğu durumda, istemci bir web tarayıcısıdır .
    • Kullanıcı - Kullanıcı kullanan Client vb internette sörf form doldurma çevrimiçi videoları izlemek için

Her iki tarafın da programlanması, belirli bir makinede, sunucuda veya müşteride çalışan kodu ifade eder.

Temel örnek

  1. Kullanıcı kendi web tarayıcısını (açılır İstemci ).
  2. Kullanıcı gözatar http://google.com .
  3. Müşteri (adına kullanıcı ), bir istek gönderir http://google.com ( Sunucu onların ana sayfa için).
  4. Sunucu daha sonra talebi kabul ve bazı meta veri (adında müşteri yanıtlar başlıklar sayfanın kaynak tarafından takip).
  5. Müşteri daha sonra sayfanın kaynağını alır ve kılan bir insan tarafından izlenebilen web sitesi içine.
  6. Kullanıcı türleri Stack Overflowarama çubuğuna ve preslerEnter
  7. Müşteri bu veriyi gönderir Sunucusu .
  8. Sunucu bu verileri işler ve arama sonuçlarını uyan bir sayfayla yanıt verir.
  9. Müşteri , bir kez daha, o sayfayı vermektedir Kullanıcı görüntülemek için.

Programlama

Sunucu Tarafında Programlama

Sunucu tarafı programlama, sunucuda çalıştırılan program çeşitlerinin genel adıdır .

Kullanımları

  • İşlem kullanıcı girişi.
  • Sayfaları derler.
  • Yapı web uygulamaları.
  • Kalıcı depolama ile etkileşime geçin (SQL, dosyalar).

Örnek diller

  • PHP
  • piton
  • ASP.Net, C #, C ++ veya Visual Basic'te.
  • Neredeyse herhangi bir dil (C ++, C #, Java). Bunlar görev için özel olarak tasarlanmadı, ancak şimdi sık sık uygulama düzeyinde web servisleri için kullanılıyor.

Müşteri tarafı programlama

Sunucu tarafında olduğu gibi, Müşteri tarafında programlama, Müşteri üzerinde çalışan tüm programların adıdır .

Kullanımları

  • Etkileşimli web sayfaları yapın.
  • Web sayfasında dinamik bir şekilde gerçekleşmesi sağlayın.
  • Geçici depolama ve yerel depolama ile etkileşimde bulunun (Çerezler, localStorage).
  • Sunucuya istekleri gönderin ve ondan veri alın.
  • Yazılım kaydı, içerik sunumu veya uzaktan çok oyunculu oyunlar gibi müşteri tarafı uygulamalar için uzaktan servis sağlayın.

Örnek diller

  • JavaScript (öncelikle)
  • HTML *
  • CSS *
  • Bir uzak cihazla etkileşime giren bir istemci cihazında çalışan herhangi bir dil, istemci tarafı bir dildir.

* HTML ve CSS, aslında "programlama dilleri" değildir. Bunlar, Müşterinin Sayfayı Kullanıcı için oluşturduğu biçimlendirme sözdizimidir .


8
Kullanım örnekleri ile iyi bir cevap için +1 ! Sadece nitpick için: HTML ve CSS aslında programlama dilleri değildir, bu nedenle muhtemelen "PHP, ASP ve Neredeyse tüm dillerle (C ++, C #, Java)" karşılaştırılmamalıdırlar. ActionScript, istemci tarafı dilin iyi bir örneği olabilir.
SinirliFormsDesigner ile

5
Sen tanımlamak için başarısız neden sunucu bir sunucudur ve istemci bir istemcisidir. Sunucu, istemci tarafından bilinir, ancak tam tersi olmaz. Sunucunun her zaman çalışması bekleniyor, müşteri beklentisi yok.
Chris McCall

3
Bir sunucu ortamının daha kontrollü olduğunu da eklerdim. Müşterinin ne olduğu hakkında hiçbir fikrin yok. Ayrıca, müşteri tarafında işler yaparken (her iki taraf için) güvenlik endişeleri vardır.
stonemetal

1
Öyleyse ekle, çekinmeyin.
Madara Uchiha

1
@ ChrisMcCall'ın tanımını bir noktaya katılmıyorum. Bir sunucunun, verileri işlemek için bir istemciye güvenebileceği veya sunucunun bir görevi tamamlaması için sunucuya bir hizmet sağlayabileceği gibi, bu kuralın istisnaları olabilir. Müşteriler, aynı zamanda SPA'larda olduğu gibi ölçeklenebilirlik ve performans için artan miktarda yük paylaşıyorlar. Bu teknolojiler bu tanımı bulanıklaştırır. Daha iyi bir tanım, son kullanıcının ve müşterinin eş anlamlı olması olabilir. Son kullanıcının müşteri cihazında bulunması beklenirken, diğer tüm düğümlerin sunucu tarafı olarak kabul edilmesi beklenir.
RyanJMcGowan

27

Layman'ın sözleriyle:

Burada sadece web programlama hakkında konuşacağım.

İstemci tarafı programlama, çoğunlukla kullanıcının etkileşime girdiği kullanıcı arayüzü ile ilgilidir. Web geliştirmede bu, tarayıcıda, kullanıcının makinesinde, kodu çalıştırır ve çoğunlukla javascript, flash, vb. İşlemlerinde yapılır . Bu kod çeşitli tarayıcılarda çalıştırılmalıdır.

Başlıca görevleri:

  • girişin doğrulanması (Doğrulama sunucuda yapılmalıdır. Hız çok kritik olduğunda sunucu çağrılarını önlemek için istemcide yedek bir doğrulama kullanılabilir.)
  • animasyon
  • UI öğelerini değiştirme
  • stilleri uygulama
  • sayfanın bu kadar sık ​​yenilenmesini istemediğinizde bazı hesaplamalar yapılır.

Sorumlu kişi ön uç programlama bilmelisiniz :

  • javaScript
  • css
  • HTML
  • temel grafik tasarım
  • ajax
  • belki Flash
  • JQuery gibi bazı üçüncü taraf javascript kütüphaneleri
  • UI tasarımı
  • bilgi tasarımı vb.

Sunucu tarafı programlama dinamik içerik üretme ile ilgili. Sunucularda çalışır. Bu sunucuların çoğu "başsız" dır. Çoğu web sayfası statik değildir, kullanıcıya güncellenmiş kişisel bilgileri göstermek için bir veritabanında arama yaparlar. Bu taraflar, veritabanı gibi arka uçla etkileşime girer.

Bu programlama birçok dilde yapılabilir:

  • PHP
  • Java ve jsp
  • asp
  • Perl
  • piton
  • Ruby on Rails, vb.

Bu kod aşağıdakilerle ilgilidir:

  • Veritabanını sorgulama
  • Verileri html'ye kodlayın
  • Veritabanına bilgi ekleme ve güncelleme
  • İş kuralları ve hesaplamalar

Sunucu tarafı programlamasından sorumlu olan kişinin bilmesi gerekenler:

  • yukarıda belirtilen dillerden bazıları
  • HTML
  • SQL,
  • linux / unix kabuk komut dosyası
  • OOP
  • iş kuralları vb.

"Ön uç programlamadan sorumlu kişi bilmelidir" Zorunlu mu? Mükemmel bir şekilde yalnızca HTML, CSS, Javascript ve Ajax ile hayatta kalabileceğinizi söyleyebilirim. Sunucu tarafı programlamanın dinamik içerik
üretmekle ilgisi

"Çoğu web sayfası statik değildir, kullanıcıya güncellenmiş kişisel bilgileri göstermek için bir veritabanında arama yaparlar. Bu taraflar veritabanı gibi arka uçla etkileşime girer." Sayfalar bir veritabanından genellikle getirilirse değişken içerikli dinamik parçalar doldurarak dinamik olarak oluşturulmuş" arka uç zaten IMO sunucu tarafı programlama ile ilgili her şey vardır: ben bu ifadeleri ederim..
nbro

Yine, genel olarak, "... bir kişi bilmeli ..." derdi ve "
mecbur

@ nbro Neden kendi cevabını yazmıyorsun?

@ColeTrumbo Yorumumla seninki arasındaki bağlantı nedir? İnsanlar başkalarının cevaplarını iyileştirmek için eleştirebilir mi?
nbro

14

Diğer cevaplar , müşteri tarafı ve sunucu tarafı programlamanın ne olduğuna odaklandı : en çok hangi dillerin kullanıldığı, hangi görevlerin yapılması gerektiği vb.

Bu kesinlikle doğru, ancak web programlama bağlamında her iki programlama türü arasındaki farkın ne olduğuna odaklanmayı özlüyorum . Bunu ele almaya çalışmama izin ver.

Güvenlik ve izinler

İstemci tarafı programlamada, güvenlik endişeleri nedeniyle tam sisteme erişemezsiniz. Kullanıcı, web'den indirilen ve makinesinde yürütülen her kod parçasına mutlaka güvenmez ve bu, istemci tarafı ortamının (tarayıcı ve JavaScript motoru) ana tasarım hedefidir: yalıtılmış bir ortam sağlamak İstemci kodunun yürütülebileceği ancak izin verilen kapsamın dışındaki hiçbir şeye erişemediği durumlarda.

Sunucu tarafı programlamada, her uygulamanın altta yatan sisteme erişimini de sınırlandırmak iyi bir uygulamadır, ancak sonuçta siz veya şirketiniz o sistemi kontrol altında tuttuğunuz için bu sizin için daha az uygulanır. Bu 'yalıtılmış kafes' tasarımı, sunucu tarafında programlama araçlarına ve dillerine yerleşik değildir , ancak kurulum kurulumuyla (kısıtlı izinlere sahip özel kullanıcılar kullanarak, kök izinleri gerektiren veya gerektirmeyen bağlantı noktaları seçerek vb.) Gerçekleştirilir.

Dağıtım ve platform

Sunucu tarafı programlamada, dağıtımın bir tür araç kullanarak (bu make installya da a olsa bile) kodunuzun dışından yapılması gerekir git cloneve bu dağıtım genellikle elle yapılır - ya da en azından yarı denetim altında yapılması beklenir. yol. Dağıttığınız sistem (işletim sistemi anlamına gelir) genellikle birkaç makinede aynıdır, ancak gereksinimlerinize göre büyük ölçüde özelleştirilebilir.

İstemci tarafı programlamada, dağıtım, istemcilere otomatik olarak ve denetimsiz olarak hizmet veren sunucu tarafı kodunuzdan gerçekleşir. Temel sistem (esas olarak tarayıcı anlamına gelir) çok daha fazla sayıda makinede çok farklı olabilir. Dağıtımı tümüyle uygulanabilir kılmak için standartlar korunmalıdır ve tek bir dile ve çevreye çok daha güçlü bir eğilim vardır.

Bu nedenle sunucu tarafı kodunun bir makineden diğerine kopyalanması haftalar sürebilir, istemci tarafı kodu genellikle farklı makinelerde çalıştırma konusunda önemsizdir.

Devlet ve ikincil etkiler

(Feragatname: Bu, hepsinin en öznel noktasıdır. Muhtemelen benim tartışmamın birçok yanlış yönü var. Benim görüşüme göre sadece ilginç bir hipotez.)

Sunucu tarafı programlamada, durum çok daha büyük bir endişe kaynağıdır; bu, kullanıcının isteği üzerine verilerin eşzamanlılık nedeniyle çakışma olasılığı ile nasıl alınacağı ve güncelleneceği anlamına gelir. Bu karmaşıklığın çoğu bir veritabanı sunucusuna aktarılsa bile, sunucunun arayüzünü doğru şekilde kullanarak veri bütünlüğü konusundaki garantilerini muhafaza etmesine izin vermek (örn. DB), aynı zamanda sunucu tarafı kodunun bir amacı olmasına rağmen, veritabanını işle aşırı yüklememek ve kullanıcıyı yanıt bekletmek.

İstemci tarafı programlamada sonuçları kullanıcıya sunmak çok daha büyük bir endişedir ve bu ikincil etkiler (çoğunlukla ekrana yazdırma) anlamına gelir. Bu, ilgili bir durumun (örneğin çerezler) olmadığını, yalnızca kodun asıl amacının kullanıcıyla gerçekten arayüz oluşturmak olduğunu söylemek değildir ve bu ikincil etkiler olmadan gerçekleşemez.

Bu nedenle, istemci tarafı programlama genellikle (bir noktada) ekrana bir demo ile bakmayı gerektirir, tüm renkler ve mizanpajın doğru olduğunu kontrol etmek için sunucu tarafı programlama neredeyse yalnızca otomatik olarak yazılmış metin odaklı bir ortamda gerçekleşebilir. Testler, mantığın hala yapması gerekeni yaptığını kontrol eder.


3

Bu hiçbir şekilde kabul edilmiş bir cevap olması amaçlanmamıştır; bunun yerine when do you use each of them, bugüne kadar diğer cevaplarda henüz belirtilmeyen tamamlayıcı bir nokta olarak ( soruya cevaben ) teklif ediyorum :

Fikri mülkiyetin korunması

İstemci tarafında (Javascript'te olduğu gibi) bulunan kaynak kodu kolayca okunabilir ve / veya gizlenmişse tersine mühendislik yapılabilir.

Sunucu tarafında oturan kaynak kodu ancak özel algoritmaları güvenle koruyabilir ve yalnızca sonucu döndürür; bir tür kara kutu.


Evet, ama bu gerçekten en önemli nokta değil, sunucu sunucuya orada ve müşteri de orada. Bazı mantık müşteride en iyi şekilde yapılır (bir alışveriş sepeti gibi, süpermarketin alışveriş sepetinizi her zaman takip etmesine izin vermezsiniz, değil mi?) Ve bazıları sunucuda en iyi şekilde yapılır (veritabanından bilgi almak).
Madara Uchiha

@MadaraUchiha, bu yüzden başlangıç: “Bu, hiçbir şekilde kabul edilmiş bir cevap olmayı amaçlamaz; tamamlayıcı bir nokta olarak öneriyorum”
Kosta Kontos

Bu o zaman başka bir gönderinin parçası olmamalı mı? Ben burada yeniyim, fakat dağınık olanlardan daha eksiksiz bir cevap almak tercih edilmiyor mu?
Julix
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.