[PYTHON] J'ai essayé de collecter des serveurs Web à une seule ligne

J'ai essayé de collecter des serveurs Web à une seule ligne

Vous pouvez jouer avec JavaScript côté client et entrer soudainement dans une zone qui ne peut pas être exécutée avec un fichier local. De nos jours, HTTPS est requis ou vous voudrez peut-être essayer HTTP2. Pour le moment, je suis entré dans Web Workers, mais d'autres choses telles que WebRTC, ... (se souvenir) ... (non trouvé) ... sont applicables.

Dans un tel cas, il est difficile de démarrer Apache et nginx un par un, je vais donc laisser un petit résultat de recherche.

[2018/4/18 postscript] Récemment, le besoin d'utiliser HTTPS augmente. En réponse à cela, le nombre de méthodes prenant en charge HTTPS a augmenté, nous ne pouvons donc pas les couvrir toutes, mais nous avons ajouté et modifié autant que possible.

Python (SimpleHTTPServer)

Python a ajouté une option "-m" pour exécuter le module en tant que script (bien qu'il semble être limité à la version 2.4 et ultérieure). Utilisez cette option pour exécuter SimpleHTTPServer, l'une des bibliothèques standard, dans une seule ligne. Un exemple de démarrage et un journal d'accès sont affichés. Le numéro de port standard est 8000.

Exemple d'écoute sur le port 8000


$  python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...
127.0.0.1 - - [09/Jan/2014 11:21:09] "GET / HTTP/1.1" 200 -

Il est bon que le journal d'accès reste correctement. Si vous souhaitez modifier le numéro de port, spécifiez le numéro de port à la fin.

Exemple d'écoute sur le port 3000


$  python -m SimpleHTTPServer 3000
Serving HTTP on 0.0.0.0 port 3000 ...

Référence: One-line pour démarrer un serveur Web immédiatement avec une seule commande (Ruby ou Python)

Python 3.x

Je ne l'ai pas essayé, mais il semble que cela fonctionne même s'il s'agit de la série Python 3.x comme suit.

Exemple d'écoute sur le port 8000


$ python -m http.server 8000

Référence: serveur Web avec une doublure

Rubis (WEBRick)

Une bibliothèque appelée webrick est attachée à Ruby en standard, vous pouvez donc l'utiliser pour configurer un serveur Web. Dans l'exemple ci-dessous, seuls la racine du document et le numéro de port (8000) sont spécifiés, mais d'autres paramètres peuvent être définis. Le numéro de port standard est 80. Veuillez noter que si vous ne spécifiez pas le numéro de port, il s'arrêtera avec une erreur si vous ne disposez pas des privilèges d'administrateur.

Exemple d'écoute sur le port 8000


$ ruby -rwebrick -e 'WEBrick::HTTPServer.new(:DocumentRoot => "./", :Port => 8000).start'
[2014-01-09 13:49:12] INFO  WEBrick 1.3.1
[2014-01-09 13:49:12] INFO  ruby 1.9.3 (2013-06-27) [x86_64-darwin12.4.0]
[2014-01-09 13:49:12] INFO  WEBrick::HTTPServer#start: pid=9479 port=8000
localhost - - [09/Jan/2014:13:49:15 JST] "GET / HTTP/1.1" 200 2377
- -> /

Il est bon que le journal d'accès reste également ici.

~~ * Pour arrêter, utilisez l'option -KILL pour la commande kill. ~~ Quand je l'ai essayé plus tôt, j'ai pu l'arrêter avec ctrl + C.

Ancienne façon d'arrêter (maintenant ctrl+S'arrête à C)


$ ps aux | grep ruby
Recherchez le numéro de processus webrick
$ kill -Numéro de processus KILL

Référence: One-line pour démarrer un serveur Web immédiatement avec une seule commande (Ruby ou Python)

Édition HTTPS avec Ruby (WEBRick)

Lorsque j'ai vérifié WEB Rick pour la première fois depuis longtemps, j'ai trouvé qu'il pouvait facilement prendre en charge HTTPS. Dans l'exemple suivant, le certificat est automatiquement généré, puis écoute sur le port 8000. * Pour HTTPS uniquement. Vous ne pouvez pas vous connecter avec HTTP.

Exemple d'écoute par HTTPS sur le port 8000


