[PYTHON] Ich habe versucht, einzeilige Webserver zu sammeln

Ich habe versucht, einzeilige Webserver zu sammeln

Möglicherweise spielen Sie mit clientseitigem JavaScript und betreten plötzlich einen Bereich, der nicht mit einer lokalen Datei ausgeführt werden kann. Heutzutage ist HTTPS erforderlich, oder Sie möchten HTTP2 ausprobieren. Zur Zeit bin ich in Web Workers eingestiegen, aber es gibt auch andere Fälle wie WebRTC ... (Erinnern) ... (nicht gefunden).

In einem solchen Fall ist es schwierig, Apache und Nginx einzeln zu starten, daher werde ich ein kleines Suchergebnis hinterlassen.

[2018/4/18 postscript] In letzter Zeit steigt der Bedarf an HTTPS. Als Reaktion darauf hat die Anzahl der Methoden, die HTTPS unterstützen, zugenommen, sodass wir nicht alle abdecken können, aber wir haben so viel wie möglich hinzugefügt und geändert.

Python (SimpleHTTPServer)

Python hat eine "-m" -Option hinzugefügt, um das Modul als Skript auszuführen (obwohl es auf Version 2.4 und höher beschränkt zu sein scheint). Verwenden Sie diese Option, um SimpleHTTPServer, eine der Standardbibliotheken, in einem Liner auszuführen. Ein Beispiel für den Start und ein Zugriffsprotokoll werden angezeigt. Die Standardportnummer ist 8000.

Beispiel für das Abhören von 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 -

Es ist gut, dass das Zugriffsprotokoll ordnungsgemäß bleibt. Wenn Sie die Portnummer ändern möchten, geben Sie die Portnummer am Ende an.

Beispiel für das Abhören von Port 3000


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

Referenz: Einzeiler zum sofortigen Starten eines Webservers mit einem Befehl (Ruby oder Python)

Python 3.x.

Ich habe es nicht ausprobiert, aber es scheint wie folgt mit der Python 3.x-Serie zu funktionieren.

Beispiel für das Abhören von Port 8000


$ python -m http.server 8000

Referenz: Webserver mit einem Liner

Ruby (WEBRick)

Eine Bibliothek namens webrick ist standardmäßig an Ruby angehängt, sodass Sie damit einen Webserver einrichten können. Im folgenden Beispiel werden nur der Dokumentstamm und die Portnummer (8000) angegeben, es können jedoch auch andere Einstellungen vorgenommen werden. Die Standardportnummer ist 80. Bitte beachten Sie, dass wenn Sie die Portnummer nicht angeben, diese mit einem Fehler beendet wird, wenn Sie keine Administratorrechte haben.

Beispiel für das Abhören von 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
- -> /

Es ist gut, dass das Zugriffsprotokoll auch hier bleibt.

~~ * Um zu stoppen, verwenden Sie die Option -KILL für den Befehl kill. ~~ Als ich es früher versuchte, konnte ich es mit Strg + C stoppen.

Alter Weg zu stoppen (jetzt Strg+Stopps bei C)


$ ps aux | grep ruby
Suchen Sie nach der Webrick-Prozessnummer
$ kill -Prozessnummer töten

Referenz: Einzeiler zum sofortigen Starten eines Webservers mit einem Befehl (Ruby oder Python)

HTTPS Edition mit Ruby (WEBRick)

Als ich WEB Rick zum ersten Mal seit langer Zeit überprüfte, stellte ich fest, dass es HTTPS problemlos unterstützen kann. Im folgenden Beispiel wird das Zertifikat automatisch generiert und überwacht dann Port 8000. * Nur für HTTPS. Sie können keine Verbindung mit HTTP herstellen.

Beispiel für das Abhören per HTTPS an 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
- -> /

Wenn ich versuche, eine Verbindung mit einem Webbrowser herzustellen, wird ein Hinweis wie "Diese Verbindung schützt nicht die Privatsphäre" (für Chrome) oder "Es ist keine sichere Verbindung" (für Firefox) angezeigt.

