tornado開發調試禁用靜態文件瀏覽器緩存(ETag,304)

在使用tornado開發過程中總是遇到多次刷新頁面而頁面不更新的情況,目前可以採取的方法有:

1、重啓後端tornado服務

2、ctrl+F5強制刷新

3、按F12進入調試模式,在Network裏面選擇Disable cache,再刷新

 

4、在url後面加入參數(如:http://www.csdn.net/?v=1233123),當參數內容不重複時,瀏覽器就會無緩存刷新

5、通過閱讀tornado中的StaticFileHandler源碼以及大佬對StaticFileHandler分享的源碼解析(https://www.cnblogs.com/ShaunChen/p/6636122.html 和 https://www.cnblogs.com/ShaunChen/p/6601242.html)可以發現在get方法有這樣一個函數:

每次如果緩存存在的話就會設置304狀態碼,分析should_return_304函數,發現:

上半部分是每次在響應請求後就會將文件哈希值設置在ETag標籤內,後端同時將ETag內容緩存在內存裏,同一瀏覽器重複訪問同一url時,就會把上次的ETag標籤設置在請求報文的If-None-Match標籤內,後端就會將If-None-Match與已緩存的ETag內容進行匹配,如果匹配成功就會返回304.

下半部分是每次在響應請求後後端將文件的修改時間設置在last-modified標籤內,再次發送同樣的請求後,瀏覽器將last-modified裝入If-Modified-Since標籤發送後,後端就會根據文件在系統的修改時間與If-Modified-Since作比較,如果不晚於的話就返回304

下半部分只要文件修改瀏覽器就不作緩存,對開發影響不大,但是上半部分由於ETag內容是緩存在內存中,不會隨着文件修改而更新,所以要禁用ETag緩存,禁用方式有兩種,一種是在響應報文中去掉ETag標籤,另一種是在請求報文中去掉If-None-Match標籤,修改代碼如下:

class MyStaticFileHandler(tornado.web.StaticFileHandler):
    def set_extra_headers(self, path):
        self.clear_header('ETag')
class MyStaticFileHandler(tornado.web.StaticFileHandler):
    def set_extra_headers(self, path):
        del self.request.headers['If-None-Match']

6、其實最好的方法是利用Tornado.web.Application的settings參數參數進行配置,設置debug=True或者static_hash_cache=False,具體寫到下面的方法中:

app = tornado.web.Application(
        handlers=[(r'/', IndexHandler), (r'/poem', PoemPageHandler)],
        debug=True
    )

參考文獻:

https://blog.csdn.net/ljphilp/article/details/47103745

http://demo.pythoner.com/itt2zh/ch2.html

https://tornado-zh.readthedocs.io/zh/latest/guide/templates.html

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章