Ajatellaan, että sinulla on nettisivut jotka lopettavat toimintansa mutta ne ovat kuitenkin nähtävissä.
Laitat siihen etusivulle tietoa, että sivut eivät toimi.
Jokainen, joka käy siellä näkee tämän tiedon.
Päivität sivusi ja kirjoitat, että sivut ovat jälleen käytössä.
Jokaisen kävijän tietokoneen välimuistiin on jäänyt tieto, että sivut eivät ole käytössä. Eli tarkoittaa sitä, että kun menet sivulle käymään näät sen vanhan tiedon, että sivut eivät toimi. Käyvät etusivulla ja sitten poistuvat sivulta kokonaan.
Nyt kävijän pitäisi "päivittää" (refresh) sivu itse eli painaa F5 jotta uusi tiedote näkyisi. Mutta, miten siitä saisi tiedon kävijälle? Monikaan ei hoksaa painaa F5.
Kysymys kuuluu: onko jotain muuta tapaa saada kävijän kone "refreshaamaan" automaattisesti? Pop-up-ikkuna ehkä?
Ei ole mahdollista. Kuten juuri itse totesit, jos sivu on tuolla tavalla välimuistissa, käyttäjä ei hae sitä (tai mitään muutakaan) palvelimelta. Mitään tietoa ei liiku, palvelin ei tiedä kävijästä eikä kävijä palvelimesta. Vaikka netti olisi poikki, sivu saattaa toimia käyttäjällä samalla tavalla. Pitäisi olla edes jokin asia, jonka käyttäjä hakisi palvelimelta, jotta olisi toivoa vaikuttaa.
Varsinainen virhe on tapahtunut siinä vaiheessa, kun väliaikainen ilmoitus on päästetty pysyvästi välimuistiin. Palvelimelta olisi pitänyt säätää asetukset niin, että palvelin ilmoittaisi sivun olevan voimassa vain tietyn aikaa (HTTP-otsikot Expires ja Cache-Control), jolloin selain ymmärtäisi hakea sen myöhemmin uudestaan palvelimelta.
Eikös sen periaatteessa tulisi toimia, jos nimeät index tiedostosi uudestaan, ja asetat web-serverin conffiin muutokset?
esim:
cd /var/www cp index.php index_new.php sudo vim /etc/apache2/sites-enabled/000-default <Directory /var/www/> ... DirectoryIndex index_new.php </Directory> mv index.php index_old.php sudo service apache2 restart
Ei.
Ja koska eräs haluaa aina vain *tuilla eikä auttaa, muut saa selittää:
Palvelimen konffi määrittää mikä tiedosto luetaan, jos osoitetaan hakemistoon. Selain siis pyytää http://jotain.invalid/, palvelin antaa tiedoston X. Vaihdetaan konffia, palvelin antaisi tiedoston Y JOS selain pyytäisi http://jotain.invalid/, mutta koska sivu on välimuistissa, mitään ei tietenkään haeta.
Tuo asetus siis ei vaikuta asiaan mitenkään tässä tapauksessa.
Sen sijaan jos määrittäisi edelleenohjauksen / -> jotain.html ja vaihtaisi sen / -> toinen.html (ja asettaisi sen ei-pysyväksi), sitten pyyntö todennäköisesti tulisikin ja ohjattaisi muualle eikä olisi väliä vaikka toinen.html olisi sallittu välimuistissa pidettäväksi ikuisesti.
Joka tapauksessa Metabolixin mainitsemat otsakkeet ovat oikea tapa tehdä asia.
Metabolix selitti asian jo, niin en nähnyt tarvetta toistaa asioita.
Siis vaikka sivusto olisi selaimen cachessa, kyllähän siitä pitäisi palvelimelle lähteä pyyntö.
Kun selain tallettaa cacheensa kamaa, tallettaa se myös Last-Modified tai eTag headerin palvelimelta.
Kun sivustolla mennään uudestaan, lähtee palvelimelle If-Modified-Since tai If-None-Match headerit, joihin selain pyytää vastaamaan 304 Not Modified, jos eTag vastaa tai päivämäärä on sama kuin Last-Modified. (Jos muistan oikein, apachessa nämä headerit taitaa palautua selaimen pyyntöön jos mod_expires moduuli on ladattuna)
Tilanteessa joissa nuo pyynnöt lähtee, on ihan turhaa tehdä sinne ehdottamiasi kikkailuja. Eli mikäli selain tuon tarkistuspyynön lähettäisi palvelimelle, niin silloinhan selain lähettäisi pyynnön ja palvelin kertoisi sivun vaihtuneen ihan ilman kikkailujakin.
Nyt kuitenkin ilmeisesti on käynyt niin, että huoltosivu on määritelty "muuttumattomaksi" sisällöksi, eli palvelin on kertonut että se ei tule muuttumaan lähiaikoina. Näin selain tietää, että ei ole mitään hyötyä lähettää palvelimelle edes tuollaista "onko muuttunut" pyyntöä.
Tässä on konseptia väännetty rautalangasta. https://developers.google.com/web/fundamentals/
Ensimmäisessä tuon sivun esimerkissä on vanhenemisajaksi määritelty 120 sekuntia, mutta toki se voi olla, ja ilmeisesti kysyjän tapauksessa on, paljon pidempikin.
Eli kuvaamaasi ETag:illa varustettua pyyntöä ei lähetetä palvelimelle, mikäli Cache-controlissa määritelty max-age (tai sen puutteessa taaksepäinyhteensopivasti expires) ei ole mennyt umpeen ja sivulla ei ole määritelty no-cache tai no-store.
Ja kun selaimelta ei mene mitään pyyntöä palvelimelle, on aivan yhdentekevää mitä muutoksia palvelimen päässä tehdään.
Jatkon kannalta, kuten taidettiin mainitakin, olisi tuollaiset "huolto"-sivut järkevää määritellä lyhytaikaiseksi sisällöksi (lyhyt max-age)
Aihe on jo aika vanha, joten et voi enää vastata siihen.