HTTP nasıl vatansız hale gelir?


26

HTTP'nin vatansız olduğu söylenir. Yani, veri iletimi için bilgi depolamak zorunda değildir.

Ancak HTTP, durum odaklı bir TCP kullanır.

Bu durumda, HTTP nasıl vatansız hale gelir?


6
Bu, Süper Kullanıcı'nın başlatılmasından 5 yıl sonra nasıl aynı olmaz?
Peter Mortensen,

Çünkü duplerin çoğu StackOverflow'da mı? Sadece tahmin ediyorum.
trysis,

8
Sadece kablolardan geçtiği için (diğerleri arasında), elektrik protokolü de yapmaz
Hagen von Eitzen

Yanıtlar:


42

HTTP, kendisini vatansız olmasına rağmen, kendisini taşımak için kullanılan alt düzey protokollerin hiçbirini umursamaz ve bunlardan bağımsızdır.

Aktarım teknolojisi TCP veya Novell'in eski SPX'i veya SCTP'si veya hayal edebileceğiniz başka herhangi bir şey olabilir ve HTTP hala aynı şekilde çalışacaktır. HTTP, akışa veya bağlantıya yönelik bir protokol gerektirir - ve URL'lerin çözülebilir olmasına bağlıdır - ancak bunun nasıl gerçekleştirildiği ile ilgilenmez.

Katmanlı model veya ağ yığınının var olmasının sebeplerinden biri de budur : Uygulama katmanının, kendisiyle daha düşük katmanlarla ilgilenmesi gerekmez.

Sadece düşük seviyeli bir protokolün durumlu olması, üzerinde bir şeyin otomatik olarak durumsal olduğu veya durumlu olması gerektiği anlamına gelmez.

HTTP'nin kendisi durumsuzdur. Bu, uygulamaların durum oluşturmak için HTTP'nin üzerine başka bir katman uygulamak zorunda oldukları anlamına gelir. Bu genellikle oturum çerezleriyle yapılır.


1
Yönlendirme tcp / ip seviyesinde gerçekleşir.
Fiasco Labs,

3
Bu görüntü güzelce açıklar. vichargrave.com/wp-content/uploads/2013/01/…
JakeGould

2
Tesadüfen, HTTP’nin altında yatan bağlantının (neredeyse her zaman TCP olacak) durumundaki haksızlığını görmezden gelmesi , çeşitli HTTP2 yaklaşımlarının ele almaya çalıştığı ana performans eksikliklerinden biridir .
skolima

2
@Fiasco: Kesinlikle konuşma, yönlendirme IP düzeyinde gerçekleşir. Yönlendirme, İnternet Adreslerine dayanır, temel yönlendirmede TCP katmanından hiçbir bilgi kullanılmaz.
RedGrittyBrick 13:14

1
@skolima: Öte yandan, vatansızlık, HTTP'nin geniş kullanımda en ölçeklenebilir ve güvenilir protokol olmasının nedenidir. HTTP her zaman açıkça performanstan ziyade ölçeklenebilirlik için dizayn edilmiştir (evet, onlar farklı şeylerdir), bu nedenle ya yanlış protokol kullandığınızdan ya da protokolü yanlış kullandığınızdan daha düşük gecikmeye ihtiyacınız olduğunu düşünüyorsanız. HTTP2 performansı iyileştirmeyi amaçlasa da, bunu vatansızlığa sadık bir şekilde yapar. Amaçlananlar için kullanıldığında, vatansızlığın iyi tasarlanmış bir HTTP uygulamasının darboğazı olduğunu hiç görmemiştim.
Lie Ryan,

10

"HTTP durumsuzdur", her HTTP işleminin (istek-yanıt çifti) önceki istek-cevap çiftinden herhangi bir durumdan bağımsız olarak işlenebileceği anlamına gelir.

Belirli bir istek-cevap çiftini taşımak için, keyfi olarak büyük blokları ve isteğe bağlı olarak büyük blokları geri taşıyabilen ve sınırlı paket büyüklüğüne sahip bir katman üzerinde bunu yapabilmek için TCP'nin durumlu olması gerekir.

Ancak işlem sınırı boyunca, devlet yoktur. Müşteri bağlantıyı kesebilir ve bir sonraki istek için yeni bir bağlantı kurabilir. Aslında bu, ilk sürümlerde tek seçenek idi ve müşteri Connection: keep-alivebaşlığı içermiyorsa yine de böyle çalışıyor .

