I've made a twitter-like web app. Users can follow one another when viewing eachother's pages. Here's a high-leve开发者_Python百科l description of what's happening:
- UserA views their own page at www.mysite.com/UserA, which renders a list of users they're following.
- UserA navigates to UserB's page at www.mysite.com/UserB.
- UserA follows UserB (via ajax).
- UserA hits the back button on the browser, to go see their own page again at www.mysite.com/UserA.
- It looks like a cached version of the page is shown, because the list of UserA's followings is not being shown.
- If I hit the refresh button, the listing will now be current.
So is there a way to expire the page in the browser, so that it pulls a fresh copy when hitting the back button? Ideally I could do this only if the user had followed another user, otherwise a cached version of the page would be perfect.
I hope the problem is explained clearly enough, please let me know if I can supply more information. I am using a java/servlets based server (google app engine).
Thank you
You need to instruct the webbrowser to not cache the pages in the history so that it's forced to fire a brand new request to the server when you navigate back in the history. In JSP/Servlet this can be done by adding the following headers to the response of the page(s) you'd like to disable the cache for:
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); // Proxies.
This can be done in a Servlet
which forwards to the JSP or a Filter
which intercepts on JSP requests.
See also:
- Making sure that the page is not cached across browsers
BalusC's answer sounds good, but what about a script in the page that does something like this? (JQuery assumed)
<script>
function updateFromServer()
{
// ajax get update from server GO!
}
$(document).ready( function() {
// on page load, get an update from the server
updateFromServer() ;
}) ;
// also check for update from server every 2 sec
window.setInterval( 'updateFromServer();', 2000 ) ;
</script>
精彩评论