เป้าหมายหลักของห้องปฏิบัติการนี้คือการสร้างเว็บเซิร์ฟเวอร์ CGI HTTP ตาม RFC/1945 เซิร์ฟเวอร์ถูกสร้างขึ้นในการเขียนโปรแกรมซ็อกเก็ตและสิ่งที่เป็นนามธรรมเรียนรู้ใน Inet 4021 - การเขียนโปรแกรมเครือข่าย
นอกจากนี้เซิร์ฟเวอร์ควรมีประสิทธิภาพเกี่ยวกับการจัดสรรความเร็วและการจัดสรรทรัพยากร
เซิร์ฟเวอร์ของเราใช้ CGI เป็นนามธรรมเพื่อรับอินพุตจากแบบฟอร์ม HTML จากนั้นส่งคืนเอาต์พุต ลูกค้าไม่รู้ว่า CGI อยู่ที่นั่น แต่มีความสุขเมื่อได้รับการตอบกลับไม่ว่าใครจะมาจากใคร
สำหรับอัลกอริทึมของเราเซิร์ฟเวอร์จะใช้อินพุตจากนั้นแยกวิเคราะห์เพื่อค้นหาว่าเป็นคำขอโพสต์/รับจากนั้นส่งข้อมูลไปยัง CGI สำหรับการประมวลผล
/CGI -BIN - นี่มีไฟล์ CGI ของเราที่ใช้ในการจัดการโพสต์และรับคำขอ (ที่เว็บเซิร์ฟเวอร์ที่เรียกใช้งานได้อยู่)
เมื่อไคลเอนต์ส่งคำขอโพสต์/รับไปยังเซิร์ฟเวอร์เซิร์ฟเวอร์จะเรียก CGI ที่เรียกใช้งานเพื่อจัดการคำขอ การใช้งานหลักสำหรับสิ่งนี้คือการอนุญาตให้ปฏิบัติการที่จะจัดการงานได้ในขณะที่เซิร์ฟเวอร์เพิ่งผ่านไปแล้วสามารถจัดการคำขอใหม่ได้ นี่คือการใช้การจัดสรรทรัพยากรที่ดีและช่วยสนับสนุนผู้ใช้มากขึ้นพร้อมกัน
/conf - โฟลเดอร์ config มีไฟล์ httpd.conf ซึ่งเป็นไฟล์กำหนดค่าสำหรับเซิร์ฟเวอร์ มันระบุจำนวนผู้ใช้ที่เกิดขึ้นพร้อมกันที่ตั้งเนื้อหารูทตำแหน่งดัชนีและพอร์ตที่จะเรียกใช้
/สารบัญ - . html, .gif, .jpg (เนื้อหา) ทั้งหมดอยู่ในโฟลเดอร์นี้ เมื่อได้รับ index.html จะส่งคำขอสำหรับไฟล์เหล่านี้ทั้งหมด ไฟล์เหล่านี้ใช้เพื่อสร้างหน้าเว็บที่แสดงบนเบราว์เซอร์ของไคลเอนต์
/บันทึก - โฟลเดอร์นี้มีไฟล์บันทึกสำหรับคำสั่งการเข้าถึงทั้งหมดและข้อผิดพลาด มาตรฐานออกจะไปที่บันทึกการเข้าถึงและบันทึกข้อผิดพลาดอื่น ๆ ทั้งหมดไปที่บันทึกข้อผิดพลาด
/SRC - นี่คือที่ที่ซอร์สโค้ดทั้งหมดของเราอาศัยอยู่ นี่คือโฟลเดอร์ที่เซิร์ฟเวอร์อยู่
index.html - ดัชนีไดเรกทอรีเว็บเซิร์ฟเวอร์
ในการรวบรวม Get และ Post CGI ให้เปลี่ยนเป็นไดเรกทอรี /src รวบรวมไฟล์ C สามารถทำได้โดย
gcc POST.c -o ../cgi-bin/POST.cgi && gcc GET.c -o ../cgi-bin/GET.cgi
ในการทดสอบเซิร์ฟเวอร์ไปที่ไดเรกทอรี /src รวบรวมไฟล์ C และเรียกใช้ สามารถทำได้โดย:
gcc server.c && ./a.out
เซิร์ฟเวอร์จะเรียกใช้ตามเนื้อหาที่ระบุในไฟล์กำหนดค่า หากไม่เปลี่ยนแปลงเทอร์มินัลจะกลับมา:
Number of simultaneous connections: 10
Root directory (to start looking for HTML files): ../contents/
Index filename (if none given): /index.html
Port to run on server: 8080
ตอนนี้ใช้เว็บเบราว์เซอร์ป้อน "http: // localhost: 8080/" สิ่งนี้จะโหลดไฟล์ index.html และแสดงหน้าเว็บ นอกจากนี้คุณสามารถโหลดไฟล์บางไฟล์ได้โดยทำ "http: // localhost: 8080/filename" หากไฟล์มีอยู่มันจะปรากฏขึ้น (แสดงด้านล่าง) มิฉะนั้นจะมี Error 404 - File Not Found ข้อความ

