Một thay thế nhanh hơn cho http.server của Python (hoặc SimpleHTTPServer) là gì?


300

Http.server của Python (hoặc SimpleHTTPServer cho Python 2) là một cách tuyệt vời để phục vụ nội dung của thư mục hiện tại từ dòng lệnh:

python -m http.server

Tuy nhiên, theo như các máy chủ web, nó rất chậm ...

Nó hoạt động như thể nó là một luồng và đôi khi gây ra lỗi hết thời gian khi tải các mô-đun AMD JavaScript bằng RequireJS. Có thể mất năm đến mười giây để tải một trang đơn giản không có hình ảnh.

Một sự thay thế nhanh hơn mà chỉ là thuận tiện?


17
Chủ đề này chỉ khôi phục sự tỉnh táo của tôi. Tôi đã sử dụng SimpleHTTPServer và gặp lỗi ngẫu nhiên với RequireJS đang khiến tôi phát điên! máy chủ http của nút đang hoạt động như một bùa mê. Cảm ơn!
Dave Cadwallader

4
@ChrisF, tôi đã chỉnh sửa các câu hỏi theo hướng dẫn này để về mặt ngữ pháp hơn phản ánh thực tế rằng đây thực sự là một câu hỏi có thể trả lời. Tôi đã giải thích vấn đề tôi gặp phải (cụ thể là thời gian chờ và lãng phí thời gian) và tôi không thể liệt kê những gì tôi đã làm để giải quyết vấn đề vì tôi không biết về bất kỳ giải pháp thay thế nào. Tôi không nghĩ câu hỏi này phù hợp với hình dạng "___ yêu thích của bạn", vì các tiêu chí được xác định rõ ràng. Khách truy cập khác nhau có thể tìm thấy câu trả lời khác nhau hữu ích hơn và câu trả lời có thể không phù hợp với tiêu chí được đưa ra.
Drew Noakes

26
Tình yêu như thế nào SO có thói quen đóng câu hỏi ưa thích của người dân ...
isomorphismes

4
Câu hỏi này không chỉ hữu ích, nó cũng không phù hợp với mô tả mà nó đang được đóng lại. Ít nhất nghiên cứu đã được thực hiện ...
Bryan Larson

3
Một tùy chọn khác, nếu bạn muốn phục vụ một repo git, là git instaweb.
Drew Noakes

Câu trả lời:


394

Máy chủ http cho node.js rất thuận tiện và nhanh hơn nhiều so với SimpleHTTPServer của Python. Điều này chủ yếu là vì nó sử dụng IO không đồng bộ để xử lý đồng thời các yêu cầu, thay vì nối tiếp các yêu cầu.

Cài đặt

Cài đặt node.js nếu bạn chưa có. Sau đó sử dụng trình quản lý gói nút ( npm) để cài đặt gói, sử dụng -gtùy chọn để cài đặt trên toàn cầu. Nếu bạn đang ở trên Windows, bạn sẽ cần một lời nhắc với quyền của quản trị viên và trên Linux / OSX, bạn sẽ muốn ra sudolệnh:

npm install http-server -g

Điều này sẽ tải về bất kỳ phụ thuộc cần thiết và cài đặt http-server.

Sử dụng

Bây giờ, từ bất kỳ thư mục, bạn có thể gõ:

http-server [path] [options]

Đường dẫn là tùy chọn, mặc định ./publicnếu nó tồn tại, nếu không ./.

Tùy chọn là [mặc định]:

  • -p Số cổng để nghe trên [8080]
  • -a Địa chỉ máy chủ để liên kết với [localhost]
  • -i Hiển thị trang chỉ mục thư mục [Đúng]
  • -shoặc --silentChế độ im lặng sẽ không đăng nhập vào bảng điều khiển
  • -hhoặc --helpHiển thị thông báo trợ giúp và thoát

Vì vậy, để phục vụ thư mục hiện tại trên cổng 8000, gõ:

http-server -p 8000

12
Điều này thật tuyệt!! Cảm ơn vì chỉ ra điều ấy. Thật tuyệt vời khi thử nghiệm phát trực tiếp âm thanh / video, thứ mà máy chủ python dường như không xử lý tốt.
gman