$ ruby -rwebrick -rwebrick/https -e 'WEBrick::HTTPServer.new(:DocumentRoot => "./", :Port => 8000, :SSLEnable => true, :SSLCertName => [["CN", WEBrick::Utils::getservername]] ).start'
[2016-06-01 14:10:36] INFO  WEBrick 1.3.1
[2016-06-01 14:10:36] INFO  ruby 2.1.4 (2014-10-27) [x86_64-darwin14.0]
................................................................................................................++++++
....++++++
[2016-06-01 14:10:36] INFO
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1 (0x1)
    Signature Algorithm: sha1WithRSAEncryption
        Issuer: CN=sahara.local
        Validity
            Not Before: Jun  1 05:10:36 2016 GMT
            Not After : Jun  1 05:10:36 2017 GMT
        Subject: CN=sahara.local
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (1024 bit)
                Modulus:
                    00:b7:e4:37:9e:86:40:dd:cb:01:b2:a7:a8:53:db:
                    42:e8:81:0f:a9:23:63:d9:6c:6a:6a:13:0f:bc:66:
                    ed:ac:04:6c:93:1d:82:7b:22:6f:11:fc:cd:b7:ab:
                    a8:6b:fc:fc:60:e8:18:cc:52:95:b4:1a:aa:8c:1e:
                    01:cb:fa:14:0b:03:f0:3e:9e:d2:d4:5d:44:b2:83:
                    e4:de:49:5c:37:7d:1a:2b:97:a7:82:e9:d9:cb:c0:
                    fa:f5:5b:92:54:29:5c:e4:fe:c4:ed:a0:2f:3b:da:
                    83:09:e2:12:d8:01:84:9f:60:80:9c:5a:1b:12:70:
                    be:97:e1:3c:34:b6:fd:80:29
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            X509v3 Key Usage:
                Key Encipherment
            X509v3 Subject Key Identifier:
                00:0C:DD:F6:BD:66:22:72:82:DA:82:20:9C:54:E6:12:64:5E:90:15
            X509v3 Extended Key Usage:
                TLS Web Server Authentication
            Netscape Comment:
                Generated by Ruby/OpenSSL
            X509v3 Authority Key Identifier:
                keyid:00:0C:DD:F6:BD:66:22:72:82:DA:82:20:9C:54:E6:12:64:5E:90:15
                DirName:/CN=sahara.local
                serial:01

    Signature Algorithm: sha1WithRSAEncryption
         5b:ae:8f:06:7f:07:a2:ff:25:f1:4e:b6:04:c7:9f:fb:e0:aa:
         54:3d:b8:ab:54:a5:cf:e0:94:52:d1:e5:03:0e:8f:73:13:6f:
         34:f4:e7:88:93:9e:69:df:43:c2:33:5d:cc:48:4b:2a:84:48:
         a4:a2:7d:e8:e1:82:7e:3e:a4:23:34:c9:72:f3:5b:52:c7:41:
         6a:99:29:16:70:ee:bf:bd:d5:38:92:9b:0a:0d:9a:70:6f:a8:
         c3:18:60:df:73:45:41:29:3d:b3:6a:59:23:fe:1f:14:e0:cf:
         a1:db:09:50:06:7c:a3:81:95:c0:78:29:3c:71:ce:ac:aa:20:
         98:06
[2016-06-01 14:10:36] INFO  WEBrick::HTTPServer#start: pid=7246 port=8000
localhost - - [01/Jun/2016:14:10:55 JST] "GET / HTTP/1.1" 200 4257
- -> /

Lorsque j'essaie de me connecter à un navigateur Web, une note telle que «Cette connexion ne protège pas la confidentialité» (pour Chrome) ou «Ce n'est pas une connexion sécurisée» (pour Firefox) s'affiche.

Dans le cas de Chrome, vous pouvez afficher la page en cliquant sur "Accéder à l'hôte local (non sécurisé)" qui apparaît lorsque vous cliquez sur "Avancé".

Dans le cas de Firefox, c'est un peu compliqué, et vous pouvez traiter ce site comme une exception en cliquant sur «Ajouter une exception» qui apparaît lorsque vous cliquez sur «Détails de l'erreur» puis en cliquant sur «Approuver l'exception de sécurité» dans la boîte de dialogue. Cependant, si le serveur HTTPS est redémarré après cela, le certificat sera mis à jour et la connexion sera refusée (code d'erreur: SEC_ERROR_REUSED_ISSUER_AND_SERIAL). Dans ce cas, vous devez supprimer le certificat enregistré dans Firefox. Voir la référence 2 pour plus de détails.

~~ La méthode ci-dessus crée automatiquement un certificat, mais vous pouvez également utiliser un certificat existant. Ce sera trop long pour être appelé un one-liner, donc je vais l'omettre, mais veuillez consulter la référence 1 pour plus de détails. ~~

La référence 1 est manquante pour chaque domaine, et je ne l'ai pas trouvée même si j'ai recherché par titre, je vais donc ajouter une méthode pour utiliser un certificat existant.

Tout d'abord, préparez la clé privée et le certificat. Si vous avez déjà un certificat, veuillez l'ignorer. Dans l'exemple ci-dessous, le nom du pays est uniquement JP et les questions suivantes ne sont pas répondues.

Créer une clé privée et un certificat


$ openssl req -new -newkey rsa:2048 -sha256 -days 365 -nodes -x509 -keyout localhost.key -out localhost.crt
Generating a 2048 bit RSA private key
.............................................................+++
..............................................................................................................................................................+++
writing new private key to 'localhost.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:
$ ls
localhost.crt	localhost.key

