• 31-12-2009, 08:11:05
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Örnek kod:

    if (!empty($HTTP_SERVER_VARS['SERVER_SOFTWARE']) && strstr($HTTP_SERVER_VARS['SERVER_SOFTWARE'], 'Apache/2'))
    {
    	header("Cache-Control: no-cache, pre-check=0, post-check=0");
    }
    else
    {
    	header("Cache-Control: private, pre-check=0, post-check=0, max-age=0");
    }
    Doğrusu bu Cache-Control un ne işe yaradığını merak ettim. Cache-Control olsa ne olur ? olmasa ne olur ? Ayrıca yukarıdaki kodda ki her iki Cache-Control ler farklı aralarındaki fark nedir ve hangi durumlarda Cache-Control kullanılmalıdır ?

    Not: İngilizcem yeterli olmadığından yabancı kaynakları okuyamadım.
  • 31-12-2009, 10:12:21
    #2
    banka gibi bir maximum güvenlikli sistem kodluyorsanız sayfaların cachelenmesini önleyebilirsiniz.
  • 01-01-2010, 17:26:40
    #3
    Konu güncel, Cache-Control konusunda daha detaylı bilgisi olanlar beklenmektedir.
  • 01-01-2010, 21:52:15
    #4
    cache olayına girmeden önce header fonksiyonunu bilmemiz gerekiyor.

    header() ile gönderilen cache bilgileri tarayıcılar içindir. Örnek gösterdiğiniz kodlarda web sunucu yazılımı apache mi değil mi diye bakılıyor. Aralarındaki fark görüldüüğü üzere ek bir parametre olan "max-age", yani yaşam süresi.

    Bu cache olayı tarayıcının dosyaları ön bellekte tutup tutmamasını, tutulacaksa ne kadar süre ile tutacağını bildirir.

    Firefoxuna firebug, liveHeaders, httpFox tarzı eklentileri kurup bunları test edebilirsin.

    Son olarak basit bir örnek vereyim sitemizde kullandığımız bir css dosyanıın tarayıcı ön bellek süresini bildirebilir, veya hiç ön belleğe almamamasını, alsa bile siteye girdiğinde baştan talep etmesini sağlayabiliriz. Bunun gibi bir sürü ıvır zıvır.


    Ben bunları çoğu zaman php heade yerine apache .htaccess ile yapıyorum. Bu benim kohana 2 .htaccess dosyamın konuyla ilgili kısımları:

    <IfModule mod_expires.c>
        <FilesMatch "\.(ico|flv|jpg|jpeg|png|gif|js|css|swf|pdf)$">
            #ExpiresActive on
            #ExpiresDefault "access plus 1 year"
        </FilesMatch>
        # 2 hours
        <FilesMatch "\.(html|htm|xml|txt|xsl)$">
            #Header set Cache-Control "max-age=7200, must-revalidate"
        </FilesMatch>
    </IfModule>
    
    <IfModule mod_deflate.c>
        #AddOutputFilterByType DEFLATE text/xhtml text/html text/plain text/xml text/javascript application/x-javascript text/css
    </IfModule>
    
    FileETag none
    
    <IfModule mod_headers.c>
        Header unset Pragma
        Header unset ETag
    </IfModule>

    Konu dahilinde, cache hakkında google de yüzlerce yazı bulunabilir.

    .
  • 01-01-2010, 23:17:59
    #5
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Alexis adlı üyeden alıntı: mesajı görüntüle
    cache olayına girmeden önce header fonksiyonunu bilmemiz gerekiyor.

    header() ile gönderilen cache bilgileri tarayıcılar içindir. Örnek gösterdiğiniz kodlarda web sunucu yazılımı apache mi değil mi diye bakılıyor. Aralarındaki fark görüldüüğü üzere ek bir parametre olan "max-age", yani yaşam süresi.

    Bu cache olayı tarayıcının dosyaları ön bellekte tutup tutmamasını, tutulacaksa ne kadar süre ile tutacağını bildirir.

    Firefoxuna firebug, liveHeaders, httpFox tarzı eklentileri kurup bunları test edebilirsin.

    Son olarak basit bir örnek vereyim sitemizde kullandığımız bir css dosyanıın tarayıcı ön bellek süresini bildirebilir, veya hiç ön belleğe almamamasını, alsa bile siteye girdiğinde baştan talep etmesini sağlayabiliriz. Bunun gibi bir sürü ıvır zıvır.


    Ben bunları çoğu zaman php heade yerine apache .htaccess ile yapıyorum. Bu benim kohana 2 .htaccess dosyamın konuyla ilgili kısımları:

    <IfModule mod_expires.c>
        <FilesMatch "\.(ico|flv|jpg|jpeg|png|gif|js|css|swf|pdf)$">
            #ExpiresActive on
            #ExpiresDefault "access plus 1 year"
        </FilesMatch>
        # 2 hours
        <FilesMatch "\.(html|htm|xml|txt|xsl)$">
            #Header set Cache-Control "max-age=7200, must-revalidate"
        </FilesMatch>
    </IfModule>
    
    <IfModule mod_deflate.c>
        #AddOutputFilterByType DEFLATE text/xhtml text/html text/plain text/xml text/javascript application/x-javascript text/css
    </IfModule>
    
    FileETag none
    
    <IfModule mod_headers.c>
        Header unset Pragma
        Header unset ETag
    </IfModule>

    Konu dahilinde, cache hakkında google de yüzlerce yazı bulunabilir.

    .
    Sanırım en kestirme yol bahsettiğin şekilde .htaccess ile.
    Bu arada satır başlarında bulunan # kaldırmak gerekiyor sanırım.{ # 2 hours hariç}
  • 02-01-2010, 06:08:32
    #6
    Alexis bilgilendirme için teşekkürler o halde "Bu cache olayı tarayıcının dosyaları ön bellekte tutup tutmamasını, tutulacaksa ne kadar süre ile tutacağını bildirir." ise sıradan siteler için yani belkide üstte RedZ nin dediği gibi banka sitesi vs olmayacaksa pekte header içerisine Cache-Control eklemeye gerek yok gibi geldi banada, yanılıyormuyum acaba bu düşüncede ?

    Öte yandan "cache bilgileri tarayıcılar içindir" derken yaniş sadece internet tarayıcılarının önbelleklerinde kalması yada kalmaması ile ilgili ?

    Fakat kafamı karıştıran bir konuya giriyoruz burada, çünki örneğin IE tarayıcısı içerisinde cache kontrol kodu olmayan php sayfalarıda otomatik olarak önbelleğine almıyormu?

    Yani bu durumda cache control kodu yoksa tarayıcının ayarına bağlı olarak sayfayı zaten ön belleğe alır ama php sayfa içine cache kontrol konmuş ise ve cache kapatılmışsa yada süresi kısıtlanmış ise tarayıcı bu cache control e göre hareket edecek değil mi ?
  • 02-01-2010, 07:18:17
    #7
    Örneğimde bazı # işaretleri kalkabilir, bazı kısımları iptal ettim, çünkü geliştirme aşamasında çok zararlı oluyorlar, css dosyasını değiştiriyorum, yenile yenile değişmiyor gibi

    Header bilgileri sadece web tarayıcılar içindir, ya da ben öyle biliyorum. Bankalar kullanamaz diye kesin bir ifade olamaz, çok rahat kullanabilirler. Çünkü güvenlik ile alakası yok, sadece html sayfaları ön belleğe almak gibi düşünmeyin, resimler, css dosyaları, javascript dosyaları, flash, videolar, web de kullanılan tüm medyalara göre ön bellekleme yapılabilir, geçerlilik süresi verilebilir. Ancak yine de bu bilgilere uyup uymamak tamamen tarayıcının elinde.

    Tarayıcı tarafını fazla incelemedim, IE nin varsayılan değerlerini bilmiyorum, ama büyük bir ihtimal ile bir dosyayı çekmeden önce "Last-Modified" header bilgisine bakıyordur, dosya değişti ise çekiyor, değişmedi ise ön cacheten gösteriyordur.

    php ile kullanım için, örneğin bir css dosyası php içinde olmalı, css kodlarının başında cache ve header bilgileri olmalı, bana bu işi .htaccess ile yapmak daha kolay geldi.

    Bu arada en önemli husus "FULL cache" yapıp abarttığımızda, tasarım, css ve resim değişiklikleri sorun çıkarabilir. Sık sık tasarım değiştiriyorsak, ona göre ayar vermemiz gerekecektir.

    Bu konuda aklımda ve elimin altında bir ton bilgi var, yaptığım, incelediğim hızlandırıcılar var. İş sadece bununla bitmiyor, bu sadece uygulanacak yöntemlerden biri. Mesela, önce css ve js dosyalarını minify edebilir, sonrada header bilgisi ile cache ömrünü uzatabiliriz.


    Arşivden iyi bir kaynakta çıkarayım:
    http://www.web-caching.com/mnot_tutorial/

    .