
รวดเร็ว และไม่ติดตั้งเว็บ เสิร์ฟ
QuickServ ทำให้การสร้างเว็บแอปพลิ เคชันเป็นเรื่อง ง่ายไม่ว่าคุณจะใช้ภาษาการเขียนโปรแกรมใด
QuickServ เป็นเว็บเซิร์ฟเวอร์ไฟล์เดียวที่มีการเชื่อมโยงแบบคงที่แบบคงที่:
read และ write QuickServ นำความสนุกสนานอันยิ่งใหญ่ของอินเทอร์เน็ตในปี 1990 ไปสู่ปี 2020 มันได้รับแรงบันดาลใจจากอินเทอร์เฟซเกตเวย์ทั่วไป (CGI) แต่ง่ายต่อการตั้งค่าและใช้งาน ซึ่งแตกต่างจาก CGI มันทำงานนอกกรอบโดยไม่มีการค้นหาไฟล์บันทึกที่คลุมเครือไม่มีการเรียนรู้ว่าส่วนหัว HTTP ทำงานอย่างไรไม่มีการเล่นซอกับบิตได้รับอนุญาตไม่ต้องกังวลเกี่ยวกับ CORS ไม่ต้องสงสัยเลยว่าจะวางสคริปต์ของ mod_cgi ที่ไหน
แตกต่างจาก CGI คุณไม่จำเป็นต้องรู้ว่าอะไรจากย่อหน้าก่อนหน้านี้หมายถึงการใช้ QuickServ
เหมาะสำหรับ:
ไม่ควรใช้ QuickServ บนอินเทอร์เน็ตสาธารณะ ควรใช้กับเครือข่ายส่วนตัวเท่านั้น
การใช้ QuickServ นั้นง่ายพอ ๆ กับการดาวน์โหลดโปรแกรมลากไปยังโฟลเดอร์โครงการของคุณและคลิกสองครั้งเพื่อเรียกใช้ จะตรวจพบไฟล์ที่จะเรียกใช้งานโดยอัตโนมัติและจะให้บริการโดยตรงกับผู้ใช้
ดาวน์โหลดสำหรับ Windows
สร้างโฟลเดอร์โครงการและเพิ่มไฟล์ลงไป ตัวอย่างเช่นหากติดตั้ง Python ให้สร้างไฟล์ที่เรียกว่า test.py ในโฟลเดอร์โครงการที่มี:
#!python
# Put your code here. For example:
import random
print ( random . randint ( 0 , 420 ))
ตั้งแต่ test.py เริ่มต้นด้วย #!something ที่ something test.py เป็นคำสั่งในการเรียกใช้งานไฟล์ QuickServ จะรู้ว่าจะเรียกใช้ หาก QuickServ ไม่เรียกใช้ไฟล์ของคุณตรวจสอบให้แน่ใจว่าได้เพิ่มสิ่งนี้ลงในจุดเริ่มต้น
บน Windows QuickServ ยังรู้ว่าจะเรียกใช้ไฟล์ที่สิ้นสุดใน .exe และ .bat โดยอัตโนมัติ ประเภทไฟล์อื่น ๆ ต้องเริ่มต้นด้วย #!something ถ้ามันควรจะเรียกใช้
ย้ายไฟล์ quickserv_windows_x64.exe ที่ดาวน์โหลดไปยังโฟลเดอร์โครงการ

ดับเบิลคลิก quickserv_windows_x64.exe ในโฟลเดอร์โครงการเพื่อเริ่มต้น QuickServ อนุญาตให้เข้าถึงผ่าน Windows Defender หากได้รับแจ้ง


ไปที่ http://127.0.0.1:42069 (หรือที่อยู่ที่แสดงโดย QuickServ) เพื่อเชื่อมต่อกับเว็บแอปพลิเคชันของคุณ ในตัวอย่างเพื่อเรียกใช้ test.py ไปที่ http://127.0.0.1:42069/test.py

