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

Min*_*Kao 33 python

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

python -m SimpleHTTPServer 8888
Run Code Online (Sandbox Code Playgroud)

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

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

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

Bra*_*rks 49

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

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)
Run Code Online (Sandbox Code Playgroud)

然后使用它运行它

python serveit.py 8000
Run Code Online (Sandbox Code Playgroud)

在端口8000上提供当前目录.这完全取决于这个要点,似乎工作得很好!

注意:如果您只是想运行一个本地Web服务器来提供静态内容,您可能会对一个预先安排好的节点解决方案感兴趣=> http-server,我一直在使用它,似乎工作得很好.

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

sudo python serveit.py 80

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

  • 非常感谢!希望我能不止一次"加" (4认同)
  • 将其添加到`.bash_profile`使得使用起来更方便:`alias server ="open http:// localhost:8000/&& echo'startinghost:8000'&& python~/serveit.py 8000>/dev/null 2>&1"` (2认同)
  • 为什么这样有效的理论:SimpleHTTPRequestHandler 只发送“Last-Modified”标头;它不发送 max-age 或任何明确的信息它的有效时间,但浏览器默认缓存一些启发式时间:/sf/ask/1014768611/, /sf/answers/2229648221/,除非明确告知不要这样做(这里的“缓存控制”是这样做的)。 (2认同)

DBr*_*own 14

当然上面的脚本不适用于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)
Run Code Online (Sandbox Code Playgroud)

对不起,我会添加评论,但显然我没有足够的代表......


zen*_*poy 8

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

刚碰到这个,它可能就是你正在寻找的东西(顺便说一下,它是红宝石)

  • 但是,但是,我使用的是 jQuery AJAX。即使设置` $.ajaxSetup({ cache: false });` 也不能修复它。 (2认同)

app*_*rat 6

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