Im Fall von Chrome können Sie die Seite anzeigen, indem Sie auf "Auf localhost zugreifen (nicht sicher)" klicken, das angezeigt wird, wenn Sie auf "Erweitert" klicken.

Im Fall von Firefox ist dies etwas kompliziert. Sie können diese Site als Ausnahme behandeln, indem Sie auf "Ausnahme hinzufügen" klicken, wenn Sie auf "Fehlerinhalt" und dann im Dialogfeld auf "Sicherheitsausnahme genehmigen" klicken. Wenn der HTTPS-Server danach neu gestartet wird, wird das Zertifikat aktualisiert und die Verbindung abgelehnt (Fehlercode: SEC_ERROR_REUSED_ISSUER_AND_SERIAL). In diesem Fall müssen Sie das in Firefox registrierte Zertifikat löschen. Siehe Referenz 2 für Details.

~~ Die obige Methode erstellt automatisch ein Zertifikat, Sie können jedoch auch ein vorhandenes Zertifikat verwenden. Es wird zu lang sein, um als Einzeiler bezeichnet zu werden, daher werde ich es weglassen, aber Einzelheiten finden Sie in Referenz 1. ~~

Referenz 1 ist für jede Domain verschwunden und wurde bei der Suche nach Titel nicht gefunden. Daher werde ich eine Methode zur Verwendung eines vorhandenen Zertifikats hinzufügen.

Bereiten Sie zunächst den privaten Schlüssel und das Zertifikat vor. Wenn Sie bereits ein Zertifikat haben, überspringen Sie es bitte. Im folgenden Beispiel lautet der Ländername nur JP, und die folgenden Fragen werden nicht beantwortet.

Erstellen eines privaten Schlüssels und Zertifikats


$ 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

Starten Sie einen Webserver, der HTTPS unterstützt, mit dem oben erstellten Zertifikat oder einem vorhandenen Zertifikat, das separat erstellt wurde. Als Einzeiler ist es etwas lang, machen Sie also keinen Fehler.

Beispiel für das Abhören per HTTPS an 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
- -> /

