คำถามเบี้องต้น
หัวข้อนี้จะมีเฉพาะคำถามที่เป็นพื้นฐานของ
CGI
และการเขียนโปรแกรมสำหรับ
web
และคำถามและคำตอบที่ไม่ตรงกับหัวข้ออื่น
1.1 CGI คืออะไร?
CGI
ไม่ใช่ภาษา
ไม่ใช่โปรแกรม!!
มีหลายคนที่สับสนคิดว่า
CGI
คือโปรแกรมภาษา
Perl!
เมื่อกล่าวถึง
CGI
มีหลายคนที่คิดว่าคือโปรแกรมภาษา
Perl
และอีกหลายคนที่คิดว่าโปรแกรมภาษา
Perl คือ CGI ?!?
CGI
ไม่ใช่ภาษาโปรแกรม
CGI
เป็นโปรโตคอลที่ใช้ในการติดต่อระหว่าง
browser ตัว server
และตัวโปรแกรม
gateway (หรือที่เรียกกันว่า
CGI script)
ซึ่งอาจจะเขียนขึ้นด้วยภาษาอะไรก็ได้ที่สามารถติดต่อกับ
stdin, stdout และ
ตัวแปร environment
ของระบบได้
CGI (Common Gateway Interface)
เป็นการ interface
ระหว่าง server
และ
โปรแกรม 'gateway'
ภายใน server CGI
จะเป็นตัวกำหนดว่าข้อมูลจะส่งไปยัง
โปรแกรม gateway
ยังไง และ
ข้อมูลจะถูกส่งกลับมาโดยโปรแกรม
gateway อย่างไร
ภายใน server
และกลับไปยัง
browser
1.2
เมื่อไหร่ที่จะต้องใช้
CGI?
คำตอบค่อนข้างจะกว้าง
แต่คร่าวก็คือเมื่อต้องการที่จะทำให้เกิดการตอบสนองกับผู้มาเยี่ยมชมโฮมเพจ
เมื่อต้องการจะทำงานที่เกี่ยวกับฐานข้อมูล
หรือประมวลผลข้อมูล
นอกเสียจากการนำเสนอข้อมูลในรูปแบบของเวปเพจเพียงอย่างเดียว
1.3
จะใช้อะไรดีระหว่าง
CGI กับ Java?
โดยพื้นฐาน
CGI กับ Java
นั้นแตกต่างกัน
CGI
เป็นโปรโตคอลที่ทำงานบน
web server ส่วน Java
เป็นภาษาที่ใช้ในการเขียนโปรแกรมภาษาหนึ่ง
Java
ถูกออกแบบมาเพื่อเป็นภาษาสำหรับเขียน
network application
โปรแกรมภาษา
Java
จะทำงานบนเครื่อง
client
และสามารถติดต่อกับเครื่อง
server ได้
โปรแกรมภาษา
Java
สามารถทำงานได้บน
browsers
หลายๆอย่าง
(เช่น netscape) (โปรแกรมภาษา
Java
ที่ทำงานบน
browser เรียกว่า
Applet) ทั้ง
CGI และ Java
สามารถทำงานร่วมกันได้
เช่น ใช้ Java applet
เป็นตัวนำเสนอข้อมูลที่ได้จากการประมวลผลของ
CGI และใช้ CGI
เก็บข้อมูลที่ได้รับจากการทำงานของ
Java applet
1.4
จำเป็นไหมว่าจะต้องใช้ภาษา
Perl?
ไม่!
ในการเขียนโปรแกรมสำหรับ
CGI
คุณสามารถใช้ภาษาโปรแกรมได้หลายภาษา
Perl
เป็นภาษาที่ง่ายและมีคนนิยมใช้กันมาก
แต่ก็ยังมีภาษาอื่นๆอีกมากมายเช่น
C, C++, TCL, Basic
หรือแม้แต่
shell script
ก็สามารถใช้เขียนโปรแกรมสำหรับ
CGI ได้
1.5
แล้วจะใช้ภาษาอะไรดี?
จะเลือกใช้ภาษาอะไร
ขึ้นอยู่กับความสะดวกของคุณเอง
เลือกดูจากความยากง่ายในการทำความเข้าใจกับภาษานั้นๆ
และข้อดีข้อเสียของแต่ละภาษา
และที่สำคัญ!
เลือกภาษาที่
server
คุณสนับสนุน
ถ้าหากว่าเขียนเสร็จแล้วไม่สามารถใช้กับ
server
ได้ก็ไม่มีประโยชน์
1.6
จำเป็นไหมว่าจะต้องนำโปรแกรม
CGI ไปไว้ใน directory
ที่ชื่อ cgi-bin ?
ขึ้นอยู่กับ
server ที่คุณใช้
คำถามนี้ผู้ดูแลระบบของคุณจะตอบได้ดีที่สุด(ผู้ดูแลไม่รู้แล้วใครจะรู้?;)
1.7
จำเป็นไหมว่าจะต้องตั้งนามสกุลไฟล์เป็น
.pl หรือ .cgi ?
เหมือนกับคำถามข้อที่แล้ว
มันขึ้นอยู่กับ
server ที่คุณใช้
คำถามนี้ผู้ดูแลระบบของคุณจะตอบได้ดีที่สุด
ถ้าคุณเป็นผู้แลระบบเองก็ให้อ่านดูจากคู่มือการใช้งาน
จะทำยังไง..?
หัวข้อนี้จะมีลูกเล่นเล็กๆน้อยๆปนๆอยู่
กับพวกคำถามที่มีคำตอบว่า
"ไม่สามารถทำได้"
และเหตุผลที่ว่า
"ทำไมถึงไม่ได้"
2.1
สามารถจะเก็บข้อมูลเกี่ยวกับผู้ที่เข้ามาดูได้หรือไม่?
สำหรับข้อมูลว่าคนนั้นเป็นใครมาจากไหน
e-mail อะไร
บ้านอยู่ที่ไหน
ไม่สามารถที่จะตรวจสอบได้
*ยิ้ม*
เราจะทราบเฉพาะข้อมูลเล็กๆน้อยๆ
เช่น
ผู้ใช้ใช้โปรแกรม
browser
อะไรรุ่นไหน
(อาจจะทราบ OS
ที่ใช้ได้จากส่วนนี้ด้วยเช่นกัน)
ผู้ใช้มี IP address
ขณะนั้นว่าอะไร
เป็นต้น
2.2
สามารถจะทราบ
e-mail
ของผู้ที่เข้ามาดูได้หรือไม่?
ไม่!
อย่างมากก็ทราบแค่ว่ามาจาก
IP
หรือเครื่องๆไหน
โดยดูจาก REMOTE_ADDR
และ REMOTE_HOST
ในตัวแปร environment
การใช้ "finger@"
เข้าช่วยเป็นเทคนิคที่ไม่มีประสิทธิภาพ
ผลลัพธ์ที่ได้ไม่ถูกต้อง
และยังทำให้โปรแกรม
CGI
ทำงานช้าอีกด้วย
ทางออกที่ดีและมีมารยาทที่สุดก็คือ
ทำแบบสอบถามให้ผู้ที่เข้าเยี่ยมชมกรอก
โดยปกติแล้ว
web browser
จะป้องกันในส่วนนี้ไว้ไม่ให้ข้อมูลอันเป็นส่วนตัวของผู้ใช้เช่น
e-mail
ถูกนำไปใช้โดยไม่ได้อนุญาต
ถ้าหากมีการตรวจสอบพบว่า
browser
ไหนที่มีช่องโหว่ทำให้ข้อมูลส่วนตัวเหล่านี้หลุดรอดออกไป
ก็จะถูกแจ้งไปยังผู้พัฒนาโปรแกรม
browser
เพื่อทำการแก้ไขในทันที
2.3
สามารถจะทราบชื่อหรือ
IP address
ของเครื่องของผู้ที่เข้ามาดูได้หรือไม่?
ได้..แต่ไม่เสมอไป
ถ้าเครื่องของผู้ที่เข้าชมมีชื่อ
ก็สามารถตรวจสอบได้จาก
REMOTE_HOST ในตัวแปร
environment แต่ทุก IP address
ไม่จำเป็นต้องมีชื่อเครื่อง(hostname)
กรณีเช่น IP address
ที่กำหนดให้กับผู้ใช้ที่โทรเข้ามาใช้งาน
ISP
ซึ่งมีผู้ใช้จำนวนมากและมี
IP address หลายชุด
บาง ISP
อาจจะไม่ได้กำหนดชื่อเครื่องไว้ทุก
IP address โดยปกติ web
server
จะไม่ทำการตรวจสอบชื่อเครื่องที่เข้ามาขอใช้บริการ
ถ้าไม่มีการบอกชื่อเครื่องมาก็จะ
IP address
ในการติดต่อ
ไม่จำเป็นจะต้องตรวจสอบชื่อเครื่อง
ในกรณีนี้คุณสามารเขียนโปรแกรมเฉพาะสำหรับตรวจสอบชื่อเครื่องได้เอง
แต่เป็นความยุ่งยากและไม่จำเป็นเสียเวลาโดยใช่เหตุ..
ที่บอกว่าเสียเวลาโดยใช่เหตุก็เพราะในบางครั้งผู้ที่เข้ามาเยี่ยมชมใช้
proxy
ดังนั้นชื่อเครื่องที่คุณจะได้ก็คือชื่อเครื่องของ
proxy server
ไม่ใช่ชื่อเครื่องของผู้เข้าชมแต่อย่างใด
2.4
สามารถที่จะทราบรายละเอียดของ
browser
และแสดงหน้าต่างๆกันขึ้นอยู่กับ
browser
ได้หรือไม่?
ได้..
สามารถตรวจสอบรายละเอียด(เบื้องต้น)ของ
browser ได้จาก HTTP_USER_AGENT
ในตัวแปร environment
โปรดระวังในเรื่องนี้ซักนิด
เพราะอาจจะทำให้เกิดผลลัพธ์ที่ผิดพลาดก็ได้
ทุก User Agent
ไม่จำเป็นว่าจะต้องเป็น
browser (อาจจะเป็น
spider bot ของ search engine ,
โปรแกรม offline browser
เช่น Teleport
หรืออื่นๆก็ได้)
เวปเพจของคุณอาจจะถูกเรียกดูด้วย
User Agent
ที่คุณไม่เคยได้ยินมาก่อน
จะทำยังไง?
ถ้าเกิดว่าเป็น
spider bot จาก search engine
มาเก็บข้อมูลจากเวปเพจของคุณหละ?
แน่ใจหรือว่า
search engine
จะเก็บข้อมูลที่ถูกต้องและดีที่สุดและตรงกับที่คุณต้องการนำเสนอไป?
คุณอาจจะพลาดโอกาสที่จะมีคนค้นพบเวปเพจหน้านั้นๆของคุณจาก
search engine
นั้นๆไปก็ได้?
ทางออกที่ดี,
ง่าย
และสะดวกที่สุดก็คือเขียนเวปเพจให้ได้มาตรฐานที่สามารถดูได้จาก
browser
ทุกๆโปรแกรม
2.5
สามารถที่จะทราบได้หรือไม่ว่าผู้เยี่ยมชมเข้ามาจากเพจไหนแล้วจะไปที่เพจไหนต่อไป?
ได้..
โดยตรวจสอบจาก
HTTP_REFERER ในตัวแปร
environment
แต่บางครั้งอาจจะไม่ได้กำหนดไว้ส่วนถ้าจะเช็คว่าผู้เยี่ยมชมจะไปที่เพจไหนต่อนั้น
ตรวจสอบโดยตรงไม่ได้
ต้องเขียนโปรแกรม
CGI
เพื่อทำการ
redirect
ผู้เยี่ยมชมไปยังหน้าที่ผู้เยี่ยมชมต้องการ
และบันทึกไว้ว่าผู้เยี่ยมชมต้องการที่จะไปที่ใด
โดยให้ทุก link
ในเวปเพจของคุณชี้ไปยังโปรแกรม
CGI
โปรแกรมนั้น
2.6 สามารถ redirect
ผู้เยี่ยมชมไปยังหน้าอื่นหรือ
URL
อื่นได้หรือไม่?
ได้..
วิธีง่ายๆก็คือกำหนด
"Location:" ที่ header
ของผลลัพธ์ของโปรแกรม
CGI
2.8
สามารถเรียกโปรแกรม
CGI ให้ทำงาน
โดยไม่ต้องส่งผลลัพธ์ไปยัง
broswer หรือให้ browser
ไปยังหน้าอื่น?
ได้..
แต่ต้องใช้อย่างระมัดระวัง!
จะทำอย่างไรให้ผู้เข้าเยี่ยมชมทราบว่าการ
"submit"
ของเขาสำเร็จหรือไม่?
และเขาอาจจะกด
"submit"
ใหม่อีกเรื่อยๆ!
ทางออกที่ถูกต้องคือกำหนด
HTTP header
ให้ส่งค่า status
code 204
ตัวอย่างเช่น
#!/bin/sh
#
กระทำงานใดๆที่นี่
echo "HTTP/1.0 204 No Change"
echo
ข้อควรระวัง
วิธีนี้ไม่ได้ผลกับ
browser ทุกๆ browser
ทดสอบให้ดีก่อนจะใช้!
2.9
สามารถที่จะส่งผลลัพธ์ออกไปยัง
frame อื่นๆของ Netscape
ได้หรือไม่?
ได้
วิธีแรกที่ง่ายๆที่สุดก็คือ
ระบุ "target="
ไว้ใน link
ที่จะเรียกโปรแกรม
CGI ใช้งาน
อีกวิธีคือส่ง
"Window-target:" มากับ header
ของผลลัพธ์
หาอ่านรายละเอียดได้ที่
web site ของ Netscape (ไม่ทราบ
URL
ที่แน่นอนของข้อมูลนี้)
เนื้อหาส่วนถัดไป..
->
|