ดาวน์โหลดเวอร์ชันที่เหมาะสมสำหรับคอมพิวเตอร์ของคุณ หากจำเป็นให้ตรวจสอบโปรเซสเซอร์ประเภทใดที่ Mac ของคุณมี คุณจะต้องคลายซิปไฟล์หลังจากที่คุณดาวน์โหลด
สร้างโฟลเดอร์โครงการและเพิ่มไฟล์ลงไป ตัวอย่างเช่นหากติดตั้ง Python ให้สร้างไฟล์ที่เรียกว่า test.py ในโฟลเดอร์โครงการที่มี:
#!python
# Put your code here. For example:
import random
print ( random . randint ( 0 , 420 ))
หากคุณกำลังสร้างไฟล์ด้วย textEdit คุณจะต้องเข้าสู่ Format > Make Plain Text เพื่อบันทึกไฟล์ในรูปแบบที่ถูกต้อง

ตั้งแต่ test.py เริ่มต้นด้วย #!something ที่ something test.py เป็นคำสั่งในการเรียกใช้งานไฟล์ QuickServ จะรู้ว่าจะเรียกใช้ หาก QuickServ ไม่เรียกใช้ไฟล์ของคุณตรวจสอบให้แน่ใจว่าได้เพิ่มสิ่งนี้ลงในจุดเริ่มต้น
บน Mac QuickServ ยังรู้ว่าจะเรียกใช้ไฟล์ที่รวบรวมโดยอัตโนมัติ ประเภทไฟล์อื่น ๆ ต้องเริ่มต้นด้วย #!something ถ้ามันควรจะเรียกใช้
ย้ายไฟล์ quickserv_macos_x64 หรือไฟล์ quickserv_macos_arm64 ไปยังโฟลเดอร์โครงการ
คลิกขวาที่ quickserv_macos_x64 หรือ quickserv_macos_arm64 ในโฟลเดอร์โครงการและเลือก "เปิด" จากนั้นกด "เปิด" ในกล่องโต้ตอบยืนยัน หลังจากเรียกใช้ด้วยวิธีนี้หนึ่งครั้งคุณจะสามารถเริ่มต้น QuickServ ได้เพียงแค่ดับเบิลคลิกไฟล์



ไปที่ http://127.0.0.1:42069 (หรือที่อยู่ที่แสดงโดย QuickServ) เพื่อเชื่อมต่อกับเว็บแอปพลิเคชันของคุณ ในตัวอย่างเพื่อเรียกใช้ test.py ไปที่ http://127.0.0.1:42069/test.py

มันง่ายที่สุดในการติดตั้งและเรียกใช้ผ่านบรรทัดคำสั่ง เปิดเทอร์มินัล
ป้อนคำสั่งต่อไปนี้ อาจจำเป็นต้องใช้รหัสผ่านสำหรับคำสั่งแรก
# 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 ไปที่ http://127.0.0.1:42069 (หรือที่อยู่ที่แสดงโดย QuickServ) เพื่อเชื่อมต่อกับเว็บแอปพลิเคชันของคุณ ตัวอย่างเช่นในการเรียกใช้ test.py ไปที่ http://127.0.0.1:42069/test.py
การคลิกเพื่อเรียกใช้ Executables ไม่มีพฤติกรรมที่สอดคล้องกันใน Linux distros ดังนั้นจึงง่ายที่สุดในการติดตั้งและเรียกใช้ผ่านบรรทัดคำสั่ง ขึ้นอยู่กับสถาปัตยกรรมของคอมพิวเตอร์ของคุณอาจจำเป็นต้องเปลี่ยนชื่อไฟล์ในตอนท้ายของ URL คำขอ HTTP curl ด้านล่าง
ดูตัวเลือกการดาวน์โหลดทั้งหมดในหน้าเผยแพร่
# 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 ไปที่ http://127.0.0.1:42069 (หรือที่อยู่ที่แสดงโดย QuickServ) เพื่อเชื่อมต่อกับเว็บแอปพลิเคชันของคุณ ตัวอย่างเช่นในการเรียกใช้ test.py ไปที่ http://127.0.0.1:42069/test.py
หรือใช้คำแนะนำด้านล่างเพื่อรวบรวมจากแหล่งที่มา
รวบรวมและติดตั้งจากแหล่งที่มาโดยใช้คำสั่งต่อไปนี้ จำเป็นต้องมีรุ่น GO มากกว่า 1.16 เนื่องจากการพึ่งพาระบบไฟล์ฝังตัว
go install github.com/jstrieb/quickserv@latestจากนั้นสร้างโฟลเดอร์โครงการของคุณเติมมันและเรียกใช้ 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เพื่อแสดงคุณสมบัติที่สำคัญของ QuickServ เราจะสร้างเว็บแอปพลิเคชันอย่างง่ายเพื่อทำการเพิ่มเติม รหัสจะไม่เป็นไปตามแนวทางปฏิบัติที่ดีที่สุด แต่จะแสดงให้เห็นว่าจำเป็นต้องใช้เพียงเล็กน้อยในการเริ่มต้นสร้างด้วย QuickServ
ก่อนอื่นเราสร้างสร้างโฟลเดอร์โครงการและลาก QuickServ Executable ลงในโฟลเดอร์เช่นเดียวกับในขั้นตอนการเริ่มต้น
ถัดไปภายในโฟลเดอร์เราบันทึกข้อความต่อไปนี้เป็น index.html :
< form action =" /calculate " >
< input name =" first " type =" number " > + < input name =" second " type =" number " > = ???
< br >
< button > Calculate </ button >
</ form > รหัสนี้ส่งสองตัวแปรไปยังหน้า /calculate ในเบราว์เซอร์ดูเหมือนว่า:

