Abdelouahab
Abdelouahab

Reputation: 7559

How to use Appcache with web frameworks?

I have a problem about changing the main page, I use Tornado, and in Tornado, there is a special value which is generated everytime the server is reached, it is a token to avoid xsrf attack, but when I use .appcache file, the problem is that it caches everything! and I only show to cache static like css, js, fonts, here is what it contains:

CACHE MANIFEST
# v = 2
/static/css/meteo.css
/static/css/semantic.min.css
/static/js/jquery-2.1.1.min.js
/static/css/main.css
/static/js/semantic.min.js
/static/js/geo.js
/static/js/meteo.js
/static/fonts/icons.woff2
/static/fonts/icons.woff
/static/fonts/WeatherIcons-Regular.woff
NETWORK:
/
FALLBACK:

It doesent work, the / get cached!

So how to do this with new Framework, where it we dont make the html file in the route, but the uri that is bound to a function/class?

Here is a video I made about it

And it seems that the master is always cached :

enter image description here

Update: From this page, it is noway!

But, you say, why don’t we not cache the HTML file, but cache all the rest. Well. AppCache has a concept of “master entries”. A master entry is an HTML file that includes a manifest attribute in the html element that points to a manifest file (which is the only way to create an HTML5 appcache BTW). Any such HTML file is automatically added to the cache. This makes sense a lot of the time, but not always. In particular, when an HTML document changes frequently, we won’t want it cached (as a stale version of the page will most likely be served to the user as we just saw).

Is there no way to over-​​ride this? Well, AppCache has the idea of a NETWORK whitelist, which instructs the appcache to always use the online version of a file. What if we add HTML files we don’t want cached to this? Sorry, no dice. HTML files in a master entry stay cached, even when included in the NETWORK whitelist. See what I mean. Poor AppCache didn’t make these rules. He’s just following them literally. He’s not a douchebag, he’s a pain in the %^&*, a total “jobs-​​worth”.

Upvotes: 0

Views: 204

Answers (1)

Abdelouahab
Abdelouahab

Reputation: 7559

I got the solution from here:

I made a hack.html which contains:

<!DOCTYPE HTML>
<html>
<head>
 <meta charset="utf-8">
 <title>Hack 4 Manifest</title>
</head>

<body>
  {% raw xsrf_form_html() %}
</body>
</html>

And then

Add this in the main page:

<iframe style='display: none;' src='/hack'></iframe>

And then in Tornado:

(r"/hack", handlers.Hack),

class Hack(MainHandler):
    @tornado.gen.coroutine
    def get(self):
        self.render("hack.html")

And then I use the javascript call:

xsrf = $("iframe").contents().find("input").val()
$("#laat").html('<input id="lat" type="hidden" name="lat"></input><input type="hidden" name="_xsrf" value='+xsrf+'><input id="lon" type="hidden" name="lon"></input><input class="ui fluid massive yellow button" value="Get forecast" type="submit"/>');

Upvotes: 0

Related Questions