Python瓶和缓存控制 [英] Python Bottle and Cache-Control
问题描述
我有一个使用Python Bottle的应用程序,我想在静态文件中添加Cache-Control.我是新手,如果做错了事,请原谅我.
I have an application with Python Bottle and I want to add Cache-Control in static files. I am new on this so forgive me if I have done something wrong.
以下是该函数以及我如何处理静态文件:
Here is the function and how I serve static files:
@bottle.get('/static/js/<filename:re:.*\.js>')
def javascripts(filename):
return bottle.static_file(filename, root='./static/js/')
要添加Cache-Control,我又添加了一行(我在教程中看到了)
To add Cache-Control I have included one more line (I saw it in a tutorial)
@bottle.get('/static/js/<filename:re:.*\.js>')
def javascripts(filename):
bottle.response.headers['Cache-Control'] = 'public, max-age=604800'
return bottle.static_file(filename, root='./static/js/')
但是当我检查Chrome开发者工具的标头时:我有 Cache-Control:max-age = 0
或 Cache-Control:no-cache
But when I check the headers from Developer tools on Chrome: I have either Cache-Control:max-age=0
or Cache-Control:no-cache
推荐答案
我看了 static_file()
的源代码,并找到了解决方案.
I had a look at the source code for static_file()
and found the solution.
您需要将 static_file(...)
的结果分配给变量,并在生成的 HTTPResponse
对象上调用 set_header()
You need to assign the result of static_file(...)
to a variable and call set_header()
on the resulting HTTPResponse
object.
#!/usr/bin/env python
import bottle
@bottle.get("/static/js/<filename:re:.*\.js>")
def javascripts(filename):
response = bottle.static_file(filename, root="./static/js/")
response.set_header("Cache-Control", "public, max-age=604800")
return response
bottle.run(host="localhost", port=8000, debug=True)
基本上 static_file(...)
创建一个全新的 HTTPResponse
对象,您对 bottle.response
的修改在这里无效.
Basically static_file(...)
creates a brand new HTTPResponse
object and your modification to bottle.response
has no effect here.
这很符合您的需求:
$ curl -v -o - http://localhost:8000/static/js/test.js
* Adding handle: conn: 0x7f8ffa003a00
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x7f8ffa003a00) send_pipe: 1, recv_pipe: 0
* About to connect() to localhost port 8000 (#0)
* Trying ::1...
* Trying fe80::1...
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 8000 (#0)
> GET /static/js/test.js HTTP/1.1
> User-Agent: curl/7.30.0
> Host: localhost:8000
> Accept: */*
>
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Date: Tue, 15 Jul 2014 00:19:11 GMT
< Server: WSGIServer/0.1 Python/2.7.6
< Last-Modified: Tue, 15 Jul 2014 00:07:22 GMT
< Content-Length: 69
< Content-Type: application/javascript
< Accept-Ranges: bytes
< Cache-Control: public, max-age=604800
<
$(document).ready(function () {
console.log("Hello World!");
});
* Closing connection 0
这篇关于Python瓶和缓存控制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!