Python의 http.server (또는 SimpleHTTPServer)에 대한 더 빠른 대안은 무엇입니까?


300

Python의 http.server (또는 Python 2 용 SimpleHTTPServer)는 명령 행에서 현재 디렉토리의 컨텐츠를 제공하는 좋은 방법입니다.

python -m http.server

그러나 웹 서버에 관한 한, 그것은 매우 슬로프입니다 ...

마치 단일 스레드 인 것처럼 동작하며 RequireJS를 사용하여 JavaScript AMD 모듈을로드 할 때 때때로 시간 초과 오류가 발생합니다. 이미지가없는 간단한 페이지를로드하는 데 5-10 초가 걸릴 수 있습니다.

편리한 빠른 대안은 무엇입니까?


17
이 실은 방금 나의 정신을 회복 시켰습니다. 나는 SimpleHTTPServer를 사용하고 있었고 나를 필요로하는 RequireJS에서 임의의 오류가 발생했습니다! 노드의 http 서버는 매력처럼 작동합니다. 감사!
Dave Cadwallader

4
@ChrisF, 나는에 따라 질문을 편집 한 이 가이드 라인 보다 문법이 있다는 사실을 반영하기 위해 입니다 실제로 답할 질문을. 내가 직면 한 문제 (즉, 시간 초과 및 시간 낭비)를 설명했으며 대안을 알지 못했기 때문에 문제를 해결하기 위해 수행 한 작업을 나열 할 수 없었습니다. 기준이 명확하게 정의되어 있으므로이 질문이 "좋아하는 ___ 모양"에 맞지 않는 것 같습니다. 방문자마다 다른 답변이 더 유용 할 수 있으며 답변이 주어진 기준에 맞지 않을 수 있습니다.
Drew Noakes

26
SO가 사람들이 가장 좋아하는 질문을 끝내는 습관을 갖는 방법을 좋아하십시오…
동 형사상

4
이 질문은 유용 할뿐만 아니라 닫히고있는 설명과도 일치하지 않습니다. 적어도 연구는 이미 ... 완료되었습니다
브라이언 라슨에게

3
git repo를 제공하려는 경우 다른 옵션은 git instaweb입니다.
Drew Noakes

답변:


394

node.js에 대한 http-server 는 매우 편리하며 Python의 SimpleHTTPServer보다 훨씬 빠릅니다. 이는 주로 요청을 직렬화하는 대신 요청을 동시에 처리하기 위해 비동기 IO를 사용하기 때문입니다.

설치

node.js를 설치하지 않았다면 설치하십시오. 그런 다음 노드 패키지 관리자 ( npm)를 사용하여 전체 -g설치 옵션을 사용하여 패키지를 설치하십시오 . Windows를 사용하는 경우 관리자 권한의 프롬프트가 필요하며 Linux / OSX에서는 다음 sudo명령을 원할 것입니다 .

npm install http-server -g

필요한 모든 종속성을 다운로드하고 설치 http-server합니다.

사용하다

이제 모든 디렉토리에서 다음을 입력 할 수 있습니다.

http-server [path] [options]

Path는 선택 사항이며 ./public존재 하는 경우 기본값 이며 그렇지 않은 경우 기본값 ./입니다.

옵션은 [기본값]입니다.

  • -p 수신 대기하는 포트 번호 [8080]
  • -a [localhost]에 바인딩 할 호스트 주소
  • -i 디렉토리 색인 페이지 표시 [True]
  • -s또는 --silent자동 모드가 콘솔에 기록되지 않습니다
  • -h또는 --help도움말 메시지를 표시하고 종료합니다

포트 8000에서 현재 디렉토리를 제공하려면 다음을 입력하십시오.

http-server -p 8000

12
대단해 !! 지적 해 주셔서 감사합니다. 파이썬 서버가 전혀 처리하지 못하는 스트리밍 오디오 / 비디오를 테스트하는 데 좋습니다.
gman

1
@Salmonface, -g옵션 을 확실히 사용 했습니까? 설치하는 동안 오류가 인쇄되지 않았습니까? 이 오류는 단지 설치 후 찾을 수 없다는 것을 의미하며, 문제가 발생하지 않을 것 같습니다. 어떤 플랫폼에 있습니까? 드라이브에서 find 명령을 실행하여 name 파일을 찾으십시오 http-server. 나는 몇 가지 다른 리눅스 배포판과 Windows 버전에서 이것을 성공적으로 사용했다.
Drew Noakes

2
이 솔루션을 사용하면 페이지로드 시간이 20 초에서 2 초로 향상되었음을 확인하고 싶습니다!
0leg

1
글쎄, 처음에는 메모리가 부족할 때까지 Python SimpleHTTPServer보다 개선되었습니다. http-server는 큰 파일에 많은 양의 메모리를 소비합니다. myserver.go 제안은 스왑을 시작하고 실제로 느려지기 전에 5GB 메모리 대신 약 2MB 만 소비하는 것이 빠릅니다.
다니엘

2
따라서 2019 년 11 월 현재 Windows 사용자의 경우 몇 달 동안 http-server가 중단 된 것처럼 보입니다. 많은 종속성이 오래되었습니다. 그 중 하나 인 황홀경은 이제 버려 져서 언제 고칠 것인지 명확하지 않습니다. 나는 나 자신을 고치는 것을 보았지만 개발자가 PR을 취할 것인지 확실하지 않습니다. 그래서 나는 내 자신의 대용품을 썼습니다 .
gman

105

나는 추천한다 : Twisted ( http://twistedmatrix.com )

파이썬으로 작성되고 오픈 소스 MIT 라이센스에 따라 라이센스가 부여 된 이벤트 중심 네트워킹 엔진.

크로스 플랫폼이며 OS X 10.5 ~ 10.12에 사전 설치되었습니다. 무엇보다도 다음을 사용하여 현재 디렉토리에서 간단한 웹 서버를 시작할 수 있습니다.

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"명령 다음에 명령 행 옵션을 사용할 수 있습니다 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

설치

우분투

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

트위스트는 보안 인증서를 사용하여 연결을 암호화 할 수도 있습니다. 기존 --path--port(일반 HTTP 용) 옵션 과 함께 사용하십시오 .

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

5
node.js가 이미 설정되어 있지 않으면 가장 편리한 것으로 나타났습니다. 공유해 주셔서 감사합니다!
Chris J

3
우분투에서는 먼저해야합니다 sudo apt-get install python-twisted-web. (이 답변에 감사드립니다, 매우 편리합니다!)
nkorth

2
트위스트 원 라인 서버의 한 가지 특별한 이점은 재개 가능한 다운로드 (바이트 범위 지원)를 지원하며 대용량 파일을 다운로드 할 때 반드시 필요한 기능입니다.
Pankaj

7
노드를 사용하면 비디오 / 오디오가 제대로 스트리밍되지 않았습니다.
dizy

2
당신은 포트를 구성하고 사용하여 다른 옵션을 얻을 수 있습니다 twistd --helptwistd web --help. 알아내는 데 시간이 걸렸습니다.
Ehtesh Choudhury 2014

30

1.0에는 몇 줄의 코드로 파일을 제공하기위한 http 서버util이 포함되어 있습니다.

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

2
네, 당신의 배포판이 없다면. 데비안과 우분투는 :apt-get install webfs
Hudon

4
나는 brew install webfs내 Mac에서을 수행하여 결과를 얻었 습니다 🍺 /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/. 기억하기는 쉽지 않지만 트위스트 또는 SimpleHTTPServer의 대안으로 아는 것이 좋습니다.
onetom

다른 솔루션보다 훨씬 낫습니다. 매우 작고 매우 빠르며 OS 패키지로 제공됩니다. 또한 SSL을 지원하며 시스템 데몬으로 실행할 수 있습니다.
Federico

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

또한 작성된 작은 웹 서버를 개발해 보십시오 . 많은 플랫폼에 대한 바이너리가 여기에 있습니다 .

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

작고 빠르며 파일 변경시 라이브 리로드와 같은 흥미로운 옵션 기능을 제공합니다.


7

python -m http.server신뢰할 수없는 것으로 나타났습니다 . 일부 응답은 몇 초가 걸립니다.

이제 Ran이라는 서버를 사용합니다 https://github.com/m3ng9i/ran

Ran : Go로 작성된 간단한 정적 웹 서버



3

Servez를 서버로 사용

  1. Servez 다운로드
  2. 설치, 실행
  3. 제공 할 폴더를 선택하십시오
  4. "시작"을 선택하십시오
  5. http://localhost:8080"브라우저 시작"으로 이동 또는 선택

서브

참고 : Chrome에서 앱 지원을 제거 하고 명령 줄에 대한 경험이없는 미술 학생을 지원하기 때문에 Chrome 용 Web Server가 사라지기 때문에 이것을 함께 던졌습니다.


WebGL 예제를 실행하기로 결정했습니다.
Felipe Gutierrez

2

나는 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/

로컬 네트워크의 다른 컴퓨터에서 웹 서버를 확인해야하는 경우 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=somepasshttps를 제공 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.