จากนั้นเราสร้างโฟลเดอร์ที่เรียกว่า calculate ภายในโฟลเดอร์โครงการ ภายในโฟลเดอร์ calculate เราบันทึกรหัสต่อไปนี้เป็น index.py index.whatever ที่บอกให้ QuickServ เรียกใช้ไฟล์นี้เมื่อผู้ใช้เยี่ยมชม http://website/calculate แทนที่จะต้องการให้พวกเขาไปที่ http://website/calculate/index.py
ให้ความสนใจเป็นพิเศษกับความคิดเห็นของรหัส พวกเขาเน้นคุณสมบัติ QuickServ ที่สำคัญจำนวนมาก
#!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 )ตอนนี้ดับเบิลคลิก QuickServ ในโฟลเดอร์โครงการของคุณแล้วลองใช้ในเบราว์เซอร์ของคุณ แค่ไหน!
ดูตัวอย่างที่เชื่อมโยงในส่วนถัดไปสำหรับการสาธิต QuickServ เพิ่มเติม อ่านรายละเอียดเพิ่มเติมในส่วนวิธีการทำงานและในรหัสเอง ส่วนขั้นสูงมีข้อมูลเพิ่มเติมเกี่ยวกับสภาพแวดล้อมที่ QuickServ ตั้งค่าสำหรับการดำเนินการที่ทำงาน
ตัวอย่างทั้งหมดอยู่ในโฟลเดอร์ examples ซึ่งเป็น submodule git ที่เชื่อมต่อกับ repo jstrieb/quickserv-repo ไปที่ repo นั้นสำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีเรียกใช้ตัวอย่าง
ไฮไลท์บางอย่าง:
| สรุป | ภาษา | หน้าต่าง | Mac | ลินเวกซ์ |
|---|---|---|---|---|
| youtube ถึง gif | เปลือก | |||
| สร้างตัวกรองบาน | C | |||
| รายการภาพยนตร์ที่ซิงโครไนซ์ | ตัวพิมพ์ใหญ่ | |||
| ล่าม Brainfuck | แอสเซมบลี x86-64 | |||
| การซูม Mandelbrot | เปลือก | |||
| แผงควบคุม cryptocurrency | ไป | |||
| เครื่องมือ PDF | งูหลาม | |||
| Tassetet markdown เป็น PDF | ML มาตรฐาน |
รหัส QuickServ ทั้งหมดอาศัยอยู่ใน quickserv.go ไฟล์ที่มีความสามารถดีนี้มีความยาวประมาณ 700 บรรทัดและควรใช้โปรแกรมเมอร์ที่มีประสบการณ์โดยไม่มีความคุ้นเคย Golang เป็นเวลาหนึ่งชั่วโมงในการอ่าน
QuickServ มีสองส่วนหลัก ครั้งแรกคือขั้นตอนการเริ่มต้นทำงานอย่างแน่นอนเมื่อเริ่มต้น อย่างที่สองคือฟังก์ชั่นตัวจัดการที่เรียกว่าทุกครั้งที่ผู้ใช้ทำคำขอ HTTP ไปยังเซิร์ฟเวอร์
เมื่อ QuickServ เริ่มต้นขึ้นจะตรวจสอบการตั้งค่าการกำหนดค่าบรรทัดคำสั่งเปิดไฟล์บันทึกหากมีการส่งผ่าน --logfile (มิฉะนั้นจะบันทึกไปยังเอาต์พุตมาตรฐาน) และเปลี่ยนไดเรกทอรีหากไดเรกทอรีการทำงานถูกส่งผ่าน --dir โปรดทราบว่าเส้นทางไฟล์บันทึกนั้นสัมพันธ์กับไดเรกทอรีการทำงานปัจจุบันไม่สัมพันธ์กับเส้นทางที่ผ่านด้วย --dir
ถัดไป QuickServ สแกนไดเรกทอรีการทำงานเพื่อให้ไฟล์เรียกใช้ มันพิมพ์ไฟล์ทั้งหมดที่จะดำเนินการ พฤติกรรมนี้มีประโยชน์สำหรับการพิจารณาว่า QuickServ รับรู้สคริปต์ว่าเป็นแบบปฏิบัติการได้หรือไม่ นอกจากนี้ยังพิมพ์ข้อมูลที่เป็นประโยชน์สำหรับผู้ใช้เช่นที่อยู่เว็บเพื่อเยี่ยมชมเพื่อเข้าถึงเซิร์ฟเวอร์และโฟลเดอร์ใดที่เซิร์ฟเวอร์กำลังทำงานอยู่รวมถึงวิธีหยุด
หากส่วนใดส่วนหนึ่งของการเริ่มต้นล้มเหลวจะมีการรายงานข้อผิดพลาด ในกรณีที่เกิดข้อผิดพลาดร้ายแรง QuickServ รอการป้อนข้อมูลของผู้ใช้ก่อนที่จะเลิก ด้วยวิธีนี้ผู้ใช้ที่ดับเบิลคลิกที่ปฏิบัติการได้ (ตรงข้ามกับการเริ่มต้นจากบรรทัดคำสั่ง) ไม่ได้มีหน้าต่างปรากฏขึ้นแล้วหายไปทันทีโดยกะพริบเร็วเกินไปสำหรับข้อผิดพลาดที่จะอ่าน
ข้อความแสดงข้อผิดพลาดจะถูกเขียนขึ้นอย่างมีจุดประสงค์โดยมีศัพท์แสงทางเทคนิคน้อยที่สุดเท่าที่จะเป็นไปได้แม้ว่าบางรายการจะหลีกเลี่ยงไม่ได้ สาเหตุที่เป็นไปได้สำหรับข้อผิดพลาดจะรวมอยู่ในข้อความแสดงข้อผิดพลาดเพื่อให้ผู้ใช้สามารถระบุและแก้ไขได้ง่ายขึ้น
เป็นขั้นตอนสุดท้ายในขั้นตอนการเริ่มต้น QuickServ เริ่มต้นเว็บเซิร์ฟเวอร์ด้วยฟังก์ชั่นตัวจัดการเดียวสำหรับคำขอทั้งหมด เซิร์ฟเวอร์ฟังพอร์ตเริ่มต้นของ 42069 หรือบนพอร์ตสุ่มหากผู้ใช้ระบุค่าสถานะคำสั่ง --random-port พอร์ตแบบสุ่มจะเป็นที่ต้องการหากผู้ใช้ต้องแสดงโครงการที่สร้างขึ้นด้วย QuickServ ให้กับใครบางคนที่ไม่มีอารมณ์ขัน
เมื่อผู้ใช้เข้าชมเว็บเพจ QuickServ จัดการคำขอโดยเรียกใช้ฟังก์ชันตัวจัดการโลน
ก่อนอื่นฟังก์ชั่นนี้พยายามเปิดไฟล์ที่ผู้ใช้ร้องขอ หากไม่สามารถค้นหาหรือเปิดไฟล์ได้ก็พยายามที่จะให้บริการเวอร์ชันเริ่มต้นของไฟล์ ตัวอย่างเช่นมี favicon.ico เริ่มต้นที่ฝังตัวซึ่งได้รับการเสิร์ฟ หากไม่มีไฟล์เริ่มต้นที่ตรงกับพา ธ มันจะช่วยให้ GO Fileserver ในตัวจัดการกับข้อผิดพลาดและตอบกลับด้วยรหัสข้อผิดพลาด 404
หากไฟล์ที่ผู้ใช้ร้องขอมีอยู่จะตรวจสอบว่าเป็นไดเรกทอรีหรือไม่ หากเป็นไดเรกทอรี QuickServ จะมองเข้าไปข้างในสำหรับไฟล์ชื่อ index.xxx โดยที่ xxx เป็นส่วนขยายไฟล์ใด ๆ หากพบไฟล์ดัชนีดัชนีจะถูกเสิร์ฟ (และอาจดำเนินการ) ราวกับว่าเป็นหน้าดั้งเดิมที่ร้องขอ มิฉะนั้นผู้ใช้จะต้องร้องขอไดเรกทอรีโดยไม่มีดัชนีเริ่มต้นดังนั้น QuickServ จึงตอบกลับด้วยรายชื่อไฟล์อื่น ๆ ในไดเรกทอรี
หากไฟล์ที่ผู้ใช้ร้องขอนั้นมีอยู่และไม่ใช่ไดเรกทอรี ( เช่น มันเป็นไฟล์ปกติ) QuickServ จะตรวจสอบว่าสามารถเรียกใช้งานได้หรือไม่ ถ้าเป็นเช่นนั้นจะเรียกใช้ไฟล์ที่พบ ถ้าไม่ส่งคืนเนื้อหาไฟล์ RAW ให้กับผู้ใช้ ในทั้งสองกรณี QuickServ จะคาดเดาสิ่งที่ fileType (และดังนั้น mimetype ใด) ที่จะใช้สำหรับการตอบกลับ
เทคนิคในการพิจารณาว่าไฟล์สามารถเรียกใช้งานได้หรือไม่นั้นขึ้นอยู่กับระบบปฏิบัติการรันไทม์ บน Windows ไฟล์ใด ๆ ที่มีส่วนขยาย .bat หรือ .exe ถือว่าสามารถเรียกใช้งานได้ ในระบบที่ไม่ใช่ Windows ไฟล์ใด ๆ ที่มีชุดบิตสิทธิ์การใช้งานได้นั้นถือว่าสามารถเรียกใช้งานได้ ในทุกระบบไฟล์สามารถเรียกใช้งานได้หากมี pseudo-shebang ที่ถูกต้องที่จุดเริ่มต้น Shebang ต้องอยู่ในบรรทัดแรกต้องเริ่มต้นด้วย #! และต้องเป็นคำสั่งที่ถูกต้อง ตัวอย่างเช่นทั้งสองอย่างต่อไปนี้เป็นที่ยอมรับโดยสมมติว่า python3 ได้รับการติดตั้งและบน PATH :
#!/usr/bin/python3#!python3 ในการเรียกใช้ไฟล์ QuickServ เรียกใช้ไฟล์เอง (ถ้าเป็น .exe หรือมีชุดบิตที่เรียกใช้งานได้) หรือผ่านเส้นทางของไฟล์เป็นอาร์กิวเมนต์แรกไปยังการเรียกใช้งานที่แสดงใน Shebang เนื้อหาคำขอจะถูกส่งผ่านไปยังโปรแกรมบนอินพุตมาตรฐานและทุกสิ่งที่พิมพ์โดยโปรแกรมบนเอาต์พุตมาตรฐานจะใช้เป็นตัวตอบสนอง โปรแกรมที่ดำเนินการไม่รับผิดชอบในการเขียน - หรือสามารถเขียนได้ - ส่วนหัวการตอบกลับ HTTP
ตัวแปรรูปแบบ HTTP ที่แยกวิเคราะห์ทั้งหมด (หาก Content-Type คือ x-www-form-urlencoded ) จะถูกส่งผ่านเป็นอาร์กิวเมนต์บรรทัดคำสั่งเมื่อโปรแกรมถูกเรียกใช้งาน ด้วยวิธีนี้ผู้ใช้ไม่จำเป็นต้องแยกวิเคราะห์ตัวแปรด้วยตนเอง
ไม่ว่าโปรแกรมที่ดำเนินการจะพิมพ์ผิดข้อผิดพลาดมาตรฐานจะถูกบันทึกโดย QuickServ ซึ่งหมายความว่าจะได้รับการพิมพ์ในหน้าต่างคอนโซลโดยค่าเริ่มต้น สิ่งนี้มีประโยชน์สำหรับการดีบัก หากโปรแกรมสิ้นสุดลงด้วยรหัสออกที่ไม่ใช่ศูนย์ QuickServ ตอบกลับด้วยข้อผิดพลาดเซิร์ฟเวอร์ภายใน 500 มิฉะนั้นจะกลับมาด้วย 200
หากคำขอเป็นคำขอโพสต์ที่เข้ารหัส URL พร้อมข้อมูลแบบฟอร์ม, quickServ url-decodes อักขระทั้งหมดยกเว้นสามสัญลักษณ์: % , & , และ = ผู้ใช้รับผิดชอบในการแทนที่สิ่งเหล่านี้ โปรดทราบว่าเป็นสิ่งสำคัญที่จะต้องใช้ URL-Decode % สุดท้ายในโปรแกรมที่ประมวลผลข้อมูลฟอร์ม
อย่าเรียกใช้ QuickServ บนอินเทอร์เน็ตสาธารณะ รันบนเครือข่ายส่วนตัวเท่านั้น
QuickServ ไม่ได้ออกแบบมาสำหรับการใช้งานการผลิต มันไม่ได้ถูกสร้างขึ้นให้เร็วหรือปลอดภัย การใช้ QuickServ ในการผลิตทำให้ผู้ใช้และตัวคุณเองตกอยู่ในความเสี่ยงโปรดอย่าทำ
QuickServ ช่วยให้ผู้คนสร้างสิ่งที่ไม่ปลอดภัยอย่างอันตราย มันไม่ได้ฆ่าเชื้ออินพุตหรือเอาต์พุตใด ๆ มันใช้กระบวนการหนึ่งต่อคำขอและมีความอ่อนไหวต่อการปฏิเสธการโจมตีบริการ รูปแบบความปลอดภัยของมันสันนิษฐานว่าผู้ใช้เว็บมีความน่าเชื่อถือ ลักษณะเหล่านี้ทำให้ต้นแบบง่ายขึ้น แต่ไม่ปลอดภัยบนอินเทอร์เน็ตสาธารณะ
เพื่อยับยั้งการใช้ QuickServ ในการผลิตมันทำงานบนพอร์ต 42069 หวังว่าจะทำให้ทุกคนคิดสองครั้งก่อนที่จะเข้าสู่พร็อกซีย้อนกลับหรือการกำหนดค่าพอร์ตไปข้างหน้า สำหรับการสาธิตแบบมืออาชีพมากขึ้นธงบรรทัดคำสั่ง --random-port จะใช้พอร์ตแบบสุ่มแทนที่จะกำหนดเวลารันไทม์
QuickServ คล้ายกับโปรโตคอล CGI โบราณ มีเหตุผลที่ชัดเจนและเป็นที่ยอมรับมากมายว่า CGI นั้นไม่ดีในการผลิตและพวกเขาทั้งหมดใช้กับ QuickServ ในการผลิต
QuickServ มีตัวเลือกขั้นสูงที่กำหนดค่าผ่านธงบรรทัดคำสั่ง การเปลี่ยนแปลงเหล่านี้อย่างไรและสถานที่ที่ QuickServ ทำงานรวมถึงที่ที่มันบันทึกเอาท์พุท
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.
ในการเลียนแบบ CGI ส่วนหัว HTTP จะถูกส่งผ่านไปยังโปรแกรมที่ดำเนินการเป็นตัวแปรสภาพแวดล้อม ส่วนหัวที่เรียกว่า Header-Name จะถูกตั้งค่าเป็นตัวแปรสภาพแวดล้อม HTTP_HEADER_NAME
นอกจากนี้ยังมีตัวแปร REQUEST_TYPE ที่ระบุว่าคำขอได้ GET POST ฯลฯ
คำขอ HTTP ที่มีร่างกายส่งผ่านร่างกายไปยังโปรแกรมที่ดำเนินการบนอินพุตมาตรฐาน ในกรณีส่วนใหญ่ร่างกายคำขอจะผ่านคำต่อคำ นี่ไม่ใช่กรณีของแบบฟอร์ม HTML
ข้อมูลรูปแบบ HTML สามารถอ่านได้จากอาร์กิวเมนต์บรรทัดคำสั่งเช่นเดียวกับในการสอนหรือแยกวิเคราะห์จากอินพุตมาตรฐาน ตัวแปรใช้แบบฟอร์ม
name=value&othername=othervalue
ตัวอย่างการเพิ่มอย่างง่ายจากการสอนสามารถเขียนใหม่เพื่อแยกวิเคราะห์ค่าฟอร์ม HTTP จากอินพุตมาตรฐานแทนจากอาร์กิวเมนต์บรรทัดคำสั่ง
#!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 )โครงการนี้ได้รับการพัฒนาและบำรุงรักษาอย่างแข็งขัน หากไม่มีการกระทำเมื่อเร็ว ๆ นี้หมายความว่าทุกอย่างทำงานได้อย่างราบรื่น!
โปรดเปิดปัญหาเกี่ยวกับข้อบกพร่องคำแนะนำหรือคำถามใด ๆ โดยเฉพาะอย่างยิ่งรวมถึงการอภิปรายเกี่ยวกับวิธีการสร้างข้อความแสดงข้อผิดพลาดให้ชัดเจนที่สุดเท่าที่จะเป็นไปได้และวิธีการตั้งค่าเริ่มต้นที่ใช้กับผู้ใช้ให้มากที่สุดเท่าที่จะทำได้
การร้องขอแบบดึงโดยไม่ต้องมีการสนทนาก่อนหน้านี้จะถูกเพิกเฉย - อย่าเสียเวลาเขียนรหัสก่อนที่จะยืนยันว่าจะถูกรวมเข้าด้วยกันในฐานะนักพัฒนาที่ยุ่งและโดดเดี่ยวมันง่ายกว่าที่จะตอบสนองเมื่อการบริจาครหัสทั้งหมดมีบริบท
หากคุณทำโพสต์บล็อกวิดีโอการสอนโครงการ Hackathon หรือสิ่งอื่นใดโดยใช้ QuickServ โปรดเปิดปัญหาหรือส่งข้อความถึงฉันในแบบฟอร์มการติดต่อของฉันเพื่อที่ฉันจะได้เชื่อมโยงกลับไป!
มีหลายวิธีในการสนับสนุนโครงการ:
สิ่งเหล่านี้กระตุ้นให้ฉันแบ่งปันสิ่งที่ฉันสร้างและพวกเขาให้การตรวจสอบว่างานของฉันได้รับการชื่นชม! พวกเขายังช่วยฉันปรับปรุงโครงการ ขอบคุณล่วงหน้า!
หากคุณยืนกรานที่จะใช้จ่ายเงินเพื่อแสดงการสนับสนุนของคุณฉันขอแนะนำให้คุณบริจาคเงินให้กับหนึ่งในองค์กรต่อไปนี้แทน ด้วยการสนับสนุนเสรีภาพทางอินเทอร์เน็ตองค์กรเช่นนี้ช่วยให้ฉันรู้สึกสะดวกสบายในการเปิดงานต่อสาธารณะบนเว็บ
โครงการนี้จะเป็นไปไม่ได้หากไม่ได้รับความช่วยเหลือ: