
Schneller , setup-Web- Serve
QuickServ erleichtert das Erstellen von Webanwendungen gefährlich , unabhängig davon, welche Programmiersprache Sie verwenden.
QuickServ ist ein abhängigen, statisch verknüpften Webserver, der:
read und write kann QuickServ bringt den berauschenden Spaß des Internets der 90er Jahre in die 2020er Jahre. Es ist von der Common Gateway Interface (CGI) inspiriert, ist jedoch viel einfacher zu errichten und zu verwenden. Im Gegensatz zu CGI funktioniert es außerhalb des Feldes ohne Suche nach obskuren Protokolldateien, ohne zu lernen, wie HTTP -Header funktionieren, ohne Fummeln mit Berechtigungsbits, keine Sorgen um CORs, keine Frage, wo Sie Ihre Skripte einsetzen sollen, und ohne mit Apache mod_cgi -Konfigurationen zu kämpfen.
Anders als bei CGI müssen Sie nicht wissen, was etwas aus dem vorherigen Absatz bedeutet, QuickServ zu verwenden.
Es ist perfekt für:
QuickServ sollte im öffentlichen Internet nicht verwendet werden. Es sollte nur in privaten Netzwerken verwendet werden.
Die Verwendung von QuickServ ist so einfach wie das Herunterladen des Programms, das Ziehen in Ihren Projektordner und das Doppelklicken zum Ausführen. Es erkennt automatisch, welche Dateien ausgeführt werden sollen und welche direkt dem Benutzer dienen sollen.
Laden Sie für Windows herunter.
Erstellen Sie einen Projektordner und fügen Sie Dateien hinzu. Wenn beispielsweise Python installiert ist, erstellen Sie eine Datei namens test.py im Projektordner mit:
#!python
# Put your code here. For example:
import random
print ( random . randint ( 0 , 420 ))
Da test.py mit #!something beginnt, wobei something test.py der Befehl zur Ausführung der Datei ist, wird QuickServ wissen, dass er sie ausführen soll. Wenn QuickServ Ihre Datei nicht ausführt, addieren Sie dies zu Beginn.
Unter Windows weiß QuickServ auch, dass sie automatisch Dateien ausführen, die in .exe und .bat enden. Jeder andere Dateityp muss mit #!something beginnen, wenn er ausgeführt werden sollte.
Verschieben Sie die heruntergeladene quickserv_windows_x64.exe -Datei in den Projektordner.

Doppelklicken quickserv_windows_x64.exe im Projektordner zum Starten von QuickServ. Ermöglichen Sie den Zugriff über Windows Defender, wenn Sie aufgefordert werden.


Gehen Sie zu http://127.0.0.1:42069 (oder der von QuickServ angezeigten Adresse), um eine Verbindung zu Ihrer Webanwendung herzustellen. Gehen Sie im Beispiel zum Ausführen test.py unter http://127.0.0.1:42069/test.py.

Laden Sie die richtige Version für Ihren Computer herunter. Überprüfen Sie bei Bedarf, welche Art von Prozessor Ihr Mac hat. Sie müssen die Dateien nach dem Herunterladen entpacken.
Erstellen Sie einen Projektordner und fügen Sie Dateien hinzu. Wenn beispielsweise Python installiert ist, erstellen Sie eine Datei namens test.py im Projektordner mit:
#!python
# Put your code here. For example:
import random
print ( random . randint ( 0 , 420 ))
Wenn Sie die Datei mit textedit erstellen, müssen Sie in Format > Make Plain Text , um die Datei im richtigen Format zu speichern.

Da test.py mit #!something beginnt, wobei something test.py der Befehl zur Ausführung der Datei ist, wird QuickServ wissen, dass er sie ausführen soll. Wenn QuickServ Ihre Datei nicht ausführt, addieren Sie dies zu Beginn.
Auf Mac weiß QuickServ auch, dass sie automatisch kompilierte Dateien ausführen. Jeder andere Dateityp muss mit #!something beginnen, wenn er ausgeführt werden sollte.
Verschieben Sie den heruntergeladenen quickserv_macos_x64 oder die Datei quickserv_macos_arm64 in den Projektordner.
Klicken Sie im Projektordner mit der rechten Maustaste quickserv_macos_x64 oder quickserv_macos_arm64 und wählen Sie "Öffnen Sie". Drücken Sie dann im Dialogfeld Bestätigungsdialog "Öffnen". Nachdem Sie es einmal so ausgeführt haben, können Sie QuickServ starten, indem Sie einfach auf die Datei doppelklicken.



Gehen Sie zu http://127.0.0.1:42069 (oder der von QuickServ angezeigten Adresse), um eine Verbindung zu Ihrer Webanwendung herzustellen. Gehen Sie im Beispiel zum Ausführen test.py unter http://127.0.0.1:42069/test.py.

Es ist am einfachsten zu installieren und über die Befehlszeile auszuführen. Öffnen Sie das Terminal.
Geben Sie die folgenden Befehle ein. Für die ersten Befehle kann ein Passwort erforderlich sein.
# Download
sudo curl
--location
--output /usr/local/bin/quickserv
https://github.com/jstrieb/quickserv/releases/latest/download/quickserv_raspi_arm
# Make executable
sudo chmod +x /usr/local/bin/quickserv
# Make a project folder
mkdir -p my/project/folder
# Go to project folder
cd my/project/folder
# Add a test file
cat << EOF > test.py
#!python3
# Put your code here. For example:
import random
print(random.randint(0, 420))
EOF
# Run QuickServ
quickserv Gehen Sie zu http://127.0.0.1:42069 (oder der von QuickServ angezeigten Adresse), um eine Verbindung zu Ihrer Webanwendung herzustellen. Zum Beispiel zum Ausführen test.py finden Sie unter http://127.0.0.1:42069/test.py.
Wenn Sie ausführbare Ausführungen ausführen, hat es kein konsistentes Verhalten über Linux -Distributionen hinweg. Daher ist es am einfachsten, über die Befehlszeile zu installieren und auszuführen. Abhängig von der Architektur Ihres Computers kann es erforderlich sein, den Dateinamen am Ende der folgenden curl HTTP -Anforderungs -URL zu ändern.
Siehe alle Download -Optionen auf der Seite "Veröffentlichungen".
# Download
sudo curl
--location
--output /usr/local/bin/quickserv
https://github.com/jstrieb/quickserv/releases/latest/download/quickserv_linux_x64
# Make executable
sudo chmod +x /usr/local/bin/quickserv
# Make a project folder
mkdir -p /my/project/folder
# Go to project folder
cd /my/project/folder
# Add a test file
cat << EOF > test.py
#!python3
# Put your code here. For example:
import random
print(random.randint(0, 420))
EOF
# Run QuickServ
quickserv Gehen Sie zu http://127.0.0.1:42069 (oder der von QuickServ angezeigten Adresse), um eine Verbindung zu Ihrer Webanwendung herzustellen. Zum Beispiel zum Ausführen test.py finden Sie unter http://127.0.0.1:42069/test.py.
Verwenden Sie alternativ die folgenden Anweisungen, um aus der Quelle zu kompilieren.
Kompilieren und installieren Sie die Quelle mit dem folgenden Befehl. Eine Version von GO größer als 1.16 ist aufgrund der Abhängigkeit von eingebetteten Dateisystemen erforderlich.
go install github.com/jstrieb/quickserv@latestErstellen Sie dann Ihren Projektordner, füllen Sie ihn und führen Sie QuickServ aus.
# Make a project folder
mkdir -p /my/project/folder
# Go to project folder
cd /my/project/folder
# Add a test file
cat << EOF > test.py
#!python3
# Put your code here. For example:
import random
print(random.randint(0, 420))
EOF
# Run QuickServ
quickservUm die wichtigsten Funktionen von QuickServ zu demonstrieren, erstellen wir eine einfache Webanwendung, um eine Ergänzung durchzuführen. Der Code folgt nicht den Best Practices, aber er wird zeigen, wie wenig benötigt wird, um mit QuickServ zu bauen.
Zunächst erstellen wir einen Projektordner und ziehen Sie den ausführbaren QuickServ -ausführbaren in den Ordner, wie in den Schritten mit Erste Schritten.
Als nächstes speichern wir im Ordner den folgenden Text als index.html :
< form action =" /calculate " >
< input name =" first " type =" number " > + < input name =" second " type =" number " > = ???
< br >
< button > Calculate </ button >
</ form > Dieser Code stellt zwei Variablen der Seite /calculate vor. Im Browser sieht es so aus:

Anschließend erstellen wir einen Ordner namens calculate im Projektordner. Innerhalb des calculate berechnen wir den folgenden Code als index.py . Der Name index.whatever sagt QuickServ, dass er diese Datei ausführen soll, wenn ein Benutzer http://website/calculate anstatt sie zu besuchen, http://website/calculate/index.py zu besuchen.
Achten Sie besonders auf die Code -Kommentare. Sie unterstreichen eine Reihe wichtiger QuickServ -Funktionen.
#!python3
# Each QuickServ script must begin with a line like the one above so that
# QuickServ knows how to run the file. This line tells QuickServ that I would
# type `python3 this_file.py` to run this file at the command prompt. For
# example, if you wanted to do `julia this_file.py` instead, then you would
# make the first line of `this_file.py` be `#!julia`.
#
# Since we just want QuickServ to show the HTML code to the user and not run
# it, index.html does not begin with this. The first line is only required when
# QuickServ has to run the code.
import argparse
# All HTML form values get turned into command line arguments. The names are
# formatted like "--name" and the value comes right after the name.
parser = argparse . ArgumentParser ()
parser . add_argument ( "--first" , type = int , required = True )
parser . add_argument ( "--second" , type = int , required = True )
args = parser . parse_args ()
# Print the result -- anything printed out goes right to the user. In this
# case, the output is text. But you can print anything and QuickServ will guess
# the file type. Even printing the contents of image and video files works.
print ( args . first + args . second )Klicken Sie nun in Ihrem Projektordner auf QuickServ und probieren Sie ihn in Ihrem Browser aus. Das war's!
Weitere QuickServ -Demonstrationen finden Sie in den Beispielen im nächsten Abschnitt. Weitere Informationen im Abschnitt "Wie es funktioniert" und im Code selbst. Der Abschnitt mit erweiterten Abschnitt enthält zusätzliche Informationen über die Umwelt, die QuickServ für ausführbare ausführbare Ausführungen einstellt.
Alle Beispiele befinden sich im examples Ordner, das ein Git-Submodul ist, das mit dem Repo von Jstrieb/QuickServ-Examples verbunden ist. Weitere Informationen zum Ausführen der Beispiele finden Sie in diesem Repo.
Einige Highlights:
| Zusammenfassung | Sprache | Fenster | MAC | Linux |
|---|---|---|---|---|
| YouTube nach GIF | Hülse | |||
| Erstellen Sie Bloom -Filter | C | |||
| Synchronisierte Filmliste | Typoskript | |||
| Brainfuck Dolmetscher | X86-64 Montage | |||
| Mandelbrot Zoom | Hülse | |||
| Cryptocurrency Dashboard | Gehen | |||
| PDF -Werkzeuge | Python | |||
| TypeSet Markdown als PDF | Standard ml |
Der gesamte QuickServ -Code lebt in quickserv.go . Diese gut geförderte Datei ist ungefähr 700 Zeilen lang und sollte einen erfahrenen Programmierer ohne Lesen ohne Golang-Vertrautheit einnehmen.
QuickServ hat zwei Hauptteile. Das erste ist ein Initialisierungsverfahren, das beim Start genau einmal ausgeführt wird. Die zweite ist eine Handlerfunktion, die jedes Mal, wenn ein Benutzer eine HTTP -Anforderung an den Server stellt, aufgerufen wird.
Wenn TickServ startet, überprüft es die Befehlszeilenkonfigurationsflags, öffnet eine Protokolldatei, wenn eine mit --logfile übergeben wird (ansonsten protokolliert es sich für die Standardausgabe) und ändert Verzeichnisse, wenn ein Arbeitsverzeichnis mit --dir übergeben wird. Beachten Sie, dass der Pfad der Protokolldatei relativ zum aktuellen Arbeitsverzeichnis ist, nicht im Verhältnis zum mit --dir übergebenen.
Als nächstes scannt QuickServ das Arbeitsverzeichnis, damit Dateien ausgeführt werden sollen. Es druckt alle Dateien, die ausgeführt werden. Dieses Verhalten ist nützlich, um festzustellen, ob QuickServ ein Skript als ausführbar erkennt. Es druckt auch hilfreiche Informationen für den Benutzer wie die Webadresse, um auf den Server zuzugreifen, und für den Ordner, in dem der Server ausgeführt wird, sowie zum Stoppen.
Wenn ein Teil der Initialisierung fehlschlägt, wird ein Fehler gemeldet. Im Falle eines tödlichen Fehlers wartet QuickServ vor dem Beenden auf Benutzereingaben. Auf diese Weise wird ein Benutzer, der auf die ausführbare Datei doppelklickt (im Gegensatz zum Starten der Befehlszeile), kein Fenster angezeigt und dann sofort verschwindet, um zu schnell zu blinken, damit der Fehler zu lesen ist.
Fehlermeldungen werden absichtlich mit so wenig technischem Jargon wie möglich geschrieben, obwohl einige unvermeidlich sind. Wahrscheinliche Ursachen für die Fehler sind auch in Fehlermeldungen enthalten, sodass sie für Benutzer leichter identifizieren und beheben können.
Als letzter Schritt in der Initialisierungsverfahren startet QuickServ einen Webserver mit einer einzigen Handlerfunktion für alle Anforderungen. Der Server hört auf den Standardport von 42069 oder auf einem zufälligen Port an, wenn ein Benutzer das Befehlszeilen-Flag- --random-port angegeben hat. Ein zufälliger Port wäre wünschenswert, wenn der Benutzer beispielsweise ein mit Humor ohne Humor erstellte Projekt anzeigen muss.
Wenn ein Benutzer eine Webseite besucht, übernimmt QuickServ die Anforderung, indem sie die einsame Handlerfunktion aufruft.
Zunächst versucht diese Funktion, die Datei zu öffnen, die der Benutzer angefordert hat. Wenn es die Datei nicht finden oder öffnen kann, versucht sie, eine Standardversion der Datei zu erstellen. Zum Beispiel gibt es ein eingebettetes, Standard favicon.ico , der serviert wird. Wenn keine Standarddatei mit dem Pfad übereinstimmt, können Sie den integrierten GO-Fileserver den Fehler verwandeln und mit einem 404-Fehlercode antworten.
Wenn die angeforderte Datei vorhanden ist, wird überprüft, ob es sich um ein Verzeichnis handelt. Wenn es sich um ein Verzeichnis handelt, sucht QuickServ nach einer Datei namens index.xxx , in der xxx eine Dateierweiterung ist. Wenn eine Indexdatei gefunden wird, wird der Index bedient (und möglicherweise ausgeführt), als wäre die Originalseite angefordert. Andernfalls muss der Benutzer ein Verzeichnis ohne Standardindex angefordert haben, sodass QuickServ mit einer Auflistung der anderen Dateien im Verzeichnis antwortet.
Wenn die von dem Benutzer angeforderte Datei vorhanden ist und kein Verzeichnis ( dh eine reguläre Datei), überprüft QuickServ, ob sie ausführbar ist oder nicht. Wenn ja, wird die gefundene Datei ausgeführt. Wenn nicht, gibt es den Rohdateiinhalt an den Benutzer zurück. In beiden Fällen erraten QuickServ, welcher Filetyp (und deshalb, welcher mimetype ) für die Antwort verwendet werden.
Die Technik zum Bestimmen, ob eine ausführbare Datei ist, hängt vom Laufzeit -Betriebssystem ab. Unter Windows wird jede Datei mit einer .bat oder .exe -Erweiterung als ausführbar angesehen. Bei Nicht-Windows-Systemen wird jede Datei mit dem ausführbaren Berechtigungsbit als ausführbar angesehen. Auf allen Systemen ist eine Datei ausführbar, wenn sie zu Beginn einen gültigen Pseudo-Shebang enthält. Der Shebang muss in der ersten Zeile sein, muss mit #! und muss ein gültiger Befehl sein. Beispielsweise sind beide folgende Angaben akzeptabel, vorausgesetzt, python3 ist installiert und auf dem PATH :
#!/usr/bin/python3#!python3 Um eine Datei auszuführen, führt QuickServ entweder die Datei selbst aus (wenn sie ein .exe ist oder das ausführbare Bit festgelegt hat), oder es übergibt den Pfad der Datei als erstes Argument an die in SheBang aufgeführte ausführbare Datei. Das Anforderungsgremium wird an das Programm über die Standardeingabe übergeben, und alles, was vom Programm zur Standardausgabe gedruckt wird, wird als Antwortkörper verwendet. Ausführte Programme sind weder für das Schreiben - nicht in der Lage zu schreiben - HTTP -Antwortheader.
Alle analysierten HTTP-Formularvariablen (wenn der Content-Type x-www-form-urlencoded ist) werden auch als Befehlszeilenargumente übergeben, wenn das Programm ausgeführt wird. Auf diese Weise muss der Benutzer die Variablen selbst nicht analysieren.
Unabhängig vom ausgeführten Programm druckt auf Standardfehler von QuickServ protokolliert, was bedeutet, dass es standardmäßig in der Konsolenfenster gedruckt wird. Dies ist praktisch für das Debuggen. Wenn das Programm mit einem Exit-Code ungleich Null endet, antwortet QuickServ mit einem internen Serverfehler von 500. Ansonsten kehrt es mit einem 200 zurück.
Wenn es sich bei der Anforderung um eine URL-kodierte Postanforderung mit Formulardaten handelt, ist QuickServ-URL-Decodes alle Zeichen mit Ausnahme von drei Symbolen: % & und = . Der Benutzer ist dafür verantwortlich, diese zu ersetzen. Beachten Sie, dass es wichtig ist, dass Sie in dem Programm, das die Formulardaten verarbeitet, immer URL-Decode- % -Plikat- % ist.
Führen Sie den QuickServ nicht im öffentlichen Internet durch. Führen Sie es nur in privaten Netzwerken aus.
QuickServ ist nicht für die Produktionsnutzung ausgelegt. Es wurde nicht so erstellt, dass es schnell oder sicher ist. Wenn Sie QuickServ in der Produktion verwenden, sind Ihre Benutzer und sich selbst gefährdet. Bitte tun Sie dies nicht.
Mit QuickServ können Menschen gefährlich unsichere Dinge bauen. Es werden keine Eingänge oder Ausgänge abgerundet. Es verwendet einen Prozess pro Anfrage und ist anfällig für eine Ablehnung des Serviceangriffs. Das Sicherheitsmodell vermutet, dass Webbenutzer vertrauenswürdig sind. Diese Eigenschaften erleichtern das Prototyping, sind jedoch im öffentlichen Internet nicht sicher.
Um die Verwendung von QuickServ in der Produktion zu verhindern, läuft es auf Port 42069 . Hoffentlich überlegen alle zweimal, bevor Sie ihn in einen Reverse -Proxy oder eine Portwart -Konfiguration eingeben. Für eine professionellere Demo wird das Flagge --random-port stattdessen einen zufälligen Port verwendet, der zur Laufzeit ermittelt wird.
QuickServ ähnelt dem alten CGI -Protokoll. Es gibt viele gut artikulierte, gut etablierte Gründe dafür, dass CGI in der Produktion schlecht ist, und alle gelten für QuickServ in der Produktion.
QuickServ verfügt über erweiterte Optionen, die über Befehlszeilenflags konfiguriert sind. Diese verändern, wie und wo QuickServ ausgeführt wird und wo es seine Ausgabe spart.
Usage:
quickserv [options]
Options:
--dir string
Folder to serve files from. (default ".")
--logfile string
Log file path. Stdout if unspecified. (default "-")
--no-pause
Don't pause before exiting after fatal error.
--random-port
Use a random port instead of 42069.
Bei der Nachahmung von CGI werden HTTP -Header als Umgebungsvariablen an das ausgeführte Programm übergeben. Ein Header-Name -Header namens der Umgebungsvariablen HTTP_HEADER_NAME .
Es gibt auch eine REQUEST_TYPE -Variable, die angibt, ob die Anfrage GET , POST usw. war.
HTTP -Anfragen mit einem Körper übergeben den Körper an das ausgeführte Programm für Standardeingaben. In den meisten Fällen wird die Antragsbehörde wörtlich übergeben. Dies ist bei HTML -Formularen nicht der Fall.
HTML -Formdaten können entweder aus Befehlszeilenargumenten wie im Tutorial gelesen oder aus Standardeingaben analysiert werden. Variablen nehmen die Form an
name=value&othername=othervalue
Das einfache Additionsbeispiel aus dem Tutorial kann umgeschrieben werden, um HTTP -Formularwerte aus der Standardeingabe anstelle von den Befehlszeilenargumenten zu analysieren.
#!python3
import sys
# In the form input, "=" and "&" determine where variables start and end. So if
# they are literally included in the variable name or value, they must be
# specially decoded. This code replaces every instance of the text on the left
# with the text on the right to do the decoding:
# %3D -> =
# %26 -> &
# %25 -> %
#
# NOTE: Order matters! "%" must be decoded last. If not, it can mess with
# decoding the others, since their encoded version uses "%"
def decode_characters ( text ):
text = text . replace ( "%3D" , "=" )
text = text . replace ( "%26" , "&" )
text = text . replace ( "%25" , "%" )
return text
first = second = 0
# Read all of the input into a variable. We are expecting the raw data to look
# like:
# first=123&second=456
data = sys . stdin . read ()
# The raw data looks like the above, so split it into pairs at each "&"
pairs = data . split ( "&" )
for pair in pairs :
# Each pair looks like the following, so split at each "=":
# name=value
name , value = pair . split ( "=" )
# Decode any special characters (=, &, %) now that we have split the
# variables up. This isn't necessary here since we're expecting numbers and
# not expecting any of those characters. But it matters a lot when a user
# could submit text with those characters
name = decode_characters ( name )
value = decode_characters ( value )
# If the name is what we're looking for, store the value for adding
if name == "first" :
first = int ( value )
elif name == "second" :
second = int ( value )
# Print the result -- anything printed out goes right to the user. In this
# case, the output is text. But you can print anything and QuickServ will try and
# guess the file type.
print ( first + second )Dieses Projekt ist aktiv entwickelt und aufrechterhalten. Wenn es keine aktuellen Commits gibt, bedeutet dies, dass alles reibungslos läuft!
Bitte eröffnen Sie ein Problem mit Fehlern, Vorschlägen oder Fragen. Dies beinhaltet insbesondere Diskussionen darüber, wie Fehlermeldungen so klar wie möglich erstellt werden und wie die Standardeinstellungen für möglichst viele Benutzer wie möglich anwendbar sind.
Anfragen ohne vorherige Diskussion werden ignoriert - verschwenden Sie keine Zeit damit, Code zu schreiben, bevor Sie bestätigen, dass er zusammengeführt wird. Als geschäftiger, einziger Entwickler ist es einfacher, zu reagieren, wenn alle Codebeiträge einen Kontext haben.
Wenn Sie einen Blog -Beitrag, ein Video, ein Tutorial, ein Hackathon -Projekt oder irgendetwas anderes mit TickServ erstellen, öffnen Sie bitte ein Problem oder senden Sie mir eine Nachricht in meinem Kontaktformular, damit ich darauf zurückkehren kann!
Es gibt einige Möglichkeiten, das Projekt zu unterstützen:
Diese Dinge motivieren mich, weiter zu teilen, was ich aufbaue, und sie geben Bestätigung dafür, dass meine Arbeit geschätzt wird! Sie helfen mir auch, das Projekt zu verbessern. Dank im Voraus!
Wenn Sie darauf bestehen, Geld auszugeben, um Ihre Unterstützung zu zeigen, ermutige ich Sie, stattdessen eine großzügige Spende an eine der folgenden Organisationen zu leisten. Durch die Befürworter von Internetfreiheiten helfen mir solche Organisationen, dass ich mich wohl fühlen kann, wenn ich öffentlich im Internet arbeitet.
Dieses Projekt wäre ohne die Hilfe von nicht möglich: