Pythonのhttp.server(またはSimpleHTTPServer)のより高速な代替手段は何ですか?


300

Pythonのhttp.server(またはPython 2のSimpleHTTPServer)は、コマンドラインから現在のディレクトリのコンテンツを提供する優れた方法です。

python -m http.server

ただし、Webサーバーに関しては、非常に遅いです...

シングルスレッドのように動作し、RequireJSを使用してJavaScript AMDモジュールをロードすると、タイムアウトエラーが発生することがあります。画像のない単純なページを読み込むには、5〜10秒かかる場合があります。

同じくらい便利な、より速い代替手段は何ですか?


17
このスレッドは正気を取り戻しました。SimpleHTTPServerを使用していて、RequireJSでランダムなエラーが発生していて、私を混乱させていました!ノードのhttpサーバーは魅力のように動作しています。ありがとう!
Dave Cadwallader

4
@ChrisF、私はこのガイドラインに従って質問を編集して、これ実際に回答可能な質問であるという事実をより文法的に反映しました。私は直面した問題(つまり、タイムアウトと無駄な時間)を説明しましたが、代替案を知らなかったため、問題に対処するために何をしたかをリストすることができませんでした。基準が明確に定義されているため、この質問は「あなたの好きな___は何ですか」という形には当てはまらないと思います。訪問者が異なれば、異なる回答の方が便利である場合があり、回答は指定された基準に合わない場合があります。
ドリューノークス2014

26
SOが人々のお気に入りの質問を閉じる習慣があるのが好きです…
同型写像

4
この質問は有用であるだけでなく、クローズされている説明と一致しません。少なくとも調査はすでに完了しています...
ブライアンラーソン

3
gitリポジトリを提供する場合のもう1つのオプションはgit instawebです。
Drew Noakes、2015年

回答:


394

node.jsのhttpサーバーは非常に便利で、PythonのSimpleHTTPServerよりもはるかに高速です。これは主に、リクエストをシリアル化する代わりに、リクエストの同時処理に非同期IOを使用するためです。

取り付け

まだの場合は、node.jsをインストールします。次に、ノードパッケージマネージャー(npm)を使用してパッケージをインストールし、-gグローバルにインストールするオプションを使用します。Windowsを使用している場合は、管理者権限を持つプロンプトが必要です。Linux/ OSXの場合はsudo、次のコマンドを実行します。

npm install http-server -g

これにより、必要な依存関係がダウンロードされてインストールされhttp-serverます。

使用する

これで、任意のディレクトリから、次のように入力できます。

http-server [path] [options]

パスはオプションで、./public存在する場合はデフォルトで、存在しない場合はデフォルトになります./

オプションは[デフォルト]です。

  • -p 待機するポート番号[8080]
  • -a [localhost]にバインドするホストアドレス
  • -i ディレクトリインデックスページを表示する[True]
  • -sまたは--silentサイレントモードではコンソールにログが記録されません
  • -hまたは--helpヘルプメッセージを表示して終了します

したがって、ポート8000​​で現在のディレクトリを提供するには、次のように入力します。

http-server -p 8000

12
これはすごい!ご指摘ありがとうございます。ストリーミングオーディオ/ビデオのテストに最適です。これは、Pythonサーバーがまったくうまく処理できないように見えるものです。
gman

1
@Salmonface、この-gオプションを間違いなく使用しましたか?また、インストール中にエラーが出力されないことを確認しましたか?そのエラーは、インストール後にそれが見つからないことを意味します。どのプラットフォームにいますか?ドライブ全体で検索コマンドを実行して、という名前のファイルを検索しますhttp-server。これをいくつかの異なるLinuxディストリビューションとWindowsバージョンでうまく使用しました。
Drew Noakes

2
このソリューションを使用すると、ページの読み込み時間が20秒から2秒に改善されたことを確認したいだけです。
0leg

1
さて、最初は、メモリが不足するまで、Python SimpleHTTPServerの改善でした。http-serverは、大きなファイルに対して大量のメモリを消費します。myserver.goプロポーザルは高速であり、スワップを開始して実際に遅くなる前に、5 GBのメモリではなく約2 MBしか消費しません。
ダニエル

2
そのため、2019年11月の時点では、Windowsユーザーのhttp-serverが数か月間壊れているように見えます。その依存関係の多くは古くなっています。そのうちの1つである恍惚状態は放棄されたため、いつ修正されるかは不明です。私は自分自身の修正を検討しましたが、開発者がPRを取るかどうかも明確ではありません。だから、私は自分の代わりを書いた。
gman

106

おすすめ:Twistedhttp://twistedmatrix.com

Pythonで記述され、オープンソースのMITライセンスでライセンスされたイベント駆動型ネットワークエンジン。

これはクロスプラットフォームであり、OS X 10.5〜10.12にプリインストールされています。とりわけ、現在のディレクトリで簡単なWebサーバーを起動できます。

twistd -no web --path=.

細部

オプションの説明(詳細はtwistd --helpを参照):

-n, --nodaemon       don't daemonize, don't use default umask of 0077
-o, --no_save        do not save state on shutdown

「web」は、Twisted非同期エンジン上で単純なWebサーバーを実行するコマンドです。コマンドラインオプションも受け入れます( "web"コマンドの後-詳細についてはtwistd web --help、次を参照してください)。

  --path=             <path> is either a specific file or a directory to be
                      set as the root of the web server. Use this if you
                      have a directory full of HTML, cgi, php3, epy, or rpy
                      files or any other files that you want to be served up
                      raw.

以下のような他のコマンドもたくさんあります:

conch            A Conch SSH service.
dns              A domain name server.
ftp              An FTP server.
inetd            An inetd(8) replacement.
mail             An email service
... etc

取り付け

Ubuntu

sudo apt-get install python-twisted-web (or python-twisted for the full engine)

Mac OS-X(10.5-10.12にプリインストールされているか、MacPortsおよびPipで利用可能)

sudo port install py-twisted

ウィンドウズ

installer available for download at http://twistedmatrix.com/

HTTPS

Twistedは、セキュリティ証明書を利用して接続を暗号化することもできます。これを既存の--pathおよび--port(プレーンHTTPの場合)オプションで使用します。

twistd -no web -c cert.pem -k privkey.pem --https=4433

5
すでにnode.jsを設定していない限り、これが最も便利であることがわかりました。共有してくれてありがとう!
Chris J

3
Ubuntuでは、sudo apt-get install python-twisted-web最初にする必要があります。(この回答をありがとう、それはとても便利です!)
nkorth 2013

2
ツイスト1ラインサーバーの1つの特別な利点は、再開可能なダウンロード(バイト範囲のサポート)をサポートします。これは、大きなファイルをダウンロードするときに必要な機能です。
Pankaj 2013年

7
ノードを使用すると、ビデオ/オーディオが適切にストリーミングされませんでしたが、twistdを使用するとうまくいきます!
dizy

2
およびを使用してtwistd --help、ポートを設定し、他のオプションを取得できますtwistd web --help。それを理解するのにしばらくかかりました。
Ehtesh Choudhury

30

1.0には、数行のコードでファイル提供するためのhttpサーバーユーティリティが含まれています

package main

import (
    "fmt"; "log"; "net/http"
)

func main() {
    fmt.Println("Serving files in the current directory on port 8080")
    http.Handle("/", http.FileServer(http.Dir(".")))
    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}

go run myserver.goまたはを使用してこのソースを実行し、実行可能ファイルをビルドしますgo build myserver.go


すばらしい答えです。これは、SimpleHTTPServerおよびnodejsソリューションよりも高速に実行されます。:)ダウンロードにユーザー名とパスワードを追加する方法はありますか?
Ajax

21

webfsを試してみてください。これは非常に小さく、node.jsやpythonなどのプラットフォームがインストールされているかどうかに依存しません。