1
@Salmonface, bạn có chắc chắn sử dụng -gtùy chọn này không và bạn có chắc chắn rằng không có lỗi nào được in trong quá trình cài đặt không? Lỗi đó chỉ có nghĩa là nó không thể được tìm thấy sau khi cài đặt, điều này dường như không thể xảy ra nếu mọi thứ diễn ra tốt đẹp. Bạn đang ở trên nền tảng nào? Chạy lệnh find trên ổ đĩa của bạn để tìm một tệp có tên http-server. Tôi đã sử dụng thành công trên một số phiên bản Linux và phiên bản Windows khác nhau.
Drew Noakes 27/12/13

2
Tôi chỉ muốn xác nhận rằng sử dụng giải pháp này đã cải thiện thời gian tải trang của tôi từ 20 giây lên 2 giây!
0leg

1
Chà, lúc đầu, nó là một cải tiến so với SimpleHTTPServer của python cho đến khi tôi hết bộ nhớ. http-server tiêu thụ một lượng lớn bộ nhớ cho các tệp lớn. Đề xuất myserver.go nhanh chóng tiêu tốn chỉ khoảng 2 MB thay vì Bộ nhớ 5 GB, trước khi bắt đầu trao đổi và trở nên rất chậm.
daniel

2
Vì vậy, kể từ tháng 11 năm 2019, có vẻ như máy chủ http đã bị hỏng cho người dùng windows trong vài tháng. Nhiều phụ thuộc của nó là cách hết hạn. Một trong số họ, ngây ngất, hiện đang bị bỏ rơi nên không rõ khi nào hoặc liệu nó sẽ được sửa chữa. Tôi đã tự sửa chữa nhưng cũng không rõ liệu các nhà phát triển có PR hay không. Vì vậy, tôi đã viết thay thế của riêng tôi .
gman

105

Tôi khuyên bạn nên: Twisted ( http://twistedmatrix.com )

một công cụ mạng hướng sự kiện được viết bằng Python và được cấp phép theo giấy phép MIT nguồn mở.

Đó là nền tảng chéo và đã được cài đặt sẵn trên OS X 10.5 đến 10.12. Trong số những thứ khác, bạn có thể khởi động một máy chủ web đơn giản trong thư mục hiện tại với:

twistd -no web --path=.

Chi tiết

Giải thích về Tùy chọn (xem twistd --helpthêm):

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

"web" là một Lệnh chạy một máy chủ web đơn giản trên đầu công cụ Twisted async. Nó cũng chấp nhận các tùy chọn dòng lệnh (sau lệnh "web" - xem twistd web --helpđể biết thêm):

  --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.

Ngoài ra còn có một loạt các lệnh khác như:

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

Cài đặt

Ubuntu

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

Mac OS-X (được cài đặt sẵn vào ngày 10.5 - 10.12 hoặc có sẵn trong MacPorts và thông qua Pip)

sudo port install py-twisted

các cửa sổ

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

HTTPS

Twisted cũng có thể sử dụng chứng chỉ bảo mật để mã hóa kết nối. Sử dụng tùy chọn này với các tùy chọn hiện có --path--port(cho HTTP đơn giản).

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

5
Trừ khi bạn đã thiết lập node.js, tôi thấy điều này là thuận tiện nhất. Cám ơn vì đã chia sẻ!
Chris J

3
Trên Ubuntu, bạn phải sudo apt-get install python-twisted-webđầu tiên. (Cảm ơn câu trả lời này, nó rất tiện lợi!)
nkorth

2
Một lợi thế đặc biệt của máy chủ một dòng xoắn, nó hỗ trợ tải xuống có thể tiếp tục (hỗ trợ phạm vi byte) và đó là tính năng bắt buộc phải có khi bạn đang tải xuống các tệp lớn.
Pankaj

7
sử dụng nút không truyền phát video / âm thanh đúng cách cho tôi, mặc dù sử dụng twistd hoạt động rất tốt!
chóng mặt

2
Bạn có thể cấu hình các cổng và nhận các tùy chọn khác bằng cách sử dụng twistd --helptwistd web --help. Mất một lúc tôi mới hiểu ra.
Ehtesh Choudhury

30

1.0 bao gồm một máy chủ http & sử dụng để phục vụ các tệp với một vài dòng mã.

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)
    }
}

Chạy nguồn này bằng cách sử dụng go run myserver.gohoặc để xây dựng một tệp thực thigo build myserver.go


Câu trả lời chính xác. Điều này chạy nhanh hơn so với giải pháp SimpleHTTPServer và nodejs. :) Có cách nào để tôi có thể thêm tên người dùng và mật khẩu để tải xuống không?
Ajax

21

Hãy thử các webfs , nó rất nhỏ và không phụ thuộc vào việc cài đặt một nền tảng như node.js hoặc python.


