Canlı tutma başlığı açıklaması


106

Bir site oluşturmam istendi ve ortak geliştiricilerden biri bana canlı tutma başlığını eklemem gerektiğini söyledi.

Bunun hakkında çok şey okudum ve hala sorularım var.

msdn ->

Açık bağlantı, bir istemci Web sayfası içeriği için birden çok istekte bulunduğunda performansı artırır, çünkü sunucu her istek için içeriği daha hızlı döndürebilir. Aksi takdirde, sunucunun her istek için yeni bir bağlantı açması gerekir.

Bakmak

görüntü açıklamasını buraya girin

  • IIS (F) gönderdiğinde keep alivebaşlık ( veya kullanıcı canlı tutma gönderir ), o (demek E, C, Bsadece benim oturumu için bir bağlantı tasarrufu)?
  • Bu bilgi nerede saklanıyor ( "bu bağlantı" Royi "ye ait )?
  • Bu bağlantıyı kimsenin kullanamayacağı anlamına mı geliyor?
  • Eğer öyleyse - bu, başlığı canlı tutmak anlamına mı geliyor - çakışan bağlantı kullanıcılarının sayısını azaltın?
  • eğer öyleyse, bağlantı bana ne kadar süreyle kaydedilir? (başka bir deyişle, hayatta kalmayı ayarlarsam - ne zamana kadar "tut"?)

ilgilenenler için ps:

bu örnek sayfaya tıklamak , canlı tut başlığını döndürür


2
Pfff, bunu bir derste görmüştüm, ama tam olarak emin değilim. Canlı tutma işlevinin yalnızca sunucuda ve kullanıcıda olduğunu sanıyordum. Sonuçta, aradaki her şeyin HTTP olduğunu bile bilmemesi gerekir, başlıklara bakmayı bırakın.
Noctua

MSDN'den alıntılanan ifade saçmadır. Canlı tutma yoksa yeni bir bağlantı açması gereken istemcidir .
Marquis of Lorne

Ve bir web sunucusu veya istemcisi değil bir site oluşturuyorsanız, canlı tutma başlığı sizin için zaten yapılmıştır.
Marquis of Lorne

Yanıtlar:


144

Bu bilgi nerede saklanıyor ("bu bağlantı bilgisayar Ave sunucu arasındadır F")?

Bir TCP bağlantısı, kaynak IP ve bağlantı noktası ve hedef IP ve bağlantı noktası tarafından tanınır. İşletim sisteminiz, tüm ara oturuma duyarlı cihazlar ve sunucunun işletim sistemi, bağlantıyı bu şekilde tanıyacaktır.

HTTP, istek yanıtıyla çalışır: istemci sunucuya bağlanır, bir istek gerçekleştirir ve bir yanıt alır. Canlı tutma olmadan, bir HTTP sunucusuna bağlantı her yanıttan sonra kapatılır. HTTP canlı tutma ile, belirli kriterler karşılanana kadar temeldeki TCP bağlantısını açık tutarsınız.

Bu, tek bir TCP bağlantısı üzerinden birden çok istek-yanıt çiftine izin vererek, TCP'nin nispeten yavaş bağlantı başlangıcından bazılarını ortadan kaldırır.

IIS (F) canlı tutma üstbilgisini gönderdiğinde (veya kullanıcı canlı tutma gönderdiği zaman), bu (E, C, B) bir bağlantıyı kaydettiği anlamına mı gelir?

Hayır. Yönlendiricilerin oturumları hatırlaması gerekmez. Aslında, aynı TCP oturumuna ait birden çok TCP paketinin hepsinin aynı yönlendiricilerden geçmesi gerekmez - yani TCP'nin yönetmesi için. Yönlendiriciler sadece en iyi IP yolunu seçer ve paketleri iletir. Canlı tutma yalnızca istemci, sunucu ve diğer ara oturuma duyarlı cihazlar içindir.

hangisi sadece seansım için?

Bu bağlantıyı kimsenin kullanamayacağı anlamına mı geliyor?

Yani TCP bağlantısı niyeti : sadece bu iki taraf için tasarlanmış uçtan uca bağlantısıdır.

Eğer öyleyse - bu, başlığı canlı tutmak anlamına mı geliyor - çakışan bağlantı kullanıcılarının sayısını azaltın?

"Çakışan bağlantıları" tanımlayın. Aşağıdakiler gibi bazı avantaj ve dezavantajlar için HTTP kalıcı bağlantısına bakın :

  • Daha düşük CPU ve bellek kullanımı (çünkü aynı anda daha az bağlantı açıktır).
  • İsteklerin ve yanıtların HTTP ardışık düzenini etkinleştirir.
  • Azaltılmış ağ tıkanıklığı (daha az TCP bağlantısı).
  • Sonraki isteklerde azaltılmış gecikme (anlaşma yok).

eğer öyleyse, bağlantı bana ne kadar süreyle kaydedilir? (başka bir deyişle, hayatta kalmayı ayarlarsam - ne zamana kadar "tut"?)

Tipik bir canlı tutma tepkisi şuna benzer:

Keep-Alive: timeout=15, max=100

Bkz Köprü Metni Aktarım Protokolü (HTTP) -Yaşatmak Başlığını (örneğin taslak HTTP / 2 canlı tutma başlığı hem daha ayrıntılı şekilde açıklanmıştır nerede 2616 ve 2086 ):

  • Bir ana bilgisayar, timeoutparametrenin değerini , ana bilgisayarın boşta olan bir bağlantının kapatılmadan önce açık kalmasına izin vereceği zamana ayarlar . Bir ana bilgisayar tarafından veri gönderilmez veya alınmazsa bağlantı boştadır.

  • maxParametresi bir istemci yapacak ya da bir sunucu kalıcı bağlantıda yapılacak sağlayacak maksimum istek sayısını gösterir. Belirtilen sayıda istek ve yanıt gönderildikten sonra, parametreyi içeren ana bilgisayar bağlantıyı kapatabilir.

Bununla birlikte, sunucu, keyfi bir süre veya sayıda istekten sonra bağlantıyı kapatmakta serbesttir (yanıtı mevcut isteğe döndürdüğü sürece). Bunun nasıl uygulanacağı HTTP sunucunuza bağlıdır.


"Çakışan bağlantıları" tanımlayın ----> Aynı anda demek istiyorum. ? Ben haklıyım .... "Bağlantı X bu tutma başlığı kullanır çünkü John için ayrılmıştır": (ve dediğin gibi çünkü Eşzamanlı bağlantı sayısı azalacaktır düşünüyorum
Royi Namir

1
Yani söylediğiniz şu ki, sunucu bir seferde 100 bağlantıyı idare edebiliyorsa ve tüm bu bağlantılar canlı tutma özelliğini kullanıyorsa, 101'inci bağlantı atılacak ???
Royi Namir

1
@Royi hayır, bir tarayıcının belirli bir ana bilgisayarla kaç tane canlı tutma bağlantısı kurduğunu bilmiyorum ve bir tarayıcının yalnızca birini açacağını söylemek istemedim. Aynı anda yapılan istek miktarı sınırlıdır ve tarayıcıya göre değişir . Demek istediğim, bir tarayıcı canlı tutma bağlantıları kullanıyorsa, bağlantılar Nüzerinden istekleri tetiklemek yerine N(varsayılan olarak bağlantı her yanıttan sonra kapanır), örneğin, Nistekleri N / Mveya yalnızca Mbağlantıları ateşlemek, çünkü birden fazla isteği tetikleyebilir her açılan bağlantı, bu nedenle daha az kullanabilirsiniz.
CodeCaster

1
Bunu biliyorum. (:-)) yorumunuzda şunu söylemiştiniz: bir müşteri canlı tutma özelliğini kullanırken daha az eşzamanlı bağlantı kuracak, istekleri paralel değil seri olarak ateşleyecektir . Hayatta kalmanın nasıl bir ilişki olduğunu anlamıyorum.
Royi Namir

5
E, C, B seansları kaydetmez. Bunlar yönlendiricilerdir, herhangi bir oturum tabloları yoktur ve buna ihtiyaçları yoktur, çünkü aynı TCP istemciden sunucuya oturumdan birden çok paket farklı yolları izleyebilir. Yönlendiricinin rolü, en iyi IP yolunu seçmek ve paketi buna göre iletmektir, böylece ne taşıma katmanına (TCP / UDP), ne de canlı tutma başlığını görmek için uygulama katmanına gitmez. Yani temelde canlı tutma açık bir şekilde istemci ve sunucu arasındadır ve dolaylı olarak oturuma duyarlı cihazların -eg güvenlik duvarları- bu açık istemciden sunucuya oturuma açılmasına izin verir
Amine Kadimi
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.