Varför är det så viktigt att våra webbservrar stödjer If-modified-since?

2011-05-30

Installation

När SiteSeeker och globala sökmotorer hämtar dokument från en webbserver, lagras dokumenten (cachas) på sökmotorns server. Det betyder att nästa gång sökmotorerna undersöker webbservern, behöver de endast hämta dokumenten igen om de ändrats.

Webbläsare använder också sparade kopior av webbsidor när användare återbesöker sidor. Detta är endast möjligt om webbservern stödjer If-Modified-Since i HTTP-huvudet.

Om If-Modified-Since inte stödjs, behöver sökmotorerna hämta om alla dokument, även då de inte ändrats. Detta innebär en större belastning på webbservrarna och att indexeringen kan ta mycket längre tid.

Observera att SiteSeeker inte skickar If-Modified-Since för sidor som är angivna som startpunkter i Admin.

I SiteSeeker Admin kan du i rapporten Indexeringsöversikt längst ner under HTTP-förfrågningar kontrollera hur stor andel av förfrågningarna som gav svarskod 304. Andelen bör normalt vara upp mot 100%. En låg andel indikerar att If-Modified-Since inte hanteras korrekt.

Last-Modified

En förutsättning för att If-Modified-Since ska fungera är att SiteSeeker får ett Last-Modified-datum för webbsidor och dokument från webbservern vid sidhämtningen. Detta bör skickas i en HTTP-header, men kan även sättas i en metatagg.

Last-Modified i HTTP-header

När Last-Modified skickas i headern ska den vara på följande format:

Last-Modified: Tue, 05 Sep 2006 13:20:29 GMT

I ASP.Net kan man t.ex. använda Response.AddHeader("Last-Modified", moddate.ToString("R")), eller i fallet med EPiServer 4.60 och senare, Response.Cache.SetLastModified(moddate), där moddate är ett objekt av typen System.DateTime.

Last-Modified i metatagg

Metataggen för Last-Modified ska ha formatet:

<meta name="Last-Modified" content="Tue, 05 Sep 2006 13:20:29 GMT">

Glöm inte att ange detta namn (Last-Modified) under Metainformation i inställningarna för servern i SiteSeeker Admin.

Notera! Det är mycket viktigt att modifieringsdatumet som anges som Last-Modified verkligen är det datum så sidan allra senast ändrades. Vissa verktyg uppdaterar inte det vanliga ändringsdatumet om man bara rättar stavfel, men Last-Modified måste uppdateras även då. Uppdateras inte Last-Modified korrekt kommer SiteSeeker att cache-lagra gamla versioner av sidor och dokument, och ändringar kommer inte att synas i sökmotorn.

If-Modified-Since

När SiteSeeker har ett Last-Modified-datum för en cachad webbsida eller dokument, kommer SiteSeeker vid efterföljande förfrågningar för sidan att skicka HTTP-headern If-Modified-Since:

If-Modified-Since: Tue, 05 Sep 2006 13:20:29 GMT

Webbservern/publiceringsverktyget ska då jämföra det datum SiteSeeker skickar med det datum som finns lagrat som tekniskt modifieringsdatum, Last-Modified, för sidan. Om If-Modified-Since >= Last-Modified så ska HTTP-statuskoden 304 skickas, och sedan ska ingen ytterligare information sändas annat än övriga HTTP-headers. Om If-Modified-Since < Last-Modified ska HTTP-statuskoden 200 skickas, och därefter ska sidan/dokumentet skickas som vanligt.

Notera! Det är viktigt att inte göra en strängjämförelse mellan datumen If-Modified-Since och Last-Modified, utan bägge datum måste parsas och en datumjämförelse göras. Att bara göra en strängjämförelse är inkorrekt och bryter mot HTTP-standarden, och fungerar inte tillförlitligt eller inte alls.

Notera! Datum ska formateras såsom ovan i RFC-822-format, med engelska namn för dag och månad. Annan formatering, såsom den snarlika med "AM/PM" kommer inte att fungera: Last-Modified: Fri, 29 Jan 2009 02:17:22 PM GMT.

Om en webbserver hanterar Last-Modified eller If-Modified-Since felaktigt

Om det inte är möjligt att se till att en webbserver både levererar korrekt Last-Modified-datum och kan hantera If-Modified-Since, bör du ställa in att SiteSeeker inte ska använda If-Modified-Since vid hämtning. Inställningen finns i Admin under Indexering » Servrar » Redigera server » Hämtningsinställningar.