Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    If-Modified-Since in Java

    Ciao!
    Ho creato un servizio che legge feed rss e crea opportuni file di output.
    Ho fatto in modo che il servizio venga chiamato una volta al giorno ad uno specifico orario.
    Quello che sto cercando di fare è ora creare una sorta di caching, ovvero, ad ogni richiesta di un utente, vorrei controllare se il feed è stato aggiornato dall'ultima volta che l'ho analizzato ed in caso negativo inviare all'utente direttamente l'output elaborato precedentemente.
    Mi sono subito tornate in mente le nozioni di HTTP ed il famoso header if-modified-since ed ho cercato qualche applicazione in Java (e l'ho anche trovata con la classe URLConnection) ma non riesco a capire come funziona...

    Come posso fare a capire quando una particolare risorsa è stata aggiornata?

    Grazie, ciao!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: If-Modified-Since in Java

    Originariamente inviato da dionisoft
    Mi sono subito tornate in mente le nozioni di HTTP ed il famoso header if-modified-since ed ho cercato qualche applicazione in Java (e l'ho anche trovata con la classe URLConnection) ma non riesco a capire come funziona...

    Come posso fare a capire quando una particolare risorsa è stata aggiornata?
    È abbastanza semplice. La logica, se ora non sbaglio, dovrebbe essere la seguente.

    La prima volta che fai una request non imposti l'header "If-Modified-Since" nella request. Questo fa sì che la risorsa ti venga fornita sicuramente.
    La response potrebbe (non è detto) fornirti l'header "Last-Modified" (nota che URLConnection ha getLastModified() ).
    Se non ci fosse un last modified, dovresti vedere se c'è l'header "Date" (data del messaggio di response, vedi getDate() ) e se nemmeno questa c'è credo che puoi tranquillamente prendere la data corrente.

    Dalla prossima request in avanti passi nella request l'header "If-Modified-Since" con la data del last modified ottenuto/determinato come detto prima. Se il server determina che la risorsa è stata modificata dopo questa data, hai una normale response (se non ci sono errori) con status 200 e con tutta la risorsa.
    Se invece il server deduce che la risorsa non è stata modificata, allora lo status code è 304 (Not modified), secondo le specifiche. Pertanto tu "tieni" la risorsa che devi aver cachato (da qualche parte) prima.

    Se ti viene fornita una nuova risorsa modificata chiaramente dovresti determinare nuovamente il last modified e la cosa poi va avanti così ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Come al solito hai ragionissima!!
    Purtroppo (dopo milioni di prove) ho appena scoperto che il feed in questione viene generato nel momento stesso della richiesta, quindi credo che l'unica possibilità che mi rimane al momento sia confrontare l'hashcode del nuovo e del vecchio per vedere se sono uguali...

    Grazie mille comunque!! Ciao!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.