web-dev-qa-db-fra.com

Qu'est-ce qu'une alternative plus rapide au serveur http.server (ou SimpleHTTPServer) de Python?

Le fichier http.server de Python (ou SimpleHTTPServer pour Python 2) est un excellent moyen de servir le contenu du répertoire en cours à partir de la ligne de commande:

python -m http.server

Cependant, en ce qui concerne les serveurs Web, c'est très lent ...

Il se comporte comme s'il s'agissait d'un seul thread et provoquait parfois des erreurs de délai d'attente lors du chargement de modules JavaScript AMD à l'aide de RequireJS. Le chargement d’une page simple sans images peut prendre entre cinq et dix secondes.

Qu'est-ce qu'une alternative plus rapide et tout aussi pratique?

270
Drew Noakes

http-server for node.js est très pratique et beaucoup plus rapide que SimpleHTTPServer de Python. Cela est principalement dû au fait qu’il utilise asynchrone IO pour le traitement simultané des demandes, au lieu de les sérialiser.

Installation

Installez node.js si vous ne l'avez pas déjà fait. Utilisez ensuite le gestionnaire de package de noeud (npm) pour installer le package, à l'aide de l'option -g pour effectuer une installation globale. Si vous utilisez Windows, vous aurez besoin d'une invite avec des autorisations d'administrateur. Sous Linux/OSX, vous souhaiterez Sudo la commande:

npm install http-server -g

Cela téléchargera toutes les dépendances requises et installera http-server.

Utilisation

Maintenant, depuis n'importe quel répertoire, vous pouvez taper:

http-server [path] [options]

Le chemin est optionnel, par défaut à ./public s'il existe, sinon ./.

Les options sont [par défaut]:

  • -p Le numéro de port à écouter sur [8080]
  • -a L'adresse de l'hôte à associer à [localhost]
  • -i Afficher les pages d'index du répertoire [True]
  • -s ou --silent Le mode silencieux ne se connecte pas à la console
  • -h ou --help Affiche un message d'aide et quitte

Donc, pour servir le répertoire actuel sur le port 8000, tapez:

http-server -p 8000
370
Drew Noakes

Je recommande: Twisted ( http://twistedmatrix.com )

un moteur de réseau piloté par les événements écrit en Python et sous licence open source MIT.

Il est multi-plateforme et préinstallé sur OS X depuis la version 10.5. Entre autres choses, vous pouvez démarrer un serveur Web simple dans le répertoire actuel avec:

twistd -no web --path=.

Détails

Explication des options (voir twistd --help pour plus d'informations):

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

"web" est une commande qui exécute un serveur Web simple au-dessus du moteur asynchrone Twisted. Il accepte également les options de ligne de commande (après la commande "web" - voir twistd web --help pour plus d'informations):

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

Il y a aussi beaucoup d'autres commandes telles que:

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

Installation

Ubuntu

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

Mac OS-X (préinstallé depuis 10.5 ou disponible sous MacPorts)

Sudo port install py-twisted

Les fenêtres

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

HTTPS

Twisted peut également utiliser des certificats de sécurité pour chiffrer la connexion. Utilisez ceci avec vos options --path et --port existantes (pour HTTP simple).

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

 go 1.0 inclut un serveur http & util pour servir des fichiers avec quelques lignes de code.

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

Exécutez cette source en utilisant go run myserver.go ou pour créer un exécutable go build myserver.go

25
pd40

Essayez webfs , c’est minuscule et ne dépend pas de l’installation d’une plate-forme comme node.js ou python.

19
Hudon

Si vous utilisez Mercurial, vous pouvez utiliser le serveur HTTP intégré. Dans le dossier que vous souhaitez servir:

hg serve

De les docs :

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
14
Drew Noakes

En voici un autre. C'est une extension Chrome

Une fois installé, vous pouvez l'exécuter en créant un nouvel onglet dans Chrome et en cliquant sur le bouton apps situé en haut à gauche.

Il a une interface graphique simple. Cliquez sur Choisir un dossier, puis sur le lien http://127.0.0.1:8887.

 enter image description here

https://www.youtube.com/watch?v=AK6swHiPtew

9
gman

Pensez également à devd , un petit serveur Web écrit en écriture. Des binaires pour de nombreuses plates-formes sont disponibles ici

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

C'est petit, rapide et fournit des fonctionnalités optionnelles intéressantes comme le rechargement en direct lorsque vos fichiers changent.

6
gman

J'ai trouvé python -m http.server peu fiable - certaines réponses prendraient des secondes.

Maintenant, j'utilise un serveur appelé Ran https://github.com/m3ng9i/ran

Ran: un simple serveur web statique écrit en Go

5
Colonel Panic

essayez la polpetta ...

npm installer -g polpetta

ensuite vous pouvez 

polpetta ~/dossier

et vous êtes prêt à partir :-)

4
Andrea Giammarchi

J'aime live-server . Il est rapide et dispose d’une fonction de recharge en direct Nice, très pratique lors du développement.

L'utilisation est très simple:

cd ~/Sites/
live-server

Par défaut, il crée un serveur avec l’IP 127.0.0.1 et le port 8080.

http://127.0.0.1:8080/

Si le port 8080 n'est pas libre, il utilise un autre port:

http://127.0.0.1:52749/

http://127.0.0.1:52858/

Si vous avez besoin de voir le serveur Web sur d'autres machines de votre réseau local, vous pouvez vérifier quelle est votre adresse IP et utiliser:

live-server --Host=192.168.1.121

Et voici un script qui saisit automatiquement l'adresse IP de l'interface par défaut. Cela ne fonctionne que sur macOS.

Si vous le mettez dans .bash_profile, la commande live-server lancera automatiquement le serveur avec l'adresse IP correcte.

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

Utiliser Servez comme serveur

  1. Télécharger Servez
  2. Installez-le, lancez-le
  3. Choisissez le dossier à servir
  4. Choisissez "Démarrer"
  5. Allez à http://localhost:8080 ou choisissez "Lancer le navigateur"

servez

Remarque: j'ai jeté cela au clair parce que Web Server pour Chrome est en train de disparaître car Chrome supprime la prise en charge des applications et parce que je soutiens les étudiants en art qui n'ont aucune expérience de la ligne de commande.

0
gman