~~ Referenz 1: SSL mit WEBrick aktivieren ~~ Referenz 2: [Serverzertifikat mit derselben Seriennummer wie andere](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

Rubin (Sinatra)

Ruby verfügt über ein Sinatra-Framework, mit dem auch ein Webserver in einem Liner eingerichtet werden kann. Ein Beispiel für den Start und ein Zugriffsprotokoll werden angezeigt. Die Standardportnummer ist 4567. Entsprechend dem Sinatra-Format werden komplizierte URLs verarbeitet. Im folgenden Beispiel wird index.html jedoch ignoriert und "Hello World" zurückgegeben.

Beispiel für das Abhören von 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

Gehen Sie wie folgt vor, um die Portnummer anzugeben.

Beispiel für das Abhören von Port 8000


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

Referenz: So starten Sie einen Webserver mit einem Liner

Beispiel für das Akzeptieren von anderen Hosts


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

Referenz: Sinatra ist standardmäßig nicht mehr von außen verbunden

PHP Edition

Webserverfunktionen wurden seit PHP 5.4.0 integriert (Dank an Tadsan für die Bereitstellung von Informationen). Laut Dokumentation "Verwenden Sie es für Demos und Tests", aber es ist perfekt für diesen Beitrag. Im folgenden Beispiel wird die Verwendung von Port 8000 gestartet. Der Hostname und die Portnummer können nicht weggelassen werden.

Beispiel für das Akzeptieren nur von 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

Wie bei der Ruby (Sinatra) Edition können Sie nur von localhost aus eine Verbindung herstellen. Wenn Sie eine Verbindung von einem anderen Host herstellen möchten, geben Sie "0.0.0.0" als Hostnamen an und starten Sie ihn.

Beispiel für das Akzeptieren von anderen Hosts


$ php -S 0.0.0.0:8000

Referenz: Eingebauter Webserver

Ruby (un Bibliothek) Ausgabe

Bisher war es nicht aktiviert, aber Sie können mit Ruby problemlos einen Webserver einrichten ( Vielen Dank für Ihre Informationen, Herr Yoshi-Taka. Laut Dokumentation ist es Teil der un-Bibliothek, die ein alternatives Dienstprogramm zu Unix-Basisbefehlen darstellt, und es scheint, dass WEBRick tatsächlich startet. Im folgenden Beispiel wird das aktuelle Verzeichnis als Dokumentstamm festgelegt und die Verwendung des 8000-Versionsports gestartet. Das Zugriffsprotokoll entspricht dem Basis-WEBRick. Wenn die Portnummer weggelassen wird, wird versucht, an Port 80 zu starten. Im Vergleich zu Ruby (WEBRick Edition), das zuvor eingeführt wurde, bietet es die Vorteile von "kurzen Befehlen" und "kann mit Strg + C beendet werden".

Beispiel für das Warten in der 8000-Version


$ 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

Referenz: library un --Ruby Referenz: httpd (Objekt) --APIdock

Python (CGIHTTPServer)

Im Python-Bereich reichen statische Webseiten nicht aus, und es scheint eine Bibliothek zu geben, die sogar CGI mit einem Liner ausführen kann (Dank an mash76 für die Bereitstellung von Informationen). Obwohl es sich um den Namen der Bibliothek handelt, lautet der Name auch Zubari CGI HTTP Server. Als ich es nachgeschlagen habe, hat es SimpleHTTPServer geerbt und CGI unterstützt. Bereiten Sie dann ein CGI-Skript als vorläufige Vorbereitung vor. Legen Sie das CGI-Skript in cgi-bin im aktuellen Verzeichnis ab. Im folgenden Beispiel wird Python verwendet, es kann jedoch auch in anderen Sprachen ausgeführt werden.

Vorbereitung für CGI


$ mkdir cgi-bin
$ cd cgi-bin
$ cat > index.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
'''
String(hello world.)Anzeigen
'''
print "Content-Type: text/plain"
print
print "hello world."
^D (← Kontrolle+Drücken Sie D)
$ chmod 755 index.py
$ cd ..
$ tree
.
└── cgi-bin
    └── index.py

Fangen wir an. Im folgenden Beispiel wird das aktuelle Verzeichnis als Dokumentstamm gestartet. Wenn die Portnummer weggelassen wird, wird Port 8000 verwendet. Sie können es mit Strg + C abschließen, aber seien Sie vorbereitet, da am Ende eine Fehlermeldung angezeigt wird.

Beispiel für das Abhören des Standardports (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 -

Gehen Sie wie folgt vor, um die Portnummer anzugeben.

Beispiel für das Abhören von Port 9000


$python -m CGIHTTPServer 9000

Perl-Ausgabe

Ich habe Informationen erhalten, dass Perl auch einen einzeiligen Webserver hat (Dank an xtetuji für die Bereitstellung der Informationen). Persönlich habe ich Perl nicht sehr oft verwendet, daher möchte ich es anhand der Installationsmethode beschreiben.

cpan-Einstellungen und Plack-Installation


$ cpan
(Es ist ziemlich lang. Mir werden einige Fragen zum Installationsziel gestellt, geben Sie es also richtig ein. Ich drückte die Eingabetaste, da alle Standardeinstellungen in Ordnung waren. Fragen Sie abschließend, ob ich die Umgebungsvariablen im Startskript festlegen kann. Es wird sein.)
$ sudo cpan Task::Plack
(Dies ist auch ziemlich lang. Laden Sie die erforderlichen Module usw. herunter. Nach dem Warten werden Sie gefragt, ob die Standardinstallation in Ordnung ist. Bitte antworten Sie entsprechend. Ich habe Y gewählt. Außerdem zuerst sudo Wenn Sie es ohne ausführen, wird die Berechtigung verweigert angezeigt, sodass sudo hinzugefügt wird.)

Lassen Sie es uns jetzt so ausführen, dass es Port 5000 überwacht. Die Befehlszeile ist etwas lang, aber Sie können den Dokumentstamm leicht ändern.

Starten eines einzeiligen Webservers mit 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"

Referenz: Einführung in Plack: Bis Sie den Webserver in Plack und Hallo Welt starten

node.js (http-server)

Teil 1. Globale Installation des http-Servers

Es scheint, dass node.js auch einen einzeiligen Webserver hat. Also werde ich http-Server vorstellen. Es wird davon ausgegangen, dass node.js installiert wurde. Installieren Sie zuerst den http-Server.

Globales Installationsbeispiel


$ npm install -g http-server

Das Dokumentstammverzeichnis ist das aktuelle Verzeichnis, wenn kein öffentliches Verzeichnis vorhanden ist. Angenommen, die Verzeichnisstruktur ist wie folgt.

Beispiel für die Verzeichniskonfiguration


.
└── public
    └── index.html

Beginnen Sie mit der Verwendung des Standardports (8080) aus dem Verzeichnis, das dem obigen "." Entspricht.

Beispiel für das Abhören von 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 otherhost)
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"

Verwenden Sie die Option `` `-p```, um die Portnummer zu ändern.

Beispiel für das Abhören von 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

Zusätzlich hat http-server die Option `` `-o```, um den Webbrowser gleichzeitig mit dem Start zu öffnen. Wenn Sie Folgendes ausführen, wird der Webbrowser automatisch geöffnet. (Wenn der Webbrowser bereits ausgeführt wird, wird die entsprechende Seite in einem neuen Tab geöffnet: für Chrome)

Beispiel für das gleichzeitige Öffnen eines Browsers


$ 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"

http-server scheint HTTPS unter Verwendung des vorhandenen privaten Schlüssels und Zertifikats zu unterstützen. Informationen zum Erstellen von Zertifikaten finden Sie unter HTTPS mit Ruby (WEBRick). Das folgende Beispiel zeigt das Abhören durch HTTPS durch Angabe des privaten Schlüssels und des Zertifikats.

Beispiel für das Abhören über HTTP an 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

Referenz 1: Der Befehlszeilen-Webserver mit dem Namen http-server von Node.js ist praktisch Referenz 2: http-Server

Teil 2. Installieren Sie den http-Server lokal

Im obigen Beispiel wurde der http-Server global installiert. In einigen Fällen möchten Sie ihn jedoch möglicherweise lokal installieren. Für diese Leute möchte ich auch die lokale Installation erklären. Die lokale Installation belastet die Umgebung nicht, da die Module unter node_modules im aktuellen Verzeichnis installiert werden. Lassen Sie es uns jetzt installieren.

http-Installieren Sie den Server lokal


$ 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])
$