1
Có vẻ như bạn phải biên dịch nó? Không thấy bất kỳ nhị phân nào để tải xuống.
BrainSlugs83

2
vâng, trừ khi bản phân phối của bạn có nó. Debian và Ubuntu có nó:apt-get install webfs
Hudon

4
Tôi đã làm một brew install webfsmáy Mac của tôi mà kết quả là 🍺 /usr/local/Cellar/webfs/1.21: 5 files, 96K, built in 15 seconds. Sau đó tôi chỉ có thể nói webfsd -F -p 3003 -r resources/public/ -f index.htmlđể đạt được như twistd -no web -p 3003 --path=resources/public/. Đó là một chút dài dòng để không rõ ràng để nhớ nhưng tốt để biết như là một thay thế cho xoắn hoặc SimpleHTTPServer.
onetom

Tốt hơn nhiều so với các giải pháp khác. Nó rất nhỏ, rất nhanh và được cung cấp dưới dạng gói hệ điều hành. Nó cũng hỗ trợ SSL và có thể chạy như một daemon hệ thống.
Federico

14

Nếu bạn sử dụng Mercurial, bạn có thể sử dụng máy chủ HTTP tích hợp. Trong thư mục bạn muốn phục vụ:

hg serve

Từ các tài liệu :

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

Cũng xem xét devd một máy chủ web nhỏ được viết trong go. Binaries cho nhiều nền tảng có sẵn ở đây .

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

Nó nhỏ, nhanh và cung cấp một số tính năng tùy chọn thú vị như tải lại trực tiếp khi tệp của bạn thay đổi.



5

hãy thử polpetta ...

npm cài đặt -g polpetta

sau đó bạn có thể

polpetta ~ / thư mục

và bạn đã sẵn sàng để đi :-)


1
Bạn có thể mở rộng lý do tại sao chúng ta nên thử polpetta không?
Dan Dascalescu

3

Sử dụng Servez làm máy chủ

  1. Tải xuống Servez
  2. Cài đặt nó, chạy nó
  3. Chọn thư mục để phục vụ
  4. Chọn "Bắt đầu"
  5. Truy cập http://localhost:8080hoặc chọn "Khởi chạy trình duyệt"

phục vụ

Lưu ý: Tôi đã ném cái này cùng nhau vì Máy chủ Web cho Chrome sẽ biến mất vì Chrome đang loại bỏ hỗ trợ cho các ứng dụng và vì tôi hỗ trợ sinh viên nghệ thuật không có kinh nghiệm với dòng lệnh


Tôi đang bỏ phiếu để chạy các ví dụ về WebGL
Felipe Gutierrez

2

Tôi thích máy chủ trực tiếp . Nó nhanh và có một tính năng tải lại trực tiếp tốt đẹp, rất thuận tiện trong quá trình phát triển.

Cách sử dụng rất đơn giản:

cd ~/Sites/
live-server

Theo mặc định, nó tạo ra một máy chủ có IP 127.0.0.1 và cổng 8080.

http://127.0.0.1:8080/

Nếu cổng 8080 không miễn phí, nó sử dụng cổng khác:

http://127.0.0.1 giáp2749/

http://127.0.0.1 giáp2858/

Nếu bạn cần xem máy chủ web trên các máy khác trong mạng cục bộ của mình, bạn có thể kiểm tra IP của mình là gì và sử dụng:

live-server --host=192.168.1.121

Và đây là một kịch bản tự động lấy địa chỉ IP của giao diện mặc định. Nó chỉ hoạt động trên macOS .

Nếu bạn đặt nó vào .bash_profile, live-serverlệnh sẽ tự động khởi động máy chủ với IP chính xác.

# **
# 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

Một nút khác dựa trên máy chủ dòng lệnh đơn giản

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

Viết một phần để đáp ứng với máy chủ http có vấn đề, đặc biệt là trên các cửa sổ.

cài đặt

Cài đặt node.js rồi

npm install -g servez

sử dụng

servez [options] [path]

Không có đường dẫn, nó phục vụ thư mục hiện tại.

Theo mặc định, nó phục vụ index.htmlcho các đường dẫn thư mục nếu nó tồn tại. Nó phục vụ một danh sách thư mục cho các thư mục khác. Nó cũng phục vụ các tiêu đề CORS. Bạn có thể tùy chọn bật xác thực cơ bản với --username=somename --password=somepassvà bạn có thể phục vụ https.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.