Bir web sayfasının tarihine bakarak düzenlenmiş olup olmadığını kontrol etmek için http başlığının istenmesini isteyebilirsiniz, ancak - php, aspx gibi dinamik sayfalar hakkında - Verilerini bir veritabanından alıyor?Dinamik bir sayfanın değiştirilip değiştirilmediğini kontrol etmek için "http header" ı kullanabilirim
cevap
http yanıtı başlıklarını doğru şekilde kullanıyorsa, ancak genellikle gözden kaçmış olabilirsiniz. Aksi takdirde, içeriğin yerel bir md5-hash değerini saklamak sizin için yararlı olabilir (içeride daha kolay bir içerik dizgisi olmadıkça). İdeal değil (çünkü oldukça yavaş bir süreç) ama bu bir seçenek.
Evet, sayfaları zamanlanmamış olarak işaretlemek için HTTP üstbilgilerini kullanmalı ve kullanmalısınız. Dinamik olsalar da (PHP, ASPX, vb.) Ve/veya veritabanı tarafından yönlendirildiyse, Expires üstbilgisini/HTTP Modifiye Edilemeyi uygun bir şekilde göndermeyi manuel olarak denetlemeniz gerekir. ASP.NET'in bunun için bazı SqlDependency nesneleri vardır, ancak yine de yapılandırılması ve yönetilmesi gerekir. (Emin değilim PHP aynı bunun gibi bir şey var ama ARMUT şey muhtemelen orada eğer değil ... eğer)
Bu ETag başlığının tam amacı, ancak web çerçevesi veya desteklediği zorundadır Uygulamanızın Başlık, Eşleşmiyorsa ve If-Range (bkz. HTTP Ch 3.11) başlıklı isteklere uygun şekilde yanıt vermesi gerekir.
Last-Modified
başlığı yalnızca sitenin programlayıcısının açıkça döndürülmesi için ayarlanmış olması durumunda kullanılacaktır.
Düzenli, statik bir sayfa için Last-Modified
, HTML dosyasının son değişikliğinin zaman damgasıdır. Dinamik olarak oluşturulmuş bir sayfa için sunucu, isteğin yerine bağlı olarak içeriğin nasıl değiştiğini bilmenin gerçek bir yolu olmadığından, bir Last-Modified
değerini güvenilir bir şekilde atayamaz. Bu nedenle, birçok sunucu üstbilgiyi hiç oluşturmaz.
Sayfa üzerinde denetime sahipseniz, Son Değiştirilen üstbilginin ayarlandığından emin olmak için Last-Modified
numaralı denetimin başarılı olup olmadığını kontrol edin. Aksi takdirde, sayfayı getirmeniz ve değişen bir bölüm (ör. Haber sitesinin başlığında tarih/saat) bulmak için bir normal ifadeyi gerçekleştirmeniz gerekebilir. Böyle belirgin bir belirteç yoksa, sayfa içeriğinde bir MD5'in Oli's suggestion değerini değiştirdiğinden emin olmak için ikinci olarak kullanırdım.
bunu hep kullanışlı daha fazla olması Conditional GET Simon Willison makalesini buldum modası geçmiş olduğunu düşünebilirsin rağmen. Örnek PHP'de ancak diğer dillere uyarlayabileceğiniz kadar basit. İşte örneği: Bununla
function doConditionalGet($timestamp) {
// A PHP implementation of conditional get, see
// http://fishbowl.pastiche.org/archives/001132.html
$last_modified = substr(date('r', $timestamp), 0, -5).'GMT';
$etag = '"'.md5($last_modified).'"';
// Send the headers
header("Last-Modified: $last_modified");
header("ETag: $etag");
// See if the client has provided the required headers
$if_modified_since = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ?
stripslashes($_SERVER['HTTP_IF_MODIFIED_SINCE']) :
false;
$if_none_match = isset($_SERVER['HTTP_IF_NONE_MATCH']) ?
stripslashes($_SERVER['HTTP_IF_NONE_MATCH']) :
false;
if (!$if_modified_since && !$if_none_match) {
return;
}
// At least one of the headers is there - check them
if ($if_none_match && $if_none_match != $etag) {
return; // etag is there but doesn't match
}
if ($if_modified_since && $if_modified_since != $last_modified) {
return; // if-modified-since is there but doesn't match
}
// Nothing has changed since their last request - serve a 304 and exit
header('HTTP/1.0 304 Not Modified');
exit;
}
HTTP fiilleri kullanabilirsiniz GET veya HEAD (Ben others ile mümkündür düşünüyorum, ama bunları kullanmak için bir neden göremiyorum). Tek yapmanız gereken If-Modified-Since
ya da If-None-Match
ya da Last-Modified
başlıklarının ya da sayfanın önceki bir sürümü tarafından gönderilen ETag
değerlerinin eklenmesidir. HTTP sürüm 1.1'den itibaren Last-Modified
üzerinden ETag
önerilir, ancak her ikisi de işi yapacaktır.
Bu, koşullu bir GET'nin nasıl çalıştığıyla ilgili çok basit bir örnektir.Öncelikle sayfayı olağan şekilde almak gerekir:
GET /some-page.html HTTP/1.1 Host: example.orgkoşullu başlıkları ve içerikleri ile
İlk tepkisi: Artık
200 OK ETag: YourETagHere
koşullu olsun isteği:
GET /some-page.html HTTP/1.1 Host: example.org If-None-Match: YourETagHere
Ve belirten tepkisi sayfanın önbelleğe alınmış sürümünü kullanabilirsiniz, çünkü sadece başlıklar teslim edilir:
304 Not Modified ETag: YourETagHere
Bu işlemle sunucu size bildirimde bulunmadı.
Ayrıca koşullu GET: HTTP conditional GET for RSS hackers ile ilgili başka bir makale de önerebilirim.
- 1. Git repository'deki belirli bir dosyanın değiştirilip değiştirilmediğini kontrol edin
- 2. Mercurial: son çekme/güncellemenin değiştirilip değiştirilmediğini kontrol edin
- 3. Belirtilen dosyanın değiştirilip değiştirilmediğini CMake hedefi nasıl yapılır?
- 4. Açılır liste, dizinin kod veya seçimden sonra değiştirilip değiştirilmediğini kontrol edin
- 5. Dosya okunup okunmadığını ve Windows toplu iş dosyasında değiştirilip değiştirilmediğini kontrol edin
- 6. Oranlarını kontrol etmek için Nodejs'de http alma istekleri nasıl sıralanır?
- 7. nasıl kontrol etmek için "checkbox" dinamik - jQuery Mobile
- 8. Spinner: Öğe seçiminin programlı olarak mı değiştirildiğini veya kullanıcı tarafından bir eylemle değiştirilip değiştirilmediğini nasıl öğrenirim?
- 9. Eğer img src'nin http://img.youtube.com/vi/ ile başlayıp, herhangi bir karakterle başlayıp youtube video iframe ile değiştirilip değiştirilmediğini nasıl kontrol edebilirim?
- 10. HttpContentExtensions.ReadAsAsync <T>() 'ı nasıl kullanabilirim?
- 11. Iphone: NSPredicate bir kimlik kontrol etmek için
- 12. kontrol etmek için alternatif, bir değerin
- 13. Kullanılmayan CSS seçicilerini kontrol etmek için araç?
- 14. MVC: http header ekle: controller veya view?
- 15. HttpURLConnection'da http-header "Host" un nasıl yazılır?
- 16. HTTP verilerinin hazır olup olmadığını kontrol etmek için sağlayıcıyı kontrol etme
- 17. Bir sayfanın açık olup olmadığını kontrol edin
- 18. Window.location.pathname için Header Ekle
- 19. Bir tablonun var olup olmadığını kontrol etmek için bir UWP
- 20. Bir CGI komut dosyasındaki HTTP Header isteklerine nasıl erişirim?
- 21. bir nesne
- 22. MVC'de tek tek alanları kontrol etmeden Model Nesnesi alanlarındaki bir değişikliği nasıl kontrol edebilirim?
- 23. Sayfanın HTML kaynağını dinamik olarak nasıl değiştirebilirim?
- 24. nasıl kontrol etmek
- 25. kontrol etmek için WiX koşulları boolean mantığı
- 26. bir SQL satırı var mı?
- 27. Dosyalarını kontrol etmek için Unix komutu
- 28. Hangi dalda olduğunuzu kontrol etmek için mercurial
- 29. Tüm div'lerin gizlenip gizlenmediğini kontrol etmek için jQuery'yi kullanın
- 30. ı ı tüm şirket için değerini değiştirmek için kullanabilir bir
Önerilen çözümlerden herhangi biri sizin için çalıştı mı? –