Als nächstes wird der Webserver gestartet. Ich versuche Port 8000 zu verwenden.

http-Server starten


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

Wenn der Befehl lang ist, verwenden Sie bitte `npm bin``` zusammen (Dank an kaminaly). Der Vorteil von `npm bin``` ist, dass es auch dann ordnungsgemäß ausgeführt werden kann, wenn es in einem Unterverzeichnis versteckt ist. Im folgenden Beispiel wird es ausgeführt, nachdem das aktuelle Verzeichnis veröffentlicht wurde.

http mit npm Befehl-Server starten


$CD öffentlich (← auch wenn Sie CD öffentlich machen ...)
$ $(npm bin)/http-server -p 8000 (← kann ausgeführt werden. * Ursprünglich nur in dieser Zeile ausgeführt)
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

Teil 3. Lokale Installation mit package.json

Wenn Sie einen langen Startbefehl haben, erstellen Sie die folgende Datei und versuchen Sie, npm zu verwenden. Wenn Sie die Portnummer ändern möchten, ändern Sie den Wert nach -p in der 6. Zeile.

package.json


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

Installieren Sie den http-Server mit npm. Geben Sie den folgenden Befehl in das Verzeichnis ein, in dem sich package.json befindet.

package.Installieren Sie die Module gemäß 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])
$

Starten Sie als Nächstes den Webserver mit npm. Das Element "start" von "script" in package.json wird ausgeführt. Es wird automatisch mit dem Pfad zu ~~ ./node_modules/ / bin und dem Pfad zu ~~ `` `. / Node_modules / .bin``` (kaminaly) ausgeführt. Vielen Dank).

$ 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

Das Erstellen von package.json und das Verwalten mit npm scheint etwas übertrieben, hat aber den Vorteil, dass es verwendet werden kann, ohne die Umgebung zu zerstören, und es ist gut für Anfänger, da es schwer zu merken ist.