ก่อนที่เราจะเริ่มต้นเป็นสิ่งสำคัญที่จะต้องทราบว่าเมื่อเซิร์ฟเวอร์ส่งข้อความไปยังไคลเอนต์เว็บเบราว์เซอร์มันจะถูกนำหน้าด้วยส่วนหัว HTTP ตัวอย่างนี้คือ:
HTTP/1.0 404 Not Found
Content-Type: text/plain
Content-Length: 25
Connection: close
Last-Modified: Mon, 23 Mar 2020 02:49:28 GMT
Expires: Sun, 17 Jan 2038 19:14:07 GMT
Date: Mon, 23 Mar 2020 04:49:28 GMT
HTTP 404 - File not found
นี่คือการส่งข้อผิดพลาดกลับไคลเอนต์ HTTP เนื่องจากไม่พบไฟล์ที่ร้องขอ แบบฟอร์มอื่นใช้ "200 OK", "500 ข้อผิดพลาดเซิร์ฟเวอร์ภายใน" และ "501 ไม่ได้ใช้งาน" แทนที่จะเป็น "404 ไม่พบ" แต่เป็นอย่างอื่นถือรูปแบบเดียวกัน คุณแก้ไขบรรทัดที่สองตามเนื้อหาที่คุณส่ง จากนั้นคุณสามารถส่งข้อมูลหลังจากสองบรรทัดใหม่
เมื่อลูกค้าร้องขอไฟล์เซิร์ฟเวอร์จะได้รับคำขอ GET แต่ละคำขออาจมีการโทรซ้ำหลายครั้งไปยังเซิร์ฟเวอร์สำหรับไฟล์เพิ่มเติมเช่น index.html คำขอเรียกร้องให้รูปภาพอื่น ๆ จากนั้นเซิร์ฟเวอร์จะส่งคำขอไปยัง CGI (อินเทอร์เฟซเกตเวย์ทั่วไป) เป้าหมายของการใช้ CGI สำหรับการโต้ตอบเว็บแบบไดนามิกเช่นแบบฟอร์มโดยการเพิ่มแอปพลิเคชันแบ็กเอนด์ที่ใช้ข้อมูล (อินพุต) จากรูปแบบ HTML คำขออีกประเภทหนึ่งคือโพสต์ นี่คือเมื่อไคลเอนต์ส่งข้อมูลไปยังเซิร์ฟเวอร์ เราจะให้ตัวอย่างของแต่ละคน
ตัวอย่างโพสต์: หากคุณไปที่ "http: // localhost: 8080/form.htm" คุณสามารถส่งข้อความโพสต์ไปยังเซิร์ฟเวอร์ แบบฟอร์มจะได้รับการส่งไปและจัดการโดยเว็บเซิร์ฟเวอร์ CGI ที่ดำเนินการเป็นคำขอโพสต์ แบบฟอร์มตัวอย่างของเราใช้อินพุตสองคำส่งแบบฟอร์มและข้อมูลไปยัง CGI และ CGI ส่งแบบฟอร์มกลับและเนื้อหา (ซึ่งเป็นสตริงที่ต่อกัน) นี่คือตัวอย่างของวิธีที่ CGI จัดการคำขอโพสต์
รับตัวอย่าง: นี่คือเมื่อไคลเอนต์พยายามรับไฟล์จากเซิร์ฟเวอร์ สิ่งนี้เกิดขึ้นบ่อยครั้งโดยเฉพาะอย่างยิ่งเมื่อมีการร้องขอไฟล์ <dospol.htm> CGI พยายามค้นหาไฟล์หากไม่สามารถส่งข้อผิดพลาดที่ไม่พบ 404 ที่พบด้านบนไปยังไคลเอนต์
หากพบไฟล์แล้วเซิร์ฟเวอร์จะส่งคำขอกลับมาเช่น
HTTP/1.0 200 OK
Content-Type: image/gif
Content-Length: 1231
Cache-Control: no-cache
Connection: Keep-Alive
Last-Modified: Mon, 23 Mar 2020 02:49:28 GMT
Expires: Sun, 17 Jan 2038 19:14:07 GMT
Date: Mon, 23 Mar 2020 04:49:28 GMT
CONTENT
ข้อความชิ้นแรกคือส่วนหัว HTTP เนื้อหาจะถูกแทนที่ด้วยเนื้อหาของไฟล์ เบราว์เซอร์จะแสดงเนื้อหานี้ นั่นคือวิธีที่ CGI จัดการรับคำขอ
สมมติว่าไคลเอนต์เป็นผู้ใช้และผู้ดูแลระบบคือเซิร์ฟเวอร์ ...
ผู้ดูแลระบบ - วัตถุประสงค์ของโครงการนี้สำหรับผู้ดูแลระบบคือการดูวิธีจัดการโพสต์และรับคำขอในเว็บเซิร์ฟเวอร์ที่ใช้งานได้ การเขียนโปรแกรมเซิร์ฟเวอร์ยังช่วยให้เข้าใจวิธีการส่งส่วนหัว HTTP และสื่อสารกับหน้าเว็บรวมถึงการเรียกดูไฟล์และส่งไปยังหน้าเว็บ
ผู้ใช้ - วัตถุประสงค์ของโครงการนี้สำหรับผู้ใช้คือการเรียนรู้วิธีการนำทางเว็บเพจและข้อผิดพลาดบางอย่างหมายถึงเมื่อได้รับ ตัวอย่างเช่นหากพยายามโหลดไฟล์จากเซิร์ฟเวอร์ที่ไม่มีอยู่จะมีข้อผิดพลาดที่ไม่พบไฟล์ 404 ไฟล์