45

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

python -m SimpleHTTPServer 8888

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

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

有没有办法直接从命令行指定“无缓存”选项?

4

5 回答 5

50

也许这可能会奏效。将以下内容保存到文件中:

服务包

#!/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 上的当前目录提供服务。这完全是从这个 gist中提取的,并且似乎工作得很好!

注意:如果您只是想运行一个本地网络服务器来提供静态内容,您可能会对执行此操作的预设节点解决方案感兴趣 => http-server,我一直在使用它并且看起来效果很好。

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

sudo python serveit.py 80

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

于 2014-09-07T09:46:44.443 回答
29

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

#!/usr/bin/env python3

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)
于 2015-02-25T00:18:52.893 回答
11

建议你刷新浏览器的时候按Ctrl+F5。

刚碰到这个,它可能就是你要找的东西(顺便说一下,它是用红宝石制作的)

于 2012-08-30T10:31:55.517 回答
6

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

于 2012-08-30T09:35:07.547 回答
1

我更改为另一个端口号,更新的文件反映在我的浏览器上。

前任。

python -m http.server -p 8000

python -m http.server -p 8001
于 2021-11-27T00:37:07.930 回答