Tornado将查询字符串添加到静态文件路径

2 投票
1 回答
1382 浏览
提问于 2025-04-18 02:18

当Tornado加载一个模板时,静态文件的路径会变成这样:

http://localhost:8888/static/js/jquery-ui.min.js?v=02e1058fd3cb0799867ba932a4ad3b22

我使用这种方式来声明静态文件:

settings = {
    'static_path': os.path.join(os.getcwd(), 'static'),
}
application = tornado.web.Application([
        (r'/', MainHandler),
        (r'/login/', LoginHandler),
        (r'/websocket', EchoWebSocket),
        (r'/static/', tornado.web.StaticFileHandler, dict(path=settings['static_path'])),
    ], static_hash_cache=False, debug=True, cookie_secret='salt', **settings)

我该怎么去掉路径中的'v'变量呢?

1 个回答

2

这里的 v 是一个静态文件的哈希值,它是根据文件内容生成的。

当你使用 static_url() 函数时,它会把相对路径转换成一个类似于 /static/images/logo.png?v=aae54 的URI。这个 v 参数就是 logo.png 文件内容的哈希值,它的存在会让 Tornado 服务器向用户的浏览器发送缓存头,这样浏览器就会无限期地缓存这个内容。

因为 v 参数是基于文件内容生成的,如果你更新了文件并重启服务器,服务器就会开始发送一个新的 v 值,这样用户的浏览器就会自动获取到新文件。如果文件内容没有变化,浏览器会继续使用本地缓存的副本,而不会去检查服务器上是否有更新,这样可以显著提高页面的加载速度。

这个 v 是用来在客户端浏览器中缓存文件的。你可以把它想象成文件名的一部分。

如果你不想要这种缓存效果,正如 Tornado 所说的,你可以使用 nginx 服务器。

http://www.tornadoweb.org/en/branch2.3/overview.html#static-files-and-aggressive-file-caching

撰写回答