Démarrez un serveur Web prenant en charge HTTPS à l'aide du certificat créé ci-dessus ou d'un certificat existant créé séparément. En tant que one-liner, il est un peu long, alors faites attention à ne pas vous tromper.

Exemple d'écoute par HTTPS sur le port 8000


$ ruby -rwebrick -rwebrick/https -e 'WEBrick::HTTPServer.new(:DocumentRoot => "./", :Port => 8000, :SSLEnable => true, :SSLPrivateKey => OpenSSL::PKey::RSA.new(File.open("localhost.key").read), SSLCertificate: OpenSSL::X509::Certificate.new(File.open("localhost.crt").read), :SSLCertName => [["CN", WEBrick::Utils::getservername]] ).start'
[2018-04-18 03:30:53] INFO  WEBrick 1.3.1
[2018-04-18 03:30:53] INFO  ruby 2.3.1 (2016-04-26) [x86_64-darwin14]
[2018-04-18 03:30:53] INFO
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            c7:92:94:c6:4b:1f:75:65
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=JP, ST=Some-State, O=Internet Widgits Pty Ltd
        Validity
            Not Before: Apr 17 18:23:43 2018 GMT
            Not After : Apr 17 18:23:43 2019 GMT
        Subject: C=JP, ST=Some-State, O=Internet Widgits Pty Ltd
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:c3:c7:93:ee:fb:00:4f:b1:b4:6a:8d:b8:13:7e:
                    b0:f9:7e:63:43:21:40:1c:c2:2e:ce:f4:fa:68:37:
                    03:8b:1b:e1:c3:de:3c:4e:23:d3:9b:b8:78:d3:47:
                    3c:78:1f:fb:97:43:d3:ec:6f:8d:56:ee:c1:5a:16:
                    a7:84:91:bf:c3:79:e2:d4:33:cd:f3:b5:7d:5b:55:
                    d2:ef:3f:f8:9d:fe:e1:28:04:24:2d:5a:ef:dd:cc:
                    10:ba:2e:d8:ed:65:61:5b:95:1a:11:5c:1a:c3:1d:
                    76:5f:b2:c8:05:66:88:e0:38:03:4b:fd:0a:51:2c:
                    9f:3e:ff:f0:40:66:02:ba:b5:14:d2:c9:09:3a:c0:
                    c3:40:6a:2f:6c:ed:6b:e1:72:f2:19:c2:41:7a:9c:
                    fb:83:81:ab:df:a1:3b:db:29:b1:4d:a6:89:43:28:
                    17:2a:ee:77:47:60:52:66:fa:08:e4:e5:ec:0e:cd:
                    33:1d:e9:86:81:c3:66:d3:40:63:62:f1:da:83:8a:
                    8a:e9:fd:c5:7b:11:13:d6:9a:74:ef:5b:aa:ac:19:
                    59:8d:a6:ae:22:95:c8:b5:5f:05:bd:09:5d:df:6c:
                    09:b0:9f:22:7f:81:ee:4f:42:5c:e9:4c:7e:0c:75:
                    1b:b3:14:4d:32:cf:86:28:0a:a5:d1:f5:64:b6:5f:
                    26:e1
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                A7:A1:32:FD:43:80:05:EC:F0:1B:41:0C:3B:0A:05:DE:46:F1:B5:32
            X509v3 Authority Key Identifier:
                keyid:A7:A1:32:FD:43:80:05:EC:F0:1B:41:0C:3B:0A:05:DE:46:F1:B5:32
                DirName:/C=JP/ST=Some-State/O=Internet Widgits Pty Ltd
                serial:C7:92:94:C6:4B:1F:75:65

            X509v3 Basic Constraints:
                CA:TRUE
    Signature Algorithm: sha256WithRSAEncryption
         2b:b0:86:47:9f:29:d0:2d:99:85:7f:52:fd:46:af:5a:ef:97:
         de:98:da:ab:a6:97:4b:3a:16:06:52:ad:ec:9d:37:47:1d:af:
         3d:59:11:43:ca:2e:24:77:88:d3:68:67:cb:53:72:d9:c2:d5:
         a2:26:00:34:26:63:db:1b:86:63:4f:94:ac:20:ee:07:07:67:
         ad:50:67:3a:fa:b8:0a:56:10:9f:e6:c2:80:df:6d:42:2e:cf:
         91:ff:2e:de:02:5a:63:5c:45:0c:e7:8a:0c:a5:42:4d:09:1c:
         1f:c1:28:6b:5e:2e:98:fd:65:d5:83:43:c4:2b:72:f4:61:ca:
         d5:8a:65:4d:10:bd:6b:0a:ce:b5:ea:86:8e:cc:18:61:87:88:
         b0:26:e0:42:22:75:e6:36:12:19:79:52:76:5c:94:f4:3b:7a:
         1e:16:5d:ea:28:1b:a8:b3:f8:aa:49:05:c5:07:f8:5c:7f:99:
         96:cf:f6:d5:71:8d:37:40:94:06:82:d0:d1:67:49:93:1c:29:
         7f:85:18:12:83:4a:0c:95:08:8e:19:e6:07:4a:9e:a1:35:81:
         a6:65:35:d9:ea:a0:cd:b8:6a:c8:f9:fe:0f:b5:1e:bd:df:48:
         64:f1:bb:a4:b6:97:cc:75:fc:40:a5:4c:e9:6b:e4:9a:2f:a0:
         36:d8:39:f8
