บางทีผู้อ่านอาจรู้สึกว่าโปรแกรม CGI มีความลึกลับ ในส่วนนี้ เราจะอธิบายขั้นตอนการเขียนโปรแกรมพื้นฐานของโปรแกรม CGI อ่านแล้วก็จะไม่มีเรื่องลึกลับอีกต่อไป
3. ปัญหาอื่นๆ เกี่ยวกับข้อกำหนด CGI:
บางทีผู้อ่านอาจรู้สึกว่าโปรแกรม CGI มีความลึกลับ ในส่วนนี้ เราจะอธิบายขั้นตอนการเขียนโปรแกรมพื้นฐานของโปรแกรม CGI อ่านแล้วก็จะไม่มีเรื่องลึกลับอีกต่อไป
ก่อนอื่น เมื่อทำงานเขียนโปรแกรมใดๆ ให้แบ่งงานใหญ่ออกเป็นงานเล็กๆ หลายๆ งาน และงานเล็กๆ แต่ละงานก็จะทำหน้าที่ที่เป็นอิสระต่อกัน หลายๆ คนลังเลที่จะเขียนโปรแกรม CGI ด้วยตัวเอง เนื่องจากพบว่าการเขียนโปรแกรม CGI นั้นยาก ที่จริงแล้ว หากคุณแบ่งโปรแกรม CGI ทั่วไปออกเป็นส่วนๆ ต่อไปนี้และแก้ไขทีละส่วน คุณจะไม่มีปัญหากับโปรแกรม CGI:
โดยทั่วไปแล้ว เมื่อเรียกใช้โปรแกรม CGI ในเบราว์เซอร์ เซิร์ฟเวอร์จะต้องค้นหาโปรแกรม CGI ก่อน โดยทั่วไปโปรแกรม CGI จะอยู่ในไดเร็กทอรีที่ระบุโดยเซิร์ฟเวอร์ ใน OmniHTTPD ของเราใน cgi-bin และ cgi-win virtual ไดเร็กทอรีจริงที่ระบุโดยไดเร็กทอรีคือไดเร็กทอรี c:httpdcgi-bin และ c:httpdcgi-win ตามลำดับ คุณสามารถแก้ไขไดเร็กทอรีจริงใน OmniHTTPD หรือเพิ่มไดเร็กทอรีเสมือน เช่น: ระบุไดเร็กทอรีเสมือน cgi-test เป็น c:my-cgi หากคุณมี CGI ชื่อ test1.cgi ในโปรแกรมไดเร็กทอรี c:my-cgi คุณสามารถเรียกมันได้ในเบราว์เซอร์ของคุณตามที่อยู่ http://localhost/cgi-test/test1.cgi
ภายใต้สถานการณ์ปกติ เซิร์ฟเวอร์จะค้นหาโปรแกรม CGI ที่เบราว์เซอร์ร้องขอ และสร้างกระบวนการของโปรแกรม CGI นี้ ด้วยวิธีนี้ เบราว์เซอร์และเซิร์ฟเวอร์จึงได้สร้างการเชื่อมต่อ เมื่อโปรแกรม CGI ทำงานเสร็จแล้ว กระบวนการนี้จะหายไปและการเชื่อมต่อจะขาดหายไป การดำเนินการทั้งหมดในรูปด้านบนจะเสร็จสิ้นภายในเวลาที่มีการสร้างการเชื่อมต่อ ดังนั้น งานที่เสร็จสิ้นโดยแต่ละโปรแกรม CGI ควรมีขนาดเล็กที่สุดเท่าที่จะเป็นไปได้ มิฉะนั้น จะต้องใช้เวลาและทรัพยากรของเซิร์ฟเวอร์และการรอคอยมาก เวลาของเบราว์เซอร์ไคลเอนต์ก็จะยาวมากเช่นกัน
ดังที่คุณเห็นในภาพด้านบน โดยทั่วไปโปรแกรม CGI จะถูกแบ่งออกเป็นสามส่วน: การป้อนข้อมูล การประมวลผลข้อมูล และการส่งออกข้อมูล บางครั้งจำเป็นต้องโต้ตอบกับฐานข้อมูลในส่วนการประมวลผลข้อมูล (นี่คือความพิเศษของ CGI เช่นกัน โปรแกรม) ในสามส่วนนี้ ข้อมูลอินพุตและเอาต์พุตข้อมูลมีข้อกำหนดที่เข้มงวด และการประมวลผลข้อมูลคือจุดที่คุณสามารถใช้จินตนาการได้ ต่อไป ผมจะเน้นไปที่ข้อกำหนดและข้อควรระวังสำหรับการป้อนข้อมูลและเอาท์พุทข้อมูล:
ก่อนหน้านี้ เราได้แสดงรายการตัวแปรสภาพแวดล้อมเกือบทั้งหมดที่ใช้โดยโปรแกรม CGI ส่วนหนึ่งที่เกี่ยวข้องอย่างใกล้ชิดกับอินพุตและเอาต์พุตของข้อมูล ด้านล่างนี้ เราแสดงรายการตัวแปรสภาพแวดล้อมที่ใช้บ่อยที่สุดตามหมวดหมู่:
ตัวแปรสภาพแวดล้อมที่เกี่ยวข้องกับเซิร์ฟเวอร์:
GATEWAY_INTERFACE
SERVER_NAME
เซิร์ฟเวอร์_พอร์ต
SERVER_โปรโตคอล
เซิร์ฟเวอร์_ซอฟต์แวร์
ตัวแปรสภาพแวดล้อมที่เกี่ยวข้องกับไคลเอ็นต์:
HTTP_ยอมรับ
HTTP_ACCEPT_ENCODING
HTTP_ACCEPT_LANGUAGE
HTTP_AUTHORIZATION
HTTP_CHARGE_TO
HTTP_FROM
HTTP_IF_MODIFIED_SINCE
HTTP_PRAGMA
HTTP_REFERER
HTTP_USER_AGENT
ตัวแปรสภาพแวดล้อมที่เกี่ยวข้องกับคำขอ:
AUTH_TYPE
เนื้อหา_ไฟล์
CONTENT_LENGTH
CONTENT_TYPE
เอาท์พุต_ไฟล์
PATH_INFO
PATH_แปลแล้ว
QUERY_STRING
รีโมท_ADDR
REMOTE_USER
คำขอ_LINE
คำขอ_วิธีการ
SCRIPT_NAME
เป็นมูลค่าการกล่าวขวัญที่นี่ว่า CONTENT_FILE และ OUTPUT_FILE บน Windows 3.1 และ DOS มีภาษาไม่มากนักที่สามารถอ่านและเขียนผ่านอินพุตและเอาท์พุตมาตรฐาน (STDIN และ STDOUT) ดังนั้นจึงใช้ตัวแปรทั้งสองนี้แทน สำหรับตัวแปรสภาพแวดล้อมอื่นๆ โปรดดูรายการโดยละเอียดก่อนหน้านี้
ตามที่กล่าวไว้ก่อนหน้านี้ วิธีการ GET ส่งข้อมูลผ่าน URL; วิธีการ POST ส่งข้อมูลผ่าน STDIN ไม่ว่าจะใช้วิธีการใดก็ตาม ข้อมูลจะถูกเข้ารหัสระหว่างการส่งข้อมูล อย่างไรก็ตาม เราไม่ต้องกังวลเกี่ยวกับการเข้ารหัสและถอดรหัส เนื่องจากภาษาการพัฒนาที่เราจะใช้สามารถทำงานนี้ให้เสร็จสิ้นได้โดยอัตโนมัติ: cgi-lib.pl ใน Perl, TWebModule ใน Delphi ฯลฯ
ข้อมูลส่วนหัวก็มีความสำคัญมากในการเขียนโปรแกรม CGI ข้อมูลส่วนหัวเป็นสัญญาณจากโปรแกรม CGI ก่อนส่งข้อมูลไปยังไคลเอนต์ ข้อมูลส่วนหัวมีสามประเภทหลัก:
ประเภทเนื้อหา //ส่ง HTML ไปยังเบราว์เซอร์
ตำแหน่ง // ส่ง URL ใหม่ไปยังเบราว์เซอร์
สถานะ //มักใช้เพื่อตรวจสอบข้อผิดพลาดเมื่อโปรแกรม CGI เกิดข้อผิดพลาด
Content-type คือประเภทของข้อมูลที่เบราว์เซอร์ประมวลผล ซึ่งส่วนใหญ่เป็นประเภท MIME วิธีการถูกกำหนดให้เป็นการรวมกันของประเภทและประเภทย่อย ประเภท MIME ที่ใช้กันทั่วไป ได้แก่ ข้อความ หลายส่วน ข้อความ แอปพลิเคชัน รูปภาพ เสียง และวิดีโอ
ตัวอย่างเช่น ก่อนที่โปรแกรม CGI จะส่งเอกสาร HTML ไปยังเบราว์เซอร์ ควรส่งข้อความ/html ก่อน เขียนเป็นภาษา Perl ดังนี้:
พิมพ์ "Content-type:text/html"
พิมพ์ "< h1> สวัสดีทุกคน! < /h1> "
ตำแหน่งทำให้เบราว์เซอร์เปลี่ยนเส้นทางไปยัง URL ใหม่ ตัวอย่างเช่น:
พิมพ์ "ที่ตั้ง:http://www.chinabyte.com"
โปรแกรม Perl นี้เปลี่ยนเส้นทางเบราว์เซอร์ไปที่หน้าแรกของ ChinaByte
สถานะระบุสถานะของโปรแกรม CGI และโดยปกติจะใช้เพื่อตรวจสอบข้อผิดพลาดเมื่อโปรแกรม CGI ล้มเหลว ตารางต่อไปนี้แสดงรายการรหัสสถานะที่ใช้กันทั่วไปและความหมาย:
คำอธิบายผลลัพธ์โค้ด
คำขอตกลง 200 รายการเป็นไปตามปกติ
202 ยอมรับ คำขอได้รับการยอมรับแล้วและกำลังดำเนินการอยู่
301 ย้ายแล้ว เอกสารถูกย้ายไปยังตำแหน่งใหม่
พบ 302 เอกสารไม่ได้อยู่ที่คำอธิบาย แต่อยู่ที่อื่นบนเซิร์ฟเวอร์
400 คำขอไม่ถูกต้อง ไวยากรณ์ของคำขอ HTTP ไม่ถูกต้อง
401 เอกสารที่ไม่ได้รับอนุญาตต้องมีสิทธิ์การเข้าถึง
403 Forbindden เซิร์ฟเวอร์ปฏิเสธการเข้าถึงเอกสาร
404 ไม่พบ เซิร์ฟเวอร์ไม่พบเอกสาร
ข้อผิดพลาดเซิร์ฟเวอร์ 500 มีข้อผิดพลาดร้ายแรงเกิดขึ้นในเซิร์ฟเวอร์
502 บริการโอเวอร์โหลด เซิร์ฟเวอร์ไม่ว่างและไม่สามารถดำเนินการตามคำขอได้
จบแค่นี้ หลังจากที่คุณมีความรู้พื้นฐานเกี่ยวกับ CGI แล้ว คุณก็สามารถเริ่มพัฒนาโปรแกรม CGI ทีละขั้นตอนโดยใช้ภาษาใดก็ได้ ฉันขอบอกคุณอีกครั้งว่าโปรแกรม CGI ไม่ใช่เรื่องลึกลับเป็นเพียงบทสนทนาในการสร้างเซิร์ฟเวอร์และงานบางประเภท