Python的http.server(或SimpleHTTPServer)有什么更快的替代品?

332

Python的http.server(或Python 2中的SimpleHTTPServer)是一种从命令行服务于当前目录内容的好方法:

python -m http.server

然而,就 Web 服务器而言,它非常慢......

它的行为就像单线程一样,并且偶尔在使用 RequireJS 加载 JavaScript AMD 模块时会导致超时错误。即使加载没有图片的简单页面也可能需要五到十秒钟。

有什么更快的替代方案,而且同样方便吗?


18
这个帖子让我恢复了理智。我一直在使用SimpleHTTPServer,在使用RequireJS时遇到了随机错误,让我非常抓狂!node的http-server运行得非常好。谢谢! - Dave Cadwallader
4
@ChrisF,根据这个指南,我编辑了问题以更准确地反映这确实是一个可以回答的问题。我解释了我遇到的问题(即超时和浪费时间),但由于我不知道有什么替代方案,所以我无法列出我所做的事情来解决这个问题。我认为这个问题不适合“你最喜欢的___”的形式,因为标准已经明确定义。不同的访问者可能会发现不同的答案更有用,而且答案可能不符合给定的标准。 - Drew Noakes
27
SO(Stack Overflow)有一个习惯,就是关闭人们最喜欢的问题…… - isomorphismes
4
这个问题不仅有用,而且不符合被关闭的描述。至少已经进行了研究... - Bryan Larson
3
如果你想提供一个git仓库,另一个选择是git instaweb - Drew Noakes
显示剩余4条评论
15个回答

3

使用Servez作为服务器

  1. 下载Servez
  2. 安装并运行
  3. 选择要服务的文件夹
  4. 点击“开始”
  5. 前往http://localhost:8080或点击“启动浏览器”

servez

注意:我做了这个因为Chrome浏览器将不再支持应用程序(详见此处),而且我支持那些对命令行毫无经验的艺术学生。

我正在投票支持运行WebGL示例。 - Felipe Gutierrez

2

又一个基于Node的简单命令行服务器

https://github.com/greggman/servez-cli

这个项目的部分原因是为了解决http-server在Windows上存在的问题。

安装

安装Node.js,然后执行以下命令:

npm install -g servez

使用方法

servez [options] [path]

没有指定路径时,它会服务于当前文件夹。
如果存在,默认情况下会为文件夹路径提供index.html。否则,它将为文件夹提供目录列表。它还提供CORS头。您可以选择使用--username=somename --password=somepass打开基本身份验证,并可以提供https服务。

1

我喜欢live-server。它非常快速,而且有一个很好的实时重载功能,在开发过程中非常方便。

使用非常简单:

cd ~/Sites/
live-server

默认情况下,它创建一个 IP 为 127.0.0.1 和端口为 8080 的服务器。

http://127.0.0.1:8080/

如果端口8080不可用,它将使用另一个端口:

http://127.0.0.1:52749/

http://127.0.0.1:52858/

如果您需要在本地网络中查看其他计算机上的 Web 服务器,您可以检查您的 IP 并使用以下命令:
live-server --host=192.168.1.121

这里有一个脚本,可以自动获取默认接口的IP地址。它仅适用于macOS操作系统。
如果将其放在.bash_profile中,live-server命令将自动使用正确的IP启动服务器。
# **
# Get IP address of default interface
# *
function getIPofDefaultInterface()
{
    local  __resultvar=$1

    # Get default route interface
    if=$(route -n get 0.0.0.0 2>/dev/null | awk '/interface: / {print $2}')
    if [ -n "$if" ]; then
            # Get IP of the default route interface
            local __IP=$( ipconfig getifaddr $if )
            eval $__resultvar="'$__IP'"
    else
        # Echo "No default route found"
        eval $__resultvar="'0.0.0.0'"
    fi
}

alias getIP='getIPofDefaultInterface IP; echo $IP'

# **
# live-server
# https://www.npmjs.com/package/live-server
# *
alias live-server='getIPofDefaultInterface IP && live-server --host=$IP'

0

我过去几年一直在使用filebrowser,这是我发现的最佳替代品。

我喜欢它的功能:

  • 跨平台:它支持Linux、MacOs和Windows (+)。它还支持docker (+)
  • 下载很方便。它可以自动将文件夹转换为ziptar.gz等格式,以便传输文件夹。
  • 你可以让每个用户访问文件或文件夹。

enter image description here


1
这个程序是否可以直接通过HTTP提供文件,以便Web开发人员使用?它似乎只是一个文件浏览器。 - Drew Noakes
是的,你可以通过REST API进行访问。请查看这里这里 - Amir Pourmand

0

miniserve

miniserve

  • 跨平台
  • 单个可执行文件
  • 轻量级(< 2MB 适用于 Windows / Linux x86)
miniserve . --index index.html

Vercel serve (node.js)

如果已经安装了node.js,我推荐使用vercel serve

# for node.js >= v14
npm install --global serve

# for node.js <= v13
npm install --global serve@13

serve

http-server(node.js)

http-server的最新版本无法正常工作(请参见issue),但v13版本可以使用。

npm install --global http-server@13
http-server

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接