node.js (dienen)

Mir wurde gesagt, dass es ein Modul gibt, das dem http-Server ähnelt (danke an kaminaly), also werde ich es sofort versuchen. Hier wird nur die globale Installation erläutert, aber auch die lokale Installation und die lokale Installation von package.json sind möglich. Nachtrag: Hinzugefügt und geändert gemäß der neuesten Version von Serve (Version 6.5.5 vom 18. April 2018).

Globales Installationsbeispiel


$ npm install -g serve

Verwenden Sie als Nächstes den Standardport (~~ 3000 ~~ 5000) mit dem aktuellen Verzeichnis als Dokumentstamm.

Beispiel für das Abhören von Port 5000


$ serve

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

Verwenden Sie die Option `` `-p```, um die Portnummer zu ändern.

Beispiel für das Abhören von Port 8000


$ serve -p 8000

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

Es war auch möglich, die Passwortauthentifizierung anzuwenden. Im folgenden Beispiel lautet der Benutzername "suda" und das Kennwort "suda1234", und die Site wird als authentifizierte Site festgelegt. Stellen Sie den Benutzernamen usw. mit Umgebungsvariablen anstelle von Optionen ein.

Beispiel für das Hinzufügen einer Kennwortauthentifizierung


$ 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!            │
   │                                                 │
   └─────────────────────────────────────────────────┘

Referenz: dienen

HTTP2 mit node.js (Light-Server)

In node.js wurde mir gesagt, dass es ein anderes Modul namens light-server als http-server and serve gibt (danke an hatappo), also werde ich dies auch versuchen. Hier wird nur die globale Installation erläutert, aber auch die lokale Installation und die lokale Installation von package.json sind möglich. (Entschuldigung, ich habe es aus Zeitmangel nicht ausprobiert)

Globales Installationsbeispiel


$ npm install -g light-server

Beginnen Sie als Nächstes mit der Verwendung des Standardports (4000) mit dem aktuellen Verzeichnis als Dokumentstamm.

Beispiel für das Abhören von 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 - -

Verwenden Sie die Option `` `-p```, um die Portnummer zu ändern.

Beispiel für das Abhören von Port 8000


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

Das Interessante an Light-Server ist, dass Sie Dateiänderungen beobachten und Maßnahmen ergreifen können, wenn Änderungen vorgenommen werden. Im folgenden Beispiel werden die js-Datei und die index.html unter dem aktuellen Verzeichnis überwacht. Wenn sich etwas ändert, wird `npm run build `ausgeführt und die Datei neu geladen. (Ich habe das Beispiel im Kommentar von hatappo verwendet. Vielen Dank für Ihre Geduld.)

JS-Datei und Index.Beispiel für die Überwachung von HTML


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

Die Zeichenfolgen nach der Option -w werden durch # getrennt und von Anfang an "überwachte Dateien", "Inhalte, die beim Ändern ausgeführt werden sollen", "ob neu geladen werden soll oder nicht" ``. Weitere Informationen finden Sie in der Referenz-URL.

** Empfohlen **: Als ich mir die README-Datei des offiziellen Repositorys ansah, stellte ich fest, dass sie HTTP2 unterstützt (unterstützt automatisch HTTPS). Im folgenden Beispiel wird das Zertifikat automatisch generiert und überwacht dann den 4000-Versionsport. Stellen Sie sicher, dass Sie über HTTPS zugreifen, da Sie nicht über HTTP zugreifen können.

Beispiel für das Abhören mit HTTP2 am Port der 4000er-Version


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

Referenz: Lichtserver

nc command edition

Der Befehl nc ist ein Tool zum Senden und Empfangen von Daten über die Befehlszeile mit TCP und UDP. Mit diesem Befehl ist es möglich, einen einfachen Webserver einzurichten (ich wusste es zum ersten Mal, nachdem ich den Kommentar von tukiyo3 gesehen hatte, als ich das sagte. Vielen Dank für den Hinweis).

