Petite modification au niveau du comportement du shaarli. Depuis un moment ma version intègre le header Last-Modified avec la date de changement du fichier datastore.php (ou sont sauvegardés les liens).
J'ajoute quelques lignes pour que cela soit utile côté client, en interrogeant le header de requête If-Modified-Since de mon côté (serveur donc). S'il existe, alors on le compare à la valeur de Last-Modified et selon que le contenu a été modifié ou non, le status sera adapté :
- 304 Not Modified
- 200 Ok (thus modified)
Cela ne devrait pas bloquer le fonctionnement habituel (sinon c'est une régression / c'est pas voulu).
En gros pour obtenir le Last-Modified :
$ curl https://dukeart.netlib.re/links/?do=rss -I 2>/dev/null | grep -ie last-modified
last-modified: Sun, 17 Jan 2021 17:13:30 GMT
Et pour consulter le flux et le télécharger uniquement lorsqu'il est modifié (on place la date reçue précédemment dans le header) :
$ curl https://dukeart.netlib.re/links/?do=rss -H "If-Modified-Since: Sun, 17 Jan 2021 17:13:30 GMT"
La requête renvoie un 200 (et le contenu) si la date de modification du contenu (Last-Modified) est plus grande que la date que vous fournissez. Si le client intègre la mécanique pour chaque flux, cela permet de consulter très régulièrement sans faire de transfert inutile.
Au niveau du code ajouté dans le shaarli, c'est pas méchant :
<?php
$headers = getallheaders();
$last_modified = date("D, d M Y H:i:s", filectime("data/datastore.php")) . " GMT";
if ( array_key_exists("If-Modified-Since", $headers) ) {
$tx = new DateTime($headers["If-Modified-Since"]);
$tm = new Datetime( $last_modified );
if ( $tm <= $tx ) {
header("HTTP/1.1 304 Not Modified");
exit;
}
}
?>
Je pense que ça reste convenable mais je suis ouvert aux critiques ^^ (même sur le principe de base d'ailleurs).