1
コンパイルする必要があるように見えますか?ダウンロードするバイナリが表示されませんでした。
BrainSlugs83 14

2
はい、あなたのディストリビューションにそれがない限り。DebianとUbuntuはそれを持っている:apt-get install webfs
Hudon

4
brew install webfsMacでaを実行すると、が発生しました🍺 /usr/local/Cellar/webfs/1.21: 5 files, 96K, built in 15 seconds。その後、私はと同じことwebfsd -F -p 3003 -r resources/public/ -f index.htmlを達成すると言うことができtwistd -no web -p 3003 --path=resources/public/ます。少々複雑なので覚えるのは簡単ではありませんが、twistdまたはSimpleHTTPServerの代わりとして知っておくと役に立ちます。
onetom '20 / 12/14

他のソリューションよりもはるかに優れています。非常に小さく、非常に高速で、OSパッケージとして提供されます。また、SSLをサポートし、システムデーモンとして実行できます。
フェデリコ

14

Mercurialを使用する場合は、組み込みのHTTPサーバーを使用できます。提供したいフォルダで:

hg serve

ドキュメントから:

export the repository via HTTP

    Start a local HTTP repository browser and pull server.

    By default, the server logs accesses to stdout and errors to
    stderr. Use the "-A" and "-E" options to log to files.

options:

 -A --accesslog       name of access log file to write to
 -d --daemon          run server in background
    --daemon-pipefds  used internally by daemon mode
 -E --errorlog        name of error log file to write to
 -p --port            port to listen on (default: 8000)
 -a --address         address to listen on (default: all interfaces)
    --prefix          prefix path to serve from (default: server root)
 -n --name            name to show in web pages (default: working dir)
    --webdir-conf     name of the webdir config file (serve more than one repo)
    --pid-file        name of file to write process ID to
    --stdio           for remote clients
 -t --templates       web templates to use
    --style           template style to use
 -6 --ipv6            use IPv6 in addition to IPv4
    --certificate     SSL certificate file

use "hg -v help serve" to show global options


8

また、goで記述された小さなWebサーバーdevdも検討してください。多くのプラットフォームのバイナリがここから入手できます

devd -ol path/to/files/to/serve

小さくて高速で、ファイルが変更された場合のライブ再読み込みなどの興味深いオプション機能がいくつかあります。


7

見つけた python -m http.server信頼できない。一部の応答には数秒かかる場合があります。

今、私はRan https://github.com/m3ng9i/ranというサーバーを使用しています

Ran:Goで記述された単純な静的Webサーバー



3

サーバーとしてのServezの使用

  1. Servezをダウンロード
  2. インストールして実行する
  3. 提供するフォルダを選択
  4. 「開始」を選択
  5. http://localhost:8080「ブラウザを起動する」に移動または選択します

サーブ

注:Chromeがアプリのサポートを削除したため、Chrome for Web Server が廃止され、コマンドラインの経験がまったくない美術の学生をサポートするため、これを一緒に投げました


WebGLの例を実行するために投票します
フェリペグティエレス

2

ライブサーバーが好きです。これは高速で、素晴らしいリロード機能があり、開発中に非常に便利です。

使い方はとても簡単です:

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_profilelive-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'

1

PHPがインストールされている場合は、組み込みサーバーを使用できます。

php -S 0:8080

0

さらに別のノードベースのシンプルなコマンドラインサーバー

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

特にWindows上で、http-serverに問題があることに部分的に対応して書かれました。

インストール

次にnode.jsインストールします

npm install -g servez

使用法

servez [options] [path]

パスがない場合は、現在のフォルダーを提供します。

デフォルトではindex.html、存在する場合はフォルダパスとして機能します。それ以外の場合は、フォルダのディレクトリリストを提供します。CORSヘッダーも提供します。オプションで基本認証をオンにして--username=somename --password=somepass、httpsを提供できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.