Zuallererst ist es eine Ausführungsmethode, wenn die Zeichenfolge angegeben wird, die in einem Liner beantwortet werden soll. Wenn Sie die zu beantwortende Zeichenfolge ändern möchten, ändern Sie sie nach \ n \ n. Das folgende Beispiel gibt "Hallo" zurück.

Beispiel für das Abhören von Port 8000


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

Wenn Sie den Inhalt der Datei beantworten möchten, führen Sie bitte die folgenden Schritte aus. Das folgende Beispiel gibt den Inhalt von index.html zurück.

Bei Angabe der zu antwortenden Datei


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

Laut Referenz 1 war es nicht möglich, mit Strg + C zu stoppen, aber als ich es auf meinem MacOS X-Bash ausführte, konnte ich es stoppen (aus irgendeinem Grund konnte ich es nicht stoppen, wenn ich es auf zsh ausführte). Wenn Sie sicherstellen möchten, dass es stoppt, lesen Sie denselben Artikel.

Referenz 1: Einfacher HTTP-Server mit dem Befehl nc Referenz 2: Wenn Sie einen einfachen Webserver sofort starten möchten

Recommended Posts

Ich habe versucht, einzeilige Webserver zu sammeln
Eine Sammlung von einzeiligen Webservern
Ich habe eine Web-API erstellt
Ich habe versucht, das Webanwendungs-Framework zu vergleichen
Ich habe versucht zu kratzen
Ich habe AutoKeras ausprobiert
Ich habe es mit Papiermühle versucht
Ich habe versucht, Django-Slack
Ich habe es mit Django versucht
Ich habe es mit Spleeter versucht
Ich habe es mit cgo versucht
Ich habe Web Scraping versucht, um die Texte zu analysieren.
Ich habe versucht, Web-Scraping mit Python und Selen
Ich habe versucht, parametrisiert zu verwenden
Ich habe versucht, Mimesis zu verwenden
Ich habe versucht, anytree zu verwenden
Ich habe versucht, Pymc auszuführen
Ich habe ARP-Spoofing ausprobiert
Ich habe versucht, aiomysql zu verwenden
Ich habe versucht, Summpy zu verwenden
Ich habe Python> autopep8 ausprobiert
Ich habe versucht, Coturn zu verwenden
Ich habe versucht, Pipenv zu verwenden
Ich habe versucht, Matplotlib zu verwenden
Ich habe versucht, "Anvil" zu verwenden.
Ich habe versucht, Hubot zu verwenden
Ich habe versucht, ESPCN zu verwenden
Ich habe PyCaret2.0 (pycaret-nightly) ausprobiert.
Ich habe versucht, openpyxl zu verwenden
Ich habe versucht, tief zu lernen
Ich habe AWS CDK ausprobiert!
Ich habe versucht, Ipython zu verwenden
Ich habe versucht zu debuggen.
Ich habe versucht, PyCaret zu verwenden
Ich habe versucht, Cron zu verwenden
Ich habe Kivys Kartenansicht ausprobiert
Ich habe versucht, ngrok zu verwenden
Ich habe versucht, face_recognition zu verwenden
Ich habe versucht, Jupyter zu verwenden
Ich habe versucht, mit Scrapy Daten von einer Website zu sammeln
Ich habe versucht, EfficientDet zu verschieben
Ich habe versucht, Shell zu programmieren
Ich habe versucht, doctest zu verwenden
Ich habe Python> Decorator ausprobiert
Ich habe versucht, TensorFlow auszuführen
Ich habe Auto Gluon ausprobiert
Ich habe versucht, Folium zu verwenden
Ich habe versucht, jinja2 zu verwenden
Ich habe AWS Iot ausprobiert
Ich habe die Bayes'sche Optimierung ausprobiert!
Ich habe versucht, Folium zu verwenden
Ich habe versucht, das Zeitfenster zu verwenden
Ich habe versucht, die Informationen des Webs mit "Requests" und "lxml" abzurufen.
Ich habe versucht, Raspeye und conect + mit der Web-API zu verbinden
[Python] Ich habe versucht, Daten mit der API von Wikipedia zu sammeln
Ich habe Value Iteration Networks ausprobiert
Ich habe fp-Wachstum mit Python versucht
Ich habe versucht, mit Python zu kratzen