Bir sonraki istek farklı sunucu tarafından da kolayca idare edilebilir ve müşteri asla bilemeyecektir, çünkü sunucunun herhangi bir durumu sürdürmesi gerekmemektedir (uygulama, genellikle oturum şeklinde olan HTTP'nin üzerine kendi durumunu eklemiyorsa, sonuçta ortaya çıkan komplikasyonlar) yük dengelemede, HTTP üzerinde durum bilgisi içeren protokol oluşturma cezasıdır). Yük dengeleme meşgul sunucularında bu avantaj elde edilir.


can also easily be handled by different server and the client will never knowHer ne kadar teknik olarak doğru olsa da, birçok web uygulamasında, aynı tarama oturumundan aynı sunucuya gelecek istekleri yönlendirmek için bir yük dengeleyici gerektiren yapışkan oturumlar kullandığından, bu yanıltıcıdır. Bir HTTP perspektifinden bakıldığında, oturumlar önemsizdir, ancak son cümleniz, son kullanıcı deneyiminin etkilenmeyeceği ve yapışkan oturumlarda yanlış olacağı anlamına gelir.
Brandon

1
@Brandon: Bu tür uygulamalar HTTP'nin üstüne durumsal bir protokol oluşturur ve bu onların cezasıdır!
Jan Hudec

@Brandon: Gmail gibi yük dengelenmiş sunucular, aynı sunucuya geri istek göndermez. Bunun yerine, oturum kümedeki tüm sunucuların erişebileceği paylaşılan bir veritabanında depolanır. Bu nedenle durum sunucu tarafından değil, veritabanı tarafından ele alınmaktadır.
slebetman

@slebetman: Evet, her neyse. HTTP'nin kendisi böyle bir durumda değildir, bu nedenle HTTP için basittir. Uygulama kendine ait bir durum eklerse, bu onun savaşıdır.
Jan Hudec

Tamam, hepsini söylemedim. Biraz söyledim Şahsen yapışkan oturumlardan kaçınmayı ve mümkünse oturumlardan tamamen kaçınmayı tercih ederim. Yine de, herkesin idealine uymayan bir yazılım var.
Brandon

2

HTTP'nin "durumsuz" niteliği, bu katmanda, hiçbir durum bilgisinin oluşturulmadığını veya kullanılmadığını gösterir.

Bunu birkaç örnekte görebilirsiniz, örneğin, HTTP kimlik doğrulamasında, kimlik bilgileri her istekle birlikte gönderilir ve kalıcı bağlantılar gerçekten yalnızca bir optimizasyondur (örneğin, kimlik bilgileri gönderirsem, sunucu istekten sonra bunu bırakırsa bile bağlantı açık).

Buna karşılık, çerez tabanlı oturum açma mekanizmaları durumsaldır, ancak HTTP'nin bir parçası değildir.


1

Onu bir tane Rus bebek seti (ya da istersen kutular) içinde bir başkası taşıyan bir tane olarak anlamalısınız, fena halde böyle işler: TCP "içerden" HTTP'yi taşır ancak onunla ya da onun özellikleriyle ilgilenmez.

Resmin tamamını elde etmek için OSI Modeli ile ilgili daha net bir şekilde okuma yapmanızı öneririm .

TCP, OSI modelinde HTTP'nin birkaç katının altına oturur, her katman aslında farklı bir protokole karşılık gelir.

Bizim durumumuzda HTTP sunum ve uygulama katmanlarında ve TCP, taşıma katmanında oturur. Ya da TCP / IP Modelini kullanırsanız, hem TCP hem de IP protokolleri, uygulama ve sunum katmanlarında Ağ Bağlantısı katmanına ve HTTP'ye oturur.


1
OSI modeliyle ilgili sorun şu an teorik olmasıdır (bunu uygulamak için gerçek girişimler vardı, ancak karmaşıklıkları nedeniyle piyasada başarısız oldular). Gerçekte, TCP ile HTTP arasında katman yoktur. Ayrıca, sunum katmanı HTTP değil, HTML olacaktır.
MSalters

TCP / IP modelinde, TCP ağ katmanında yaşamıyor. Daha sonra ağda olan IP'nin üstündeki taşıma katmanında yaşar. "TCP modeli" için ilk google vuruşu bunu gösteriyor: technet.microsoft.com/en-us/library/cc786900(v=ws.10).aspx
Brandon

@ MSalters: TLS katman değil mi?
Grawity

1
@ MSalters: HTTPS'nin yalnızca, TLS tarafından tünellenen HTTP tarafından verilen ad olduğunu biliyor musunuz? Bu nedenle TLS, HTTP altında ve TCP'nin üstünde bir katmandır ve TLS / SSL + HTTP combo HTTPS olarak adlandırılır.
slebetman

1
Ayrıca, TLS / HTTP combo için başka bir yeni isim var. HTTP trafiğini taşıyan TLS sanal soket / akış çoklama uygularsa, SPDY (ancak tarayıcınızdaki url hala HTTPS'dir) olarak adlandırılır.
slebetman
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.