从命令行调用Python SimpleHTTPServer,没有缓存选项

时间:2012-08-30 09:28:39

标签: python

在Windows 7上,我使用的是命令行

python -m SimpleHTTPServer 8888

调用一个简单的Web服务器来提供目录中的文件,以便进行开发。

问题是服务器似乎将文件保留在缓存中。尽管有较新版本的文件可供使用,但仍会提供旧版本的文件。

有没有办法直接从命令行指定“no cache”选项?

4 个答案:

答案 0 :(得分:46)

也许这可行。将以下内容保存到文件中:

<强> serveit.py

#!/usr/bin/env python
import SimpleHTTPServer

class MyHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
    def end_headers(self):
        self.send_my_headers()
        SimpleHTTPServer.SimpleHTTPRequestHandler.end_headers(self)

    def send_my_headers(self):
        self.send_header("Cache-Control", "no-cache, no-store, must-revalidate")
        self.send_header("Pragma", "no-cache")
        self.send_header("Expires", "0")


if __name__ == '__main__':
    SimpleHTTPServer.test(HandlerClass=MyHTTPRequestHandler)

然后使用

运行它
python serveit.py 8000

在端口8000上提供当前目录。这完全被拉from this gist,看起来效果很好!

注意:如果您只是想运行本地网络服务器来提供静态内容,那么您可能会对precanned node solution to do this => http-server感兴趣,我一直在使用它并且似乎效果很好。

此外,如果你在Mac上,如果你以root身份运行它,你可以在端口80或443上运行它!例如

sudo python serveit.py 80

应该允许您运行它并在浏览器中http://localhost

访问它

答案 1 :(得分:12)

当然上面的脚本不适用于Python 3.x,但它只是将SimpleHTTPServer更改为http.server,如下所示:

#!/usr/bin/env python
import http.server

class MyHTTPRequestHandler(http.server.SimpleHTTPRequestHandler):
    def end_headers(self):
        self.send_my_headers()
        http.server.SimpleHTTPRequestHandler.end_headers(self)

    def send_my_headers(self):
        self.send_header("Cache-Control", "no-cache, no-store, must-revalidate")
        self.send_header("Pragma", "no-cache")
        self.send_header("Expires", "0")


if __name__ == '__main__':
    http.server.test(HandlerClass=MyHTTPRequestHandler)

抱歉,我会添加评论,但显然我没有足够的代表......

答案 2 :(得分:8)

我建议您在刷新浏览器时按Ctrl + F5。

刚刚遇到this,它可能就是你正在寻找的东西(顺便说一句,它是红宝石)

答案 3 :(得分:5)

也许是浏览器缓存你的文件而不是SimpleHTTPServer。请先尝试停用浏览器缓存。