[2018-04-18 03:30:53] INFO  WEBrick::HTTPServer#start: pid=10166 port=8000
::1 - - [18/Apr/2018:03:30:55 JST] "GET / HTTP/1.1" 200 1996
- -> /

~~ Référence 1: Activer SSL avec WEBrick ~~ Référence 2: [Certificat de serveur avec le même numéro de série que les autres](https://support.mozilla.org/ja/kb/%E4%BB%96%E3%81%A8%E5%90%8C%E3 % 81% 98% E3% 82% B7% E3% 83% AA% E3% 82% A2% E3% 83% AB% E7% 95% AA% E5% 8F% B7% E3% 82% 92% E3% 82 % 82% E3% 81% A4% E3% 82% B5% E3% 83% BC% E3% 83% 90% E8% A8% BC% E6% 98% 8E% E6% 9B% B8)

Rubis (Sinatra)

Ruby a un framework Sinatra, qui peut également être utilisé pour configurer un serveur Web en une seule ligne. Un exemple de démarrage et un journal d'accès sont affichés. Le numéro de port standard est 4567. Selon le format Sinatra, il traitera les URL compliquées, mais dans l'exemple suivant, index.html sera ignoré et "Hello World" sera renvoyé.

Exemple d'écoute sur le port 4567


$ ruby -rsinatra -e 'set :public_folder, "./", get("/"){"Hello world"}'
== Sinatra/1.4.2 has taken the stage on 4567 for development with backup from Thin
>> Thin web server (v1.5.1 codename Straight Razor)
>> Maximum connections set to 1024
>> Listening on localhost:4567, CTRL+C to stop
127.0.0.1 - - [09/Jan/2014 13:56:05] "GET / HTTP/1.1" 200 11 0.0025

Pour spécifier le numéro de port, procédez comme suit.

Exemple d'écoute sur le port 8000


$ ruby -rsinatra -e 'set :port, 8000; set :public_folder, "./", get("/"){"Hello world"}'

Référence: Comment démarrer un serveur Web avec une seule ligne

Exemple d'acceptation d'autres hôtes


ruby -rsinatra -e 'set :port, 8000; set :public_folder, "./"; set :environment, :producntion; get("/"){"Hello world"}'

Référence: Sinatra n'est plus connecté de l'extérieur par défaut

Édition PHP

Les fonctions du serveur Web ont été incorporées depuis PHP 5.4.0 (Merci à tadsan pour les informations fournies). Selon la documentation, "utilisez-le pour des démos et des tests", mais c'est parfait pour ce post. Dans l'exemple suivant, il commence à utiliser le port 8000. Le nom d'hôte et le numéro de port ne peuvent pas être omis.

Exemple d'acceptation uniquement de localhost


$ php -S localhost:8000
PHP 5.4.17 Development Server started at Thu Jan  9 17:35:44 2014
Listening on http://localhost:8000
Document root is /hoge
Press Ctrl-C to quit.
[Thu Jan  9 17:35:48 2014] ::1:59299 [404]: / - No such file or directory

Comme avec l'édition Ruby (Sinatra), vous ne pouvez vous connecter qu'à partir de localhost tel quel. Si vous souhaitez vous connecter à partir d'un autre hôte, spécifiez "0.0.0.0" comme nom d'hôte et démarrez-le.

Exemple d'acceptation d'autres hôtes


$ php -S 0.0.0.0:8000

Référence: Serveur Web intégré

Édition Ruby (une bibliothèque)

Jusqu'à présent, elle n'était pas cochée, mais vous pouvez facilement configurer un serveur Web avec Ruby ( Merci d'avoir fourni des informations, M. yoshi-taka). D'après la documentation, il fait partie de la bibliothèque un, qui est un utilitaire alternatif aux commandes de base Unix, et il semble que WEBRick démarre réellement. Dans l'exemple suivant, le répertoire actuel est défini comme racine du document et il est démarré pour utiliser le port de la version 8000. Le journal d'accès est le même que le WEBRick de base. Si le numéro de port est omis, il essaiera de démarrer sur le port 80. Par rapport à Ruby (édition WEBRick) introduit plus tôt, il présente les avantages des "commandes courtes" et "peut être terminé avec ctrl + C".

Exemple d'attente en version 8000


$ ruby -run -e httpd . -p 8000
[2014-03-01 11:03:36] INFO  WEBrick 1.3.1
[2014-03-01 11:03:36] INFO  ruby 2.0.0 (2013-06-27) [universal.x86_64-darwin13]
[2014-03-01 11:03:36] INFO  WEBrick::HTTPServer#start: pid=825 port=8000
localhost - - [01/Mar/2014:11:03:49 JST] "GET /test.html HTTP/1.1" 200 94937
- -> /test.html

Référence: library un --Ruby Référence: httpd (Object) --APIdock

Python (CGIHTTPServer)

Dans la zone Python, les pages Web statiques ne suffisent pas, et il semble y avoir une bibliothèque qui peut même exécuter CGI avec une seule doublure (merci à mash76 pour fournir des informations). Bien que ce soit le nom de la bibliothèque, le nom est également Zubari CGI HTTP Server. Quand je l'ai recherché, il a hérité de SimpleHTTPServer et pris en charge CGI. Ensuite, préparez un script CGI comme préparation préliminaire. Placez le script CGI dans cgi-bin dans le répertoire courant. L'exemple ci-dessous utilise python, mais il peut également être exécuté dans d'autres langages.

Préparation pour CGI


$ mkdir cgi-bin
$ cd cgi-bin
$ cat > index.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
'''
Chaîne(hello world.)Afficher
'''
print "Content-Type: text/plain"
print
print "hello world."
^D (contrôle ←+Appuyez sur D)
$ chmod 755 index.py
$ cd ..
$ tree
.
└── cgi-bin
    └── index.py

Commençons. Dans l'exemple suivant, le répertoire actuel est démarré en tant que racine du document. Si le numéro de port est omis, le port 8000 sera utilisé. Vous pouvez le compléter avec ctrl + C, mais soyez prêt pour un message d'erreur lorsque vous avez terminé.

Exemple d'écoute sur le port standard (8000)


$ python -m CGIHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...
127.0.0.1 - - [02/Dec/2015 12:53:38] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [02/Dec/2015 12:53:39] code 404, message File not found
127.0.0.1 - - [02/Dec/2015 12:53:39] "GET /favicon.ico HTTP/1.1" 404 -
127.0.0.1 - - [02/Dec/2015 12:53:47] "GET /cgi-bin/index.py HTTP/1.1" 200 -

Pour spécifier le numéro de port, procédez comme suit.

Exemple d'écoute sur le port 9000


$python -m CGIHTTPServer 9000

Édition Perl

J'ai reçu des informations selon lesquelles Perl dispose également d'un serveur Web à une seule ligne (merci à xtetuji pour avoir fourni ces informations). Personnellement, je n'ai pas beaucoup utilisé Perl, donc j'aimerais le décrire à partir de la méthode d'installation.

Paramètres cpan et installation de Plack


$ cpan
(C'est assez long. On me posera quelques questions sur la destination de l'installation, alors saisissez-la correctement. J'ai appuyé sur Entrée car tous les paramètres standard étaient corrects. Enfin, demandez si je peux définir les variables d'environnement dans le script de démarrage. Ce sera.)
$ sudo cpan Task::Plack
(C'est aussi assez long. Téléchargez les modules nécessaires etc. Après avoir attendu, on vous demandera si l'installation standard est correcte, alors répondez de manière appropriée. J'ai choisi Y. Aussi, sudo d'abord Si vous l'exécutez sans lui, Autorisation refusée s'affiche, donc sudo est ajouté.)

Maintenant, exécutons-le pour qu'il écoute sur le port 5000. La ligne de commande est un peu longue, mais vous pouvez facilement changer la racine du document.

Lancer un serveur Web à une seule ligne avec Perl


$ plackup -MPlack::App::Directory -e 'Plack::App::Directory->new({root=>$ENV{PWD}})->to_app'
HTTP::Server::PSGI: Accepting connections at http://0:5000/
127.0.0.1 - - [02/Dec/2015:14:01:01 +0900] "GET / HTTP/1.1" 200 31580 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36"
127.0.0.1 - - [02/Dec/2015:14:01:02 +0900] "GET /favicon.ico HTTP/1.1" 404 9 "http://localhost:5000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36"

Référence: Introduction à Plack: Jusqu'à ce que vous démarriez le serveur Web avec Plack et fassiez bonjour le monde

node.js (serveur http)

Partie 1. Installation globale du serveur http

Il semble que node.js dispose également d'un serveur Web à une seule ligne. Je vais donc vous présenter le serveur http. On suppose que node.js a été installé. Tout d'abord, installez le serveur http.

Exemple d'installation globale


$ npm install -g http-server

La racine du document sera le répertoire courant s'il n'y a pas de répertoire public. Supposons maintenant que la structure des répertoires soit la suivante.

Exemple de configuration d'annuaire


.
└── public
    └── index.html

Commencez à utiliser le port standard (8080) depuis le répertoire correspondant au "." Ci-dessus.

Exemple d'écoute sur le port 8080


$ http-server
Starting up http-server, serving ./public
Available on:
  http:127.0.0.1:8080
  http:192.168.0.1:8080 (← Stand by autre que localhost)
Hit CTRL-C to stop the server
[Wed, 02 Dec 2015 04:10:35 GMT] "GET /" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36"

Utilisez l'option `` -p '' pour changer le numéro de port.

Exemple d'écoute sur le port 8000


$ http-server -p 8000
Starting up http-server, serving ./public
Available on:
  http:127.0.0.1:8000
  http:192/168/0.1:8000
Hit CTRL-C to stop the server

De plus, le serveur http a une option `` -o '' pour ouvrir le navigateur Web en même temps que le démarrage. Si vous exécutez ce qui suit, le navigateur Web s'ouvrira automatiquement. (Si le navigateur Web est déjà en cours d'exécution, la page correspondante s'ouvrira dans un nouvel onglet: pour chrome)

Exemple d'ouverture d'un navigateur en même temps


$ http-server -p 8000 -o
Starting up http-server, serving ./public
Available on:
  http:127.0.0.1:8000
  http:172.16.11.3:8000
Hit CTRL-C to stop the server
[Wed, 02 Dec 2015 05:10:59 GMT] "GET /" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36"
[Wed, 02 Dec 2015 05:11:00 GMT] "GET /favicon.ico" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36"
[Wed, 02 Dec 2015 05:11:00 GMT] "GET /favicon.ico" Error (404): "Not found"

Le serveur http semble prendre en charge HTTPS en utilisant la clé privée et le certificat existants. Veuillez consulter HTTPS avec Ruby (WEBRick) pour savoir comment créer des certificats. Voici un exemple d'écoute par HTTPS en spécifiant la clé privée et le certificat.

Exemple d'écoute par HTTP sur le port 8000


$ http-server -p 8000 -S -C localhost.crt -K localhost.key
Starting up http-server, serving ./public through https
Available on:
  https://127.0.0.1:8000
  https://192.168.1.3:8000
Hit CTRL-C to stop the server

Référence 1: Le serveur Web en ligne de commande appelé http-server de Node.js est pratique Référence 2: http-server

Partie 2. Installez le serveur http localement

Dans l'exemple ci-dessus, le serveur http a été installé globalement, mais dans certains cas, vous souhaiterez peut-être l'installer localement. Pour ces personnes, je voudrais également expliquer l'installation locale. L'installation locale ne pollue pas l'environnement car les modules sont installés sous node_modules dans le répertoire courant. Installons-le maintenant.

http-Installer le serveur localement


$ npm install http-server
[email protected] node_modules/http-server
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected] ([email protected], [email protected])
├── [email protected] ([email protected], [email protected])
├── [email protected] ([email protected], [email protected], [email protected], [email protected])
├── [email protected] ([email protected])
└── [email protected] ([email protected], [email protected])
$

Vient ensuite le démarrage du serveur Web. J'essaye d'utiliser le port 8000.

http-démarrer le serveur


$ ./node_modules/.bin/http-server -p 8000
Starting up http-server, serving ./
Available on:
  http:127.0.0.1:8000
  http:192.168.0.1:8000
Hit CTRL-C to stop the server

Si la commande est longue, veuillez utiliser npm bin``` ensemble (Merci à kaminaly). L'avantage de `` npm bin '' est qu'il peut être exécuté correctement même s'il est caché dans un sous-répertoire. Dans l'exemple suivant, il est exécuté après avoir rendu public le répertoire courant.

http avec la commande npm-démarrer le serveur


$cd public (← même si vous cd en public ...)
$ $(npm bin)/http-server -p 8000 (← peut être exécuté. * Initialement exécuté uniquement sur cette ligne)
Starting up http-server, serving ./
Available on:
  http:127.0.0.1:8000
  http:192.168.0.1:8000
Hit CTRL-C to stop the server

Partie 3. Installation locale à l'aide de package.json

Si vous avez une commande de démarrage longue, créez le fichier suivant et utilisez npm. Si vous voulez changer le numéro de port, changez la valeur après -p sur la 6ème ligne.

package.json


{
  "name": "web",
  "version": "1.0.0",
  "description": "Serveur Web simple",
  "scripts": {
    "start": "http-server -p 8000"
  },
  "author": "suda",
  "license": "ISC",
  "dependencies": {
    "http-server": "^0.8.5"
  }
}

Installez le serveur http à l'aide de npm. Tapez la commande suivante dans le répertoire où se trouve package.json.

package.Installer les modules selon json


$ npm install
npm WARN package.json [email protected] No repository field.
npm WARN package.json [email protected] No README data
[email protected] node_modules/http-server
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected] ([email protected], [email protected])
├── [email protected] ([email protected], [email protected])
├── [email protected] ([email protected])
├── [email protected] ([email protected], [email protected])
└── [email protected] ([email protected], [email protected], [email protected], [email protected])
$

Ensuite, démarrez le serveur Web à l'aide de npm. L'élément "start" du "script" dans package.json est exécuté. De plus, il est automatiquement exécuté avec le chemin dans ~~ ./node_modules/ / bin et le chemin dans ~~ `` `. / Node_modules / .bin``` (kaminaly). Merci beaucoup).

$ npm start
> [email protected] start /home/suda
> http-server -p 8000

Starting up http-server, serving ./public
Available on:
  http:127.0.0.1:8000
  http:192.168.0.1:8000
Hit CTRL-C to stop the server

Créer package.json et le gérer avec npm semble un peu exagéré, mais cela a l'avantage de pouvoir être utilisé sans détruire l'environnement et que les débutants s'en souviennent à peine.

node.js (servir)

On m'a dit qu'il existe un module similaire à http-server (merci à kaminaly), donc je vais l'essayer immédiatement. Seule l'installation globale est expliquée ici, mais l'installation locale et l'installation locale par package.json sont également possibles. Addendum: Ajouté et modifié en fonction de la dernière version de serve (version 6.5.5 du 18 avril 2018).

Exemple d'installation globale


$ npm install -g serve

Ensuite, commencez à utiliser le port standard (~~ 3000 ~~ 5000) avec le répertoire courant comme racine du document.

Exemple d'écoute sur le port 5000


$ serve

   ┌─────────────────────────────────────────────────┐
   │                                                 │
   │   Serving!                                      │
   │                                                 │
   │   - Local:            http://localhost:5000     │
   │   - On Your Network:  http://192.168.1.3:5000   │
   │                                                 │
   │   Copied local address to clipboard!            │
   │                                                 │
   └─────────────────────────────────────────────────┘

Utilisez l'option `` -p '' pour changer le numéro de port.

Exemple d'écoute sur le port 8000


$ serve -p 8000

   ┌─────────────────────────────────────────────────┐
   │                                                 │
   │   Serving!                                      │
   │                                                 │
   │   - Local:            http://localhost:8000     │
   │   - On Your Network:  http://192.168.1.3:8000   │
   │                                                 │
   │   Copied local address to clipboard!            │
   │                                                 │
   └─────────────────────────────────────────────────┘

Il était également possible d'appliquer l'authentification par mot de passe. Dans l'exemple suivant, le nom d'utilisateur est suda et le mot de passe est `` `` suda1234, et le site est défini comme un site authentifié. Les noms d'utilisateurs, etc. ne sont pas définis avec des options mais avec des variables d'environnement.

Exemple d'ajout d'authentification par mot de passe


$ SERVE_USER=suda SERVE_PASSWORD=suda1234 serve --ah
th
   ┌─────────────────────────────────────────────────┐
   │                                                 │
   │   Serving!                                      │
   │                                                 │
   │   - Local:            http://localhost:5000     │
   │   - On Your Network:  http://192.168.1.3:5000   │
   │                                                 │
   │   Copied local address to clipboard!            │
   │                                                 │
   └─────────────────────────────────────────────────┘

Référence: serve

HTTP2 avec node.js (light-server)

Dans node.js, on m'a dit qu'il y avait un module appelé light-server autre que http-server and serve (merci à hatappo), donc je vais essayer ceci aussi. Seule l'installation globale est expliquée ici, mais l'installation locale et l'installation locale par package.json sont également possibles. (Désolé, je ne l'ai pas essayé faute de temps)

Exemple d'installation globale


$ npm install -g light-server

Ensuite, commencez à utiliser le port standard (4000) avec le répertoire actuel comme racine du document.

Exemple d'écoute sur le port 4000


$ light-server -s .
light-server is listening at http://0.0.0.0:4000
  serving static dir: .

GET /index.html 200 29.438 ms - -

Utilisez l'option `` -p '' pour changer le numéro de port.

Exemple d'écoute sur le port 8000


$ light-server -s . -p 8000
light-server is listening at http://0.0.0.0:8000
  serving static dir: .

La chose intéressante à propos de light-server est que vous pouvez regarder les modifications de fichiers et prendre des mesures en cas de modifications. Dans l'exemple suivant, le fichier js et index.html sous le répertoire courant sont surveillés, et s'il y a un changement, npm run build` '' est exécuté et le fichier est rechargé. (J'ai utilisé l'exemple dans le commentaire de hatappo. Merci de votre patience.)

Fichier JS et index.Exemple de surveillance html


$ light-server -s -w "**/*.js, index.html # npm run build # reload"

Notez que les chaînes de caractères qui suivent l'option -w sont séparées par #, et depuis le début, fichiers surveillés ``, `` le contenu à exécuter en cas de modification , s'il faut ou non recharger`` ''. Veuillez consulter l'URL de référence pour plus de détails.

** Recommandé **: En regardant le README du référentiel officiel, j'ai trouvé qu'il prend en charge HTTP2 (prend automatiquement en charge HTTPS). Dans l'exemple suivant, le certificat est automatiquement généré, puis écoute sur le port de la version 4000. Veuillez vous assurer de l'accès par HTTPS car vous ne pouvez pas accéder par HTTP.

Exemple d'écoute avec HTTP2 sur le port de la version 4000


$ light-server -s . --http2
light-server is listening at https://0.0.0.0:4000
  serving static dir: .

Référence: light-server

édition de commande nc

La commande nc est un outil pour envoyer et recevoir des données depuis la ligne de commande en utilisant TCP et UDP. En utilisant cette commande, il est possible de mettre en place un serveur Web simple (je le savais pour la première fois après avoir vu le commentaire de tukiyo3 en disant ça. Merci de le préciser).

Tout d'abord, c'est une méthode d'exécution lors de la spécification de la chaîne de caractères à répondre en une seule ligne. Si vous souhaitez modifier la chaîne de caractères à laquelle répondre, changez après \ n \ n. L'exemple suivant renvoie "hello".

Exemple d'écoute sur le port 8000


$ while :; do { echo -e 'HTTP/1.1 200 OK\n\nhello'; } | nc -l 8000; done

Si vous souhaitez répondre au contenu du fichier, procédez comme suit. L'exemple suivant renvoie le contenu de index.html.

Lors de la spécification du fichier à répondre


$ while :; do { echo -e 'HTTP/1.1 200 OK\n\n'; cat index.html; } | nc -l 8000; done

Selon la référence 1, il n'était pas possible de s'arrêter avec Ctrl + C, mais lorsque je l'ai exécuté sur mon bash MacOS X, j'ai pu l'arrêter (pour une raison quelconque, je ne pouvais pas l'arrêter lorsque je l'ai exécuté sur zsh). Si vous voulez vous assurer qu'il s'arrête, consultez le même article.

Référence 1: Serveur HTTP simple avec commande nc Référence 2: Lorsque vous souhaitez démarrer immédiatement un simple serveur Web

Recommended Posts

J'ai essayé de collecter des serveurs Web à une seule ligne
Une collection de serveurs Web à une seule ligne
J'ai créé une API Web
J'ai essayé de comparer le cadre d'application Web
J'ai essayé de gratter
J'ai essayé AutoKeras
J'ai essayé le moulin à papier
J'ai essayé django-slack
J'ai essayé Django
J'ai essayé spleeter
J'ai essayé cgo
J'ai essayé Web Scraping pour analyser les paroles.
J'ai essayé le web scraping en utilisant python et sélénium
J'ai essayé d'utiliser paramétré
J'ai essayé d'utiliser la mimesis
J'ai essayé d'utiliser anytree
J'ai essayé d'exécuter pymc
J'ai essayé le spoofing ARP
J'ai essayé d'utiliser aiomysql
J'ai essayé d'utiliser Summpy
J'ai essayé Python> autopep8
J'ai essayé d'utiliser coturn
J'ai essayé d'utiliser Pipenv
J'ai essayé d'utiliser matplotlib
J'ai essayé d'utiliser "Anvil".
J'ai essayé d'utiliser Hubot
J'ai essayé d'utiliser ESPCN
J'ai essayé PyCaret2.0 (pycaret-nightly)
J'ai essayé d'utiliser openpyxl
J'ai essayé le deep learning
J'ai essayé AWS CDK!
J'ai essayé d'utiliser Ipython
J'ai essayé de déboguer.
J'ai essayé d'utiliser PyCaret
J'ai essayé d'utiliser cron
J'ai essayé la mapview de Kivy
J'ai essayé d'utiliser ngrok
J'ai essayé d'utiliser face_recognition
J'ai essayé d'utiliser Jupyter
J'ai essayé de collecter des données sur un site Web avec Scrapy
J'ai essayé de déplacer EfficientDet
J'ai essayé la programmation shell
J'ai essayé d'utiliser doctest
J'ai essayé Python> décorateur
J'ai essayé d'exécuter TensorFlow
J'ai essayé Auto Gluon
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser jinja2
J'ai essayé AWS Iot
J'ai essayé l'optimisation bayésienne!
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser la fenêtre de temps
J'ai essayé d'obtenir les informations du Web en utilisant "Requests" et "lxml"
J'ai essayé de connecter Raspeye et conect + avec l'API Web
[Python] J'ai essayé de collecter des données en utilisant l'API de wikipedia
J'ai essayé les réseaux d'itération de valeur
J'ai essayé fp-growth avec python
J'ai essayé de gratter avec Python