在OSX上使用python -m SimpleHttpServer [port]

1 投票
3 回答
1227 浏览
提问于 2025-04-18 14:06

我创建了一个最简单的html页面。

<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>App</title>
    </head>
    <body>
        Hello, world.
    </body>
</html>

然后在这个页面的文件夹里运行了 python -m SimpleHTTPServe 8000

问题:当我访问 localhost:8000 时,我看到的是我页面的文本。这意味着这个http服务器没有把它当作html页面来处理,而是把我页面里的每一行文字都包裹在了 <p> 标签里。

如果我查看源代码,我得到的是:

<html> 
........
<body>
<p class="p1"><span class="s1">&lt;</span><b>html</b><span class="s2"> </span><span class="s3">lang</span><span class="s1">=</span><span class="s4">"en"</span><span class="s1">&gt;</span></p>
<p class="p2">    <span class="s1">&lt;</span><span class="s5"><b>head</b></span><span class="s1">&gt;</span></p>
<p class="p2">        <span class="s1">&lt;</span><span class="s5"><b>meta</b></span> <span class="s3">charset</span><span class="s1">=</span><span class="s4">"utf-8"</span><span class="s1">&gt;</span></p>
<p class="p3"><span class="s2">        </span>&lt;<span class="s5"><b>title</b></span>&gt;Backbone.js Todo App&lt;/<span class="s5"><b>title</b></span>&gt;</p>
<p class="p2">    <span class="s1">&lt;/</span><span class="s5"><b>head</b></span><span class="s1">&gt;</span></p>
<p class="p2">    <span class="s1">&lt;</span><span class="s5"><b>body</b></span><span class="s1">&gt;</span></p>
<p class="p3"><span class="s2">        </span>Hello, world.</p>
<p class="p3"><span class="Apple-converted-space">    </span>&lt;/<span class="s5"><b>body</b></span>&gt;</p>
<p class="p1"><span class="s1">&lt;/</span><b>html</b><span class="s1">&gt;</span></p>
</body>
</html>

3 个回答

0

如果你的页面显示的内容只是一些文本,就像你描述的那样,这很可能是因为服务器在它的HTTP头信息中没有使用正确的content-typeSimpleHTTPServer使用一个叫mimetypes的模块来判断大多数文件类型应该使用什么content-type

你可以自己检查一下:

>>> import mimetypes
>>> mimetypes.init()
>>> print mimetypes.types_map
...

或者更具体一点

>>> print mimetypes.types_map['.html']
text/html

确保你的文件扩展名和mimetypes所期望的匹配。

0

我刚在我的Mac上试了一下,发现没有出现类似的情况:我启动服务器的方式稍微不同:

  • python -mSimpleHTTPServer 8000 : 这里的m和SimpleHTTPServer之间没有空格(我试过加空格,结果一样)
  • 我有两个文件:a.out和a.html,内容是一样的:看起来a.out被下载了,而a.html则在浏览器中显示出来(我用的是Chrome)

我猜你的文件没有.html这个扩展名,可能是你的浏览器自己加了标签来显示它。

你可以试着用curl下载这个文件来确认一下:在终端输入 curl http://localhost:8000/a.out

注意:我在一台装有MacOS 10.9.4的MacBook Air上运行,使用的是python 2.7.5

1

如果你在用TextEdit编辑你的页面,记得打开“格式”菜单,选择“转换为纯文本”。

纯文本

如果你在没有选择这个选项的情况下保存为HTML,TextEdit会自动加上一些标签,以保持你的文本格式。

撰写回答