Http protokolüne dayalı hizmette Cache-Control önbellek başlığı uygulamasını açıklayın

Önce iki soruyu düşünün?

  • Sayfaya statik bir kaynak dosyası eklendiğinde, önceki isteğin içeriği statik kaynak dosyası değiştirildikten sonra neden hala değişmiyor?
  • Web paketi gibi bazı paketleme araçlarını kullanırken neden bir dizi karma kod eklemelisiniz?

Önbellek Denetiminin bazı özellikleri

Önbelleğe alınabilirlik

  • Herkese açık http geçişlerinin önbelleğe alınabileceği herhangi bir yer
  • özel Yalnızca isteği başlatan tarayıcı önbelleğe alabilir
  • önbellek yok Hiçbir düğüm önbelleğe alınamaz

olgunluk

  • max-age = < saniye > Önbelleğin süresinin dolması için kaç saniye
  • s-maxage = < saniye > Max-age'in yerini alacak, yalnızca proxy sunucusu üzerinde etkili olacak
  • max-stale = < saniye > İstekte bulunan taraf tarafından aktif olarak getirilen bir başlıktır, yani önbelleğin süresi dolsa bile, süresi dolan önbellek maksimum bayat süresi içinde kullanılabilir ve sunucunun yeni içerik talep etmesi gerekmez

Yeniden doğrula

  • must-revalidate max-age tarafından belirlenen içeriğin süresi dolarsa, içeriğin süresinin dolup dolmadığını doğrulamak için sunucudan tekrar veri almasını istemelisiniz
  • proxy-revalidate esas olarak önbellek sunucusunda kullanılır. Önbellek sunucusunun süresi dolduktan sonra orijinal sunucudan alınacağını ve yerel olarak alınamayacağını belirtir

diğer

  • no-store Ne yerel ne de proxy sunucu bu önbelleği depolayabilir ve her zaman sunucudan gelen yeni gövde içeriğini kullanabilir
  • no-transform, esas olarak proxy sunucularında, proxy sunucusuna döndürülen içeriği istediği zaman değiştirmemesini söylemek için kullanılır.

Misal

  • cache-control.html
< html > < baş > < meta charset = "utf-8" / > < Başlık > önbellek denetimi < /Başlık > < / kafa > < vücut > < script src = "/ script.js" > < /senaryo > < /vücut > < / html >
  • cache-control.js

Tarayıcı, http: // localhost: 3010 / script.js'yi isteyen cache-control.html dosyasını yüklemek için http: // localhost: 3010 / girer ve url'de önbellek kontrolünün maksimum yaşını /script.js'ye eşit olarak ayarlar. Tarayıcı önbelleğe alma işlemi yapın

const http = gerekli ('http'); const fs = gerektirir ('fs'); const bağlantı noktası = 3010; http.createServer ((istek, yanıt) = > { console.log ('istek url'si:', request.url); eğer (request.url === '/') { const html = fs.readFileSync ('./ örnek / önbellek / önbellek-kontrol.html', 'utf-8'); response.writeHead (200, { 'İçerik Türü': 'metin / html', }); response.end (html); } else if (request.url === '/ script.js') { response.writeHead (200, { 'İçerik Türü': 'metin / javascript', 'Önbellek Kontrolü': 'max-age = 200' }); response.end ("console.log ('komut dosyası yükleme')"); } }). listen (bağlantı noktası); console.log ('bağlantı noktasında dinleyen sunucu', bağlantı noktası);
  • İlk çalıştırma

Tarayıcı işlem sonuçları, sorun yok, normal yanıt

Konsol çalıştırma sonucu

  • Cache-control.js'nin dönüş değerini değiştirin
... response.writeHead (200, { 'İçerik Türü': 'metin / javascript', 'Önbellek Kontrolü': 'max-age = 200' }); response.end ("console.log ('komut dosyası yükleme !!!')"); ...
  • Son programı yarıda kesin ve ikinci kez çalıştırın

Tarayıcı işlem sonuçları

İkinci çalıştırma, bellekten oku cahce, tarayıcı konsolu değiştirilen içeriği yazdırmadı

Konsol işlemi sonuçları

/Script.js istendi / istemedi anlamına gelir

Yukarıdaki sonuç tarayıcısı, değiştirilen sonucu sunucumuza döndürmedi. Bu neden? İstediğimiz url / script.js değişmediğinden, tarayıcı sunucu tarafından doğrulanmayacak ve doğrudan istemci önbelleğinden okunacak ve bu da bir soruna neden olacaktır.Js statik kaynağımız güncellendikten sonra, hemen olmayacak İstemcimizde güncelleme. Bu aynı zamanda ön uç geliştirmede yaygın bir sorundur. Tarayıcının statik kaynak dosyalarımızı (js, css, img vb.) Önbelleğe almasını istiyoruz. Ayrıca, istemcinin sunucu içeriği güncellendikten sonra devam etmesini istemiyoruz. İstenen önbelleğe alınmış kaynaklar, çözüm, js oluşturma sürecini yaparken, paketlenmiş js dosya adına içerik karma değerine göre bir karma kod dizisi eklememizdir, böylece js dosyanız veya css dosyanız ve diğer içerikler değişmeden kalır. , Bu şekilde oluşturulan karma kod değişmeyecektir. URL'nizin değişmediği sayfaya yansır. Dosya içeriğiniz değişirse, sayfaya gömülü dosya url'si değişecek, böylece önbelleği güncelleme amacına ulaşabilirsiniz. Bu aynı zamanda ön uç için nispeten yaygın bir statik kaynak çözümüdür.

Yazar: Mayıs-Haziran

Bağlantı: https://www.imooc.com/article/72190

Huawei'nin anneden çocuğa yönlendiricisi Q2 Pro açıklandı ve kapsamlı bir IPv6 yükseltmesi başlattı
önceki
Denizin yarısı ve alevin yarısı Huawei P20 sizi Afrika'daki "Avrupa'nın arka bahçesini" deneyimlemeye götürüyor
Sonraki
"Sky Fire" ilk kez sergilenen konsept posteri, Çin'in kendi gişe rekorları kıran görsel efektleri yaratmak için yeni bir model
Kolor x adidas ortak serisi yakında satışa sunulacak! Size en önemli floresan renkleri nasıl yorumlayacağınızı öğretin!
Yeni başlayanlar için 10 faydalı Linux komut satırı numarası
Öğretmen birinci sınıf öğrencilerini "Cennet Kitabı" yazmaya teşvik etti. Netizenler kitabı okuduktan sonra şok oldu
Huawei nova 4e hediye almak için randevu alın 315 Suning Huanxin Festival indirimi yeni telefon satın alın
8.22 versiyonu güncellendi, sert kontrol yardımı ilk tercih oldu, yardımcı pozisyondaki yeni kardeş kim?
Virgil Abloh da Apple konferansına katıldı! İşbirliğinin ritmi bu mu?
İstihbarat çağına girişte liderliği ele alın "AI kutsaması", Hisense AWE2019'un standart yapılandırması haline gelir
JD.com ilk büyük veri zirvesini düzenledi, akıllı perakende büyük veri "işletim sistemi" tamamen açıklandı
"The Best of Us" Chen Feiyu'nun sınırlı doğum günü posterini yayınlıyor, en iyi gençler geleceği bekleyebilir.
Theshy doğum günü Ning Wang bir yazım hatası gönderdi Hayranlar hayali kız arkadaşını mı tanıtmak istiyor?
BMW M4 GT4 resmi haritası yayınlandı, yaklaşık 1.3 milyon yuan
To Top