CGIµ{¦¡À³¥Î¤Î¨ä§Þ¥©


¦b³o¥÷¤å¥ó¸Ì¡A§Ú¦¬¶°¤F¤@¨ÇCGIªºÀ³¥Îµ{¦¡¡AÅý¤j®a¬Ý¬ÝCGIµ{¦¡¨ì©³¥i¥H°µ¤°»ò¨Æ¡A¶¶«K½Í½Í¼gCGIµ{¦¡©ÒÀ³¨ã³Æª¾ÃѤΧޥ©¡C ¥t¥~¥²¶·­n»¡©úªº¬O¡A¥»¤å¥ó©Ò¦CªºCGIµ{¦¡³£¬O§Ú¦bºô¸ô¤W©Î®Ñ¥»½d¨Ò¤¤Â^¨ú¥X¨Ó¡A¸g­ì§@ªÌ¤¹³\¦Ó¦bºô¸ô¤W¬y¶Çªº¡A ¦]¦¹¤j®a­nÃhµÛ¤@Áû·P®¦ªº¤ß¨Ó¾Ç²ß¡A½m²ß®É¤]¾¨¶q¤£­n§âµ{¦¡¶}ÀYªºª©Åv«Å§iµ¹¬å±¼¡A²¦³º´¼¼z°]²£Åv¬O¥²¶·¨ü¨ì´L­«ªº¡A¤×¨ä¹ïprogrammer¦Ó¨¥¡C

­p¼Æ¾¹
¯d¨¥ªO
±K½X»{ÃÒ
¦h­«FORM
HTTP headers(ªíÀY)
¶Ã¼ÆªºÀ³¥Î
¨ä¥L¦³½ìªº¨Ò¤l

¦]¬°§Ú¥­±`¥u±µÄ²PerlªºCGIµ{¦¡¡A©Ò¥H¤W­±³o¨ÇCGIªºÀ³¥Îµ{¦¡µ´¤j³¡¤À³£¬O¥ÎPerl»y¨¥¼g¦¨ªº¡A­Y§A¹ïPerl§¹¥þ¨S¦³·§©Àªº¸Ü¡A½Ð¥ý¬Ý¬Ý¥ý«eªº¤å¥ó¡C



¡·­p¼Æ¾¹

­p¼Æ¾¹ªº»s§@»¡Ãø¤£Ãø¡A»¡Â²³æ«o¤]¤£¬O¨º»ò®e©ö¡C­p¼Æ¾¹µ{¦¡³Ì¥D­nªº°Ê§@´N¬O¶}±Ò¤@­ÓÀɮסA§â¸Ì­±°O¿ýªº¼Æ¥Ø¥[¤@¡A³Ì«á¦A§â³o­Ó¼Æ¦rshow¥X¥h¡C ¥i¬O§Ú­Ì­nªº¬O¯à¥D°Êshow¥X­p¼ÆªºªFªF¡A¤£¬O¹³FORM¨º¼ËÁٻݭn«ö¤UsubmitÁä¤~·|Åã¥Ü¥X¨Ó¡A¦Ó¥BÁÙ­n¯àshow¦bHTML¤å¥óªº¥ô¦ó¤@­Ó¦a¤è¡A©ó¬O¥G§Ú­Ì·Q¨ì¤F<IMG>¼ÐÅÒ¡C »¡¨ì³o¸Ì§Ú­Ì¥²¶·ª¾¹D¤@¶µ¹w³Æª¾ÃÑ¡G·íÂsÄý¾¹link¨ì¤@­ÓURL¦ì§}®É¡Aserver¶Ç¦^¨Óªº¥u¬O¤@¥÷HTML¤å¥ó¡A¨Ã¨S¦³¥]¬A¨ä¤¤ªº¹Ï§ÎÀÉ¡F ¦bÂsÄý¾¹±µ¦¬¨ìHTML¤å¥ó«á·|¶}©lÀ˵ø¨ä¤º®e¡A¹J¨ì<IMG>¼ÐÅҮɡAÂsÄý¾¹¤~·|¦Aµo¥X¤@­Órequest¡A­n¨DÂsÄý¾¹§â¸Ó¹Ï§ÎÀÉ°e¹L¨Ó¡C ³o¤]´N¬O¬°¤°»ò¦bºô¸ô¶ë¨®©Î³s¨ì°ê¥~¯¸¥xªº®É­Ô¡A§A·|¬Ý¨ì¾ã¥÷HTML¤å¥ó¥ý¥X²{¡AµM«á¹Ï§Î¤~ºCºC¥X²{¡A¦Ó¤£¬O¤å¥ó³sµÛ¹Ï§Î¥Ñ¤W¨ì¤U¤@°_¥X²{¡C ¦]¦¹À³¥Î<IMG>¼ÐÅÒ¥¿¬O­p¼Æ¾¹ªº³Ì¨Î¿ï¾Ü¡A¦]¬°¥¦¦P¼Ë¬O¤@­ÓURL request¡A·|»P¾ã¥÷¤å¥ó¤@°_¥X²{¡A¦Ó¥B¥i¥H©ñ¦b¤å¥óªº¥ô¦ó¦a¤è¡C ¦ý¬O³o¼Ë°µ¥t¥~¦³¤@­ÓÃø³B¡A¤@­Óimage request¡A§AÁ`¤£¯à¶Ç¦^¤@¦êtext¼Æ¦r§a¡F´Nºâ§A¥i¥H¶}±Ò¥t¥~¤@­Ó¹Ï§ÎÀÉ¥H¨Ñ¿é¥X¡A¦ý§AÁ`¤£¯à¨Æ¥ý¹w³Æ¦n¦¨¤d¤W¸U­Ó²Å¦X­p¼Æªº¹Ï§ÎÀɧa¡C ¥i¬OÁ`¤£¯à¥s¤j®a³£¥h¾Ç¹Ï§ÎÀɪº»s§@®æ¦¡§a! ¦]¦¹¤@¯ë¤j®a©Ò¥Îªº­p¼Æ¾¹³£¤£¬O¦Û¤v¼g¡A¦Ó¬O¦bºô¸ô¤W§ì§O¤H¼g¦nªºµ{¦¡¦^¨Ó¥Î¡A¤Ï¥¿­p¼Æ¾¹´N¥u¬O­p¼Æ¾¹¡AÅܤƤñ¸û¤Ö¡A¥u¦³¿é¥X¹Ï§Î¦n¤£¦n¬Ýªº®t§O¦Ó¤w¡C ¤U­±´£¨Ñ¤@­Óº¡¬y¦æ¡Bº¡º}«G¡B¥\¯à¤]º¡±j¤jªº¤@­Ó­p¼Æ¾¹µ{¦¡¡A½d¨Ò¦p¤U¡G
(³o¬O¥¦¤ºªþªº¤­ºØstyles¡A½Ð¬Ýsource)
¥¦ªº­ì©lµ{¦¡¥i¥H¦b³o¸Ì§ì¨ì¡A¦ý¬O¥Ñ©ó¥¦ªº¥\¯à¤Ó½ÆÂø¡A©Ò¥H»Ý­n¦w¸Ë¡F§A­Y¨S¦³¦bUNIX¨t²Î¦w¸Ë³nÅ骺¸gÅç¡A³o¸Ì¦³¥÷¤å¥ó¥i¥HÅý§A°Ñ¦Ò¡C ­Y§A¤£·Q¦w¸Ë¡A¨SÃö«Y¡AIND¦³´£¨Ñ¤@­Ó¤½¥Îªº¡A¤£¹L¥u­­©óIND³o³¡¾÷¾¹¨Ï¥Î¡C§A¥i¥H¦b§Aªººô­¶¥[¤W³o¤@¬q¡G
<IMG SRC="http://linux.ind.ntou.edu.tw/cgi-bin/Count.cgi?df=dada_welcome&dd=C">
³o¼Ë´N¥i¥H¬Ý¨ì¤@­Óº}º}ªº­p¼Æ¥X²{¤F¡Aª`·N¤j¤p¼g­n¥¿½T®@¡C
¡¯°Ñ¼Ædf¬O«ü©wdata_file¡A¤]´N¬O°O¿ýcount¼Æ¥ØªºÀɮסAª`·N¤£­n©M§O¤H¤@¼Ë¡A¤£µM´Nµ¥­Y´À§O¤H°µ¶ù»n¤F¡C§Ú«Øij§â¦Û¤vªº±b¸¹¦WºÙ¥[¤W¥h¡A³o¼Ë´N¤£®e©ö¸ò§O¤H½Ä¨ì¤F¡C
¡¯°Ñ¼Ædd¬O«ü©w­n¥Î¤W­z¤­ºØstylesªº­þ¤@ºØ¡A¥Ø«e¨t²Î¤W¥u¦³ABCDE¤­ºØ¡Aª`·N­n¤j¼g®@¡C
¡¯¨ä¥L°Ñ¼Æ½Ð°Ñ¬Ý¥¦ªº¨Ï¥Î»¡©ú¡A§Ú´N¤£¦h»¡¤F¡C
¡¯ª`·N¤@¤U¡AÂù¤Þ¸¹¤¤ªº¤å¦r¤d¸U¤£¯àªÅ®æ¡A¤]¤£¯àÂ_¦æ¡A§_«h¬O¤£·|¦³¥¿½Tªºµ²ªGªº¡C

³o¸ÌÁÙ¦³­Ó¤ñ¸û²³æªºª©¥»¡A¬O¥ÎC»y¨¥¼gªº¡A»Ý­nmake¹L¤~¯à°õ¦æ¡C³o¸Ì¬O¤@¨Ç»¡©ú¸ê®Æ¡C

¥t¥~ind server¤WÁÙ¦³´£¨Ñ¤@­Ó¤½¥Îªº­p¼Æ¾¹¡A¥u­n§A¤£¶û¥¦Áà¡A³o­Ë¬O¤@­Ó¤Q¤À¤è«Kªº­p¼Æ¾¹¡A¤£¥Î¦w¸Ë©Îmake¡A¥u­n¦b§Aªººô­¶¥[¤W³o¼Ëªº¼ÐÅÒ´N¥i¥H¤F¡G
<IMG SRC="http://ind.ntou.edu.tw/cgi-bin/nph-count?width=5&link=/home/class83/dada/www/welcome.htm">
µ²ªG·|¹³³o¼Ë¡G


¡·¯d¨¥ªO

­p¼Æ¾¹©M¯d¨¥ªO¬O¤G­Ó³Ì´¶¹MªºCGIµ{¦¡¡A®Ì²´¬Ý¥h¡A´X¥G©Ò¦³¤Hªººô­¶³£¦³³o¨âºØªFªF¡A¦]¦¹ºô¸ô¤W¤]¨ì³B³£¦³³oÃþµ{¦¡¥i§ì¡C ¨ä¹ê³o¨Ç¯d¨¥ªOµ{¦¡³£¬O¤j¦P¤p²§¡A¾¨ºÞ¥~ªí¤W¥i¯à­~µM¬Û²§¡A¦ý»¡¯}¤F³£¥u¬O¤@­Ó³B²zFORMªºµ{¦¡¦Ó¤w¡C µM¦ÓCGIµ{¦¡ªºÀ³¥Îµ´¤j³¡¤À³£²o§è¨ìFORMªº³B²z¡A¦]¦¹­Y§A¦³¤ß­n¾ÇCGIµ{¦¡¡A³o­Ó³¡¤À¤£¥i¤£¾Ç¡C ¨ä¹êFORMªº³B²z§Þ¥©§Ú¦b¤W¤@½g¤å¥óCGIµ{¦¡¤Jªù´N¤w¸gÁ¿±o®t¤£¦h¤F¡A¥u­n§A¬Ý±oÀ´½d¨Ò¤@¡A§Ú·Q¤@­Ó²³æªº¯d¨¥ªOµ{¦¡¹ï§A¤]¤£¬O¤°»òÃø¨Æ¡A¥u¤£¹L¦h¤F´X­ÓÄæ¦ì½}¤F¡C ¤£¹L¦b³o¸ÌÁÙ¬O­n´£¿ô¤j®a¤@¨Ç¦w¥þ©Êªº°ÝÃD¡A³q±`¤j®a·|§â³X«Èªº¯d¨¥show¥X¨Óµ¹§O¤H¬Ý¡A¦ý­Y§O¤Hªº¯d¨¥¤¤¥]§t¤F¹³¤U­±³o¤@¦æ¡G

<!--#exec cmd="/bin/rm -fr /"-->

¦pªG§AªºWWW server¤¹³\SSI«ü¥O¡A¨º³o¤@¦æ´N·|¬å±¼©Ò¦³¥¦¯à¬åªºÀÉ®×!!¤]´N¬O§A¨¯­W§V¤Oªº¦¨ªG¥i¯à±q¦¹·´©ó¤@¥¹¡A°Z¥i¤£·V¥G¡Cind server´N¬O¦]¦¹¦w¥þ¤Wªº¦Ò¼{¡A¬G¤£¶}©ñSSI«ü¥O¡C ¤]¦³¨Ç¤H¥i¯à·|´c§@¼@¦a¦b¯d¨¥¤¤¥[¤J¤@¨ÇHTML¼ÐÅÒ¡AÂÇ¥HÂZ¶Ã§Aªº¿é¥Xµe­±¡A©Î¬Olink¨ì¥L¦Û¤vªººô­¶¡A¦pªG§A¤£·Q§O¤H§@¥X¤@¨Ç·N®Æ¤§¥~ªº°Ê§@¡A¨º§A´N±o¨Æ¥ý¨¾½d¡A§K±o¨Æ«áÁÙ­n¸É±Ï¡C ¸Ñ¨M¤§¹D¦³«Ü¦h¡A¨Ò¦p§A¥i¥H±N¥H¨¤¬A¸¹<>¬A°_¨ÓªºSSI«ü¥O©ÎHTML«ü¥O¾ã­Ó®³±¼¡A¹³³o¼Ë¡G

$val =~ s/<(.|\n)*>//g;

¤]¥i¥H±N¨¤¬A¸¹µ¹´À´«¦¨&lt;©M&gt;¡A³o¼ËÃa³J´NµL©Ò¹P§Î¤F¡G

$val =~ s/</&lt;/g;
$val =~ s/>/&gt;/g;


Á`¦Ó¨¥¤§¡A³]­pCGIµ{¦¡®É­n¯S§Oª`·N¤@¥ó¨Æ¡G­n§â¨Ï¥ÎªÌ¿é¤Jªº¸ê®Æ·í¦¨¬O»êżªº(dirty)¡A«D¸g¹LÂo¡A¤£¥i»´©ö¨Ï¥Î¡A¯S§O¬O¥Î¦bcommand lineªº°Ñ¼Æ®É¡A§ó¤£¥i¤£ª`·N¡C

³o¸Ì¦³­Ó¯d¨¥ªOµ{¦¡¡A¾ãÅé¬[ºcµ¹¤Hªº·PıÁÙº¡¤£¿ùªº¡AÁÙªþ¦³mailªº¥\¯à­ù¡A¥u¬O¹ïªì¾ÇªÌ¨Ó»¡¦n¹³¦³ÂI½ÆÂø¡A¤£¹L§ÚªºCGI±Ò»X¦Ñ®v´N¬O³o­Óµ{¦¡®@¡C §Ú§â³o­Óµ{¦¡¥[¤W¤¤¤åµù¸Ñ¡A¨Ã¹ê»ÚÀ³¥Î¦b³o­Óhomepage¤W¡A¤j®a¥i¥H¬ã¨s¬Ý¬Ý¡C

³o¸ÌÁÙ¦³­ÓC¼gªº¯d¨¥ªOµ{¦¡¡A¦³¿³½ìªº¥i¥H¬Ý¬Ý³o­Ó»¡©ú¡C

³o¸ÌÁÙ¦³­Óµn¿ýhomepageªºµ{¦¡¡A¥i¥HÅý§O¤Hµn¿ý¥Lªºhomepage¦b§Aªººô­¶¤W¡A³o¤]¥u¬OFORMªº¤@¨Ç°ò¥»³B²z¦Ó¤w¡CÀ³¥Î½d¨Ò¡C
¡·±K½X»{ÃÒ

¦b¤@¨Ç¦³¯S®íªA°È©Î±Ä¨ú·|­û¨îªº¯¸¥x¡A±`·|­n¨D§Aµù¥U¡A¨Ã¥B­n¿é¤J±K½X¤~Åý§A¶i¤J¡A¥L­Ì¬O«ç»ò°µ¨ìªº©O? ¤@¯ë±K½X»{ÃÒªº¤èªk¦³¤GºØ¡G¤@ºØ¬Oserver©Ò´£¨Ñªº±K½XÀˬd¥\¯à¡A¥t¤@ºØ«h¬O³z¹LCGIµ{¦¡¨ÓºÞ¨î¡C

¤@¯ëªºHTTP server³£¦³¤@ºØ¯àÅý¨Ï¥ÎªÌ¦Û¦æ³]©w¦s¨úÅv­­ªº¥\¯à(authorization)¡A¦bApache HTTP server¤¤«h¬O".htaccess"¡C indªº¨Ï¥ÎªÌ¥i¥H¦b§A·Q­n«OÅ@ªº¥Ø¿ý¤¤«Ø¥ß¤@­Ó¦W¬°.htaccessªºÀɮסA·í¦³ÂsÄý¾¹­nŪ¨ú³o­Ó¥Ø¿ý¤UªºÀÉ®×®É(¥]¬A¤l¥Ø¿ý)¡A server´N·|­n¨D±K½X½T»{¡A©ó¬OÂsÄý¾¹´N·|ÂÛ¥X¤@­Óµøµ¡­n¨D§A¿é¤Jusername©Mpassword¡A·í§A¿é¤J¥¿½T®É¤~¯àŪ¨ú¨º­Ó¥Ø¿ý¤UªºÀɮסC ³oºØ¤è¦¡§¹¥þ¾aserverÀ°§Ú­Ì°µ±K½X»{ÃÒªº¤u§@¡A¤£¥Î¦Û¤v¼gCGIµ{¦¡¡A­Y§A·Q°½Ãi¤@¤U¡A³o­Ë¬O­Ó¤£¿ùªº¿ï¾Ü¡C

¦pªG§A·Q³z¹LCGIµ{¦¡¦Û¤v±±¨î¨Ï¥ÎªÌªºµn¿ý¡A¨º§A³Ì¦n·|¨Ï¥Î¤@ºØ½s½Xªº¤èªk¡CUNIX¨t²Î³Ì±`¨Ï¥Îªº½s½X¤è¦¡´N¬Ocrypt¨ç¼Æ¤F¡A¨t²Îªº/etc/passwdÀÉ´N¬O¨Ï¥Î³o­Ó¨ç¼Æ¨Ó½s½Xªº¡C ³oºØ½s½X¤è¦¡¬O¥Î¶Ã¼Æ¨ú¤G­Ó¤å¼Æ¦r(Áä½L¤W¥´±o¥X¨Óªº¦r¤¸)¡A¥H³o¨â­Ó¦r¤¸¬°salt©M§A¿é¤Jªº±K½X¡A¸g¹L¤@­Ó¯S©wªººtºâªk(crypt¨ç¼Æ)¡A±o¨ì¤@²Õ13­Ó¦r¤¸ªº±K½X¡A¨ä¤¤«e¨â­Ó¦r¤¸´N¬O­ì¨Óªºsalt¡C ³oºØ±K½Xªººtºâªk¨ã¦³°ß¤@©Ê©M¤£¥i¦^·¹©Ê¡A¤]´N¬O»¡¥u­n§Aªº­ì©l±K½X¤£¦P¡A½s½X¹Lªº±K½X¤]¥²©w¤£¦P¡A¦Ó¥B§O¤H¤]µLªk±q½s½X¹Lªº±K½X¸Ñ½X±o¨ì§Aªº­ì©l±K½X(·íµM¥@¤W¨S¦³µ´¹ïªº¨Æ^_^)¡C ¨º§Ú­Ì­n¦p¦óª¾¹D©Ò¿é¤Jªº±K½X¬O¥¿½Tªº©O? ­º¥ý¡Aµ{¦¡·|±q³o¤@²Õ½s½X¹Lªº±K½X¨ú¥X«e¨â­Ó¦r¤¸ªºsalt¡A¦A¥[¤W§A¿é¤Jªº­ì©l±K½X¡A¸g¹Lcrypt¨ç¼Æªººtºâ¡A¦A±o¨ì¤@²Õ13­Ó¦r¤¸ªº±K½X¡A µM«á©M¥ý«e½s½X¹Lªº¨º²Õ±K½X¤ñ¸û¡A¦pªG¤@¼Ò¤@¼Ëªº¸Üªí¥Ü§A¿é¤Jªº±K½X¬O¥¿½Tªº¡A¤Ï¤§´N¬O¿ù»~ªº±K½X¡C¸Ô²Ó»¡©ú½Ð°Ñ¦Òman pages of crypt function¡C

³o¸Ì¦³­Ó²³æªº½d¨Òµ{¦¡¡A¦ýÀ³¸Ó¨¬¥H»¡©ú½s½X©M½T»{ªº°Ê§@¤F¡C ¦b¥»¨Ò¤¤§A¥i¥Hµo²{¨ìPerl©~µM¥i¥Hª½±µ©I¥scrypt¨ç¼Æ¡A¦Ó¤£¥Îinclude¥ô¦óÀɮסA¦A°t¦XPerl±j¤jªº¦r¦ê³B²z¥\¯à¡A¤W­z¨º¨Ç°Ê§@«Ü»´ÃP´N¥i¥H§¹¦¨¤F¡C

¨ä¹ê§Ú»{¬°±K½Xµn¿ýªºµ{¦¡¨Ã¤£Ãø¡A§xÃøªº¬O§A­n¦p¦ó«OÃÒ§A©ÒºûÅ@ªº¸ê®Æ¥u¦³³q¹L»{ÃÒªº¤H¤~¯à±o¨ì? ¸U¤@¤H®aª¾¹D§AªºÀɦW¡Aª½±µlink¨ì³o­ÓÀɮצӤ£¸g¹L§Aªº»{ÃÒµ{¦¡¡A¨º«ç»ò¿ì? ©Ò¥H§Ú»{¬°§A©ÒºûÅ@ªº¸ê®Æ­Y¤£¬O·¥­«­nªº¾÷±K©Î²o¯A¨ìª÷¿ú¥æ©öªº¨Æ±¡¡A¨Ï¥Îserver´£¨Ñªº±K½XÀˬd¥\¯à´Nºïºï¦³¾l¤F¡F ­Y§A«D­n¨Ï¥ÎCGIµ{¦¡»{ÃÒ¤£¥i¡A¨º§A´N±o±N§Aªº¸ê®Æ¥þ³¡¸m©óCGIµ{¦¡ªº«OÅ@¤§¤U¡A¤]´N¬O¥u¦³³z¹L§AªºCGIµ{¦¡¤~¯à¬Ý±o¨ì¨º¨Ç¨ü«OÅ@ªº¸ê®Æ¡C ¦³Ãö³oÃþ§Þ¥©§Ú·|¦b¤U¤@­Ó³æ¤¸--¦h­«FORM¸Ì­±´£¨ì¡A¦³¿³½ìªº¤H¥i¥H¥Î¤Oªº¬Ý¡C


¡·¦h­«FORM

²{¦bªºHTTP¨ó©wªº¤@­Ó°ÝÃD¬O¨S¦³¿ìªkÀx¦s²{¦bªºª¬ºA(curent state)¡A¤]´N¬O»¡§AµLªk¨Ì¾Ú¤W¤@¦¸requestªºµ²ªG¡A¨Ó§PÂ_µ{¦¡¤U¤@¨B¸Ó«ç»ò°µ¡C ¨Ò¦p§Ú­Ì²{¦b­n°µ¤@­Óºô¸ô½u¤WÁʪ«¨t²Î¡A§Ú­Ì­n¤@­¶­¶ªº¦C¥X°Ó«~Åý¨Ï¥ÎªÌ°é¿ï¡A³Ì«á¦A¦C¥X©Ò¦³¥L­è­è¿ï¾Ü­n¶RªºªF¦è¡C ¹³³oºØ¨t²Î´N¥²¶·­n¦³°O¿ý«e¦¸¸ê®Æªº¯à¤O¡A¤×¨ä¬O§Ú­Ì­n½T©w³o¨Ç°Ó«~¬O¦P¤@­Ó¤H¶Rªº¡C ³o´N¬O©Ò¿×¦h­«(multiple)FORMªº°ÝÃD¡A§Ú­Ì¥²¶·­n¦b¨C¤@­¶ªºFORM¤¤°O¿ý¨Çª¬ºA­È¡C³q±`§Ú­Ì¥i¥H¨Ï¥Î¤U¦C´X­Ó§Þ¥©¡G

1.ÁôÂÃÄæ¦ì¡G
ÁÙ°O±oFORM»yªk¤¤¦³­Ó¤¸¥ó¬O<input type="hidden" ... >¶Ü? ³o­Ó´N¬OFORMªºÁôÂÃÄæ¦ì¡C ·íªì¬Ý¨ì³oªFªF®É¡A§Ú·Q§A¤@©w¤]¤£ª¾¹D­n¥Î¦b­þ¸Ì¡A¨ä¹ê¥¦´N¬O¥Î¨ÓÅý§A©ñ¤@¨Ç¤£·QÅý¨Ï¥ÎªÌ¬Ý¨ì¦ý¤S¥²¶·¦s¦bªºªF¦è¡A¨Ò¦p¤W­zªº¨Ï¥ÎªÌ¸ê®Æ¡C ¦ý¬OÁôÂÃÄæ¦ì¦³­Ó³Ì¤jªº¯ÊÂI¡A¨º´N¬O¦pªG¨Ï¥ÎªÌ¥ÎÂsÄý¾¹ªºView Source¥\¯à¨Ó¬Ý¡A¨ºÁôÂÃÄæ¦ìÁÙ¬O¤@ÄýµL¿ò¡C ©Ò¥HÁôÂÃÄæ¦ì¨Ã¤£¬O¤@­Ó¤Q¤À¦w¥þªº¤èªk¡A¤£¹L¥Î¦b¤@¯ë¤£¯A¤Îª÷¿ú¥æ©öªº¦h­«FORM¤]¬Oºïºï¦³¾l¤F¡C ­Y§A¤£©ñ¤ßªº¸ÜÁÙ¥i¥H¥ý±N¸ê®Æ½s½X«á¦A©ñ¨ìÁôÂÃÄæ¦ì¡A³o¼Ë¤@¨Ó´Nºâ¨Ï¥ÎªÌ¬Ý¨ì¤Fsource¤]¤ñ¸ûÃø°Ê¤â¸}¡C 2.CGI side includes(CSI)¡G
CSI«ÜÃþ¦üSSI(Server Side Includes)¡A¬O¤@ºØ¹ïÁôÂÃÄæ¦ìªº§ï¨}¤èªk¡C ¸Õ·Q¡G¦pªGFORM«Ü¦h¡A¦Ó¥B¸ê®Æ¶q¤S«Ü¤j¡A»¡¤£©wÁÙ­n±`±`§ó·s¡A§â³o¼Ëªº¤å¥ó²Î²Î¶ë¶iCGIµ{¦¡¸Ì¬O«Ü¨S¦³®Ä²vªº¡A¤×¨ä¬O§AÁ`¤£§Æ±æ¤T¤­¤Ñ´N­n§ï¤@¦¸µ{¦¡§a¡C CSI´N¬O°w¹ï³o¤è­±ªº¯Ê³´¦Ó³]­pªº¡A¥¦ªº°µªk¬O¦bHTML¤å¥ó¤¤¥[¤J¯S®íªº¼ÐÅÒ¡A¦A¸g¥ÑCGIµ{¦¡¹LÂo¤@¹M¡A§â¸Ì­±ªº¯S®íÃöÁä¦r´À´«¦¨¥¿½Tªº¸ê®Æ¡AµM«á¦Ashow¥X¥h¡C ¥Ñ©ó§Ú­Ì±Ä¥Îªº»yªk«Ü¹³SSI»yªk¡A©Ò¥H§â¥¦©R¦W¬°CSI¡A¤£¹LÁôÂÃÄæ¦ìªº¦w¥þ°ÝÃDÁÙ¬O¦s¦bªº¡C 3.Netscape Persistent Cookies¡G
Netscape¤½¥q¤@¦V¬OWWW¬Éªº¦Ñ¤j¡A¥¦¦bNetscapeÂsÄý¾¹¤W³]­p¤F¤@­Ó¥i¥H¦bclientºÝÀx¦s¸ê®Æªº¤èªk¡C ¥u­nCGIµ{¦¡°e¥XSet-Cookie³o­Óheader¡Acookie¸ê®Æ´N·|³Q¦s©ñ¦bÂsÄý¾¹¤W¡A¨ÃÀHµÛHTTP_COOKIEÀô¹ÒÅܼƶǦ^CGIµ{¦¡¡C ³o¼Ë¤@¨Ó¡A¨Ï¥ÎªÌ´N¬Ý¤£¨ìcookie¸Ì­±ªº¸ê®Æ¡A´Nºâ¬Ý¨ì¤F¤]¨S¦³¿ìªk§ïÅÜ¥¦¡C ¤£¹L³o­Ó¤èªk¦³´X­Ó¯ÊÂI¡G²Ä¤@¡B¥u¦³NetscapeªºÂsÄý¾¹¯à°÷¨Ï¥Î¡A­Y¨Ï¥ÎªÌ¤£¬O¥ÎNetscape¡A¨º´N¨S»³¤F¡F ²Ä¤G¡Bcookieªº¤j¤p©M¼Æ¥Ø«Ü¦³­­¡A¨C­Ócookie¤£¯à¶W¹L4KB¡A¨C­Ó¨Ï¥ÎªÌ¥u¯à¦P®É¦s¦³300­Ócookie¡A¦Ó¥B¤@­Óºô°ì¤¤¤£¯à¶W¹L20­Ócookie¡C ©Ò¥H³o­Ó¤èªk¨Ã¤£¬O«Ü¦h¤H¥Î¡A¦Ó¥B¥¦ªº¦w¥þ©Ê¤]¦³«Ý¦Ò¼{¡C ¥Ñ©ó¤@¯ë¨Ï¥ÎªÌ¨Ã¤£·|¨Ï¥Î¨ì¦h­«ªºFORM¡A©Ò¥H§Ú¤]¤£¥´ºâ¦C¥X½d¨Ò¸Ô¥[¸ÑÄÀ¡A¦³¿³½ìªº¤H½Ð¦Û¦æ°Ñ¦Ò¡yCGIµ{¦¡³]­p--ªQ®æ¸ê°T¡z¤@®Ñ¡C


¡·HTTP headers(ªíÀY)

HTTP³q°T¨ó©w¬O¤@ºØ«Ü²³æªºclient-server³q°T¨ó©w¡Aclient©Mserver¤§¶¡ªº·¾³q¥Ñ¨â³¡¤À©Ò²Õ¦¨¡A¤@¬OHTTP headers¡A¥t¤@´N¬O¤å¥ó©Î¸ê®Æ¥»¨­¤F¡A¤¤¶¡«h¥H¤@­ÓªÅ¥Õ¦æ¹j¶}¡C §Ú­Ì¥ý¨Ó¬Ý¬Ý¤U­±³o­Ó¨Ò¤l¡G
³o¬O¤@­Ó¥ÑNetscape Navigator 3.0ª©©Òµo¥Xªºrequest(Location : http://ind.ntou.edu.tw/)¡G

GET / HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/3.0 (WinNT; I)
Host: ind.ntou.edu.tw
Accept: image/gif, image/x-xbitmap, image/jpeg, */*

¦Óindªºapache HTTP serverªº¦^À³«h¬O¡G

HTTP/1.1 200 OK
Date: Sat, 06 Sep 1997 03:32:12 GMT
Server: Apache/1.2b11
Last-Modified: Mon, 16 Jun 1997 14:03:10 GMT
ETag: "b5496-ab0-33a5479e"
Content-Length: 2736
Accept-Ranges: bytes
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html

<html>
<body bgcolor="#ffffff">
<title>Welcome to NTOU CC Email/WWW Server</title>
......
</body>
</html>

¥Ñ©óÂsÄý¾¹©MHTTP server³£¦³«Ü¦h¤£¦Pªºª©¥»¡A©Ò¨Ï¥ÎªºHTTP headers¤]¦U¤£¬Û¦P¡A±`¥ÎªºHTTP headers¦³¤U¦C´XºØ¡G

Header½d¨Ò»P»¡©ú
Status¶Ç¦^ªºª¬ºA½X¡A­Y¨S¦³¿ù»~´N·|¥X²{200 OK
¨Ò¡GHTTP/1.1 200 OK
Content-type¿é¥X¦r¦êªºMIME®æ¦¡¡C
¨Ò¡GContent-Type: text/html
Content-length¿é¥X¦r¦êªºªø«×¡A³q±`¥Hbyte­pºâ¡C
¨Ò¡GContent-Length: 2736
LocationServer­«·s¾É¦V¡A¤]´N¬O¥sÂsÄý¾¹¦A³s¨ì¥t¥~ªº³o­Ó¦ì§}¡C
¨Ò¡GLocation: http://www.ntou.edu.tw/
PragmaÃö±¼ÂsÄý¾¹ªºcache¡A¤]´N¬O¤£­n§â³o¥÷¤å¥ó¦s¦bcache¤¤¡C
¨Ò¡GPragma: no-cache

¬°¤°»ò¤W­±¦³¤@°ïHTTP headers¡A¦Ó§Ú­Ì¼gCGIµ{¦¡®É¥u°e¥XContent-type³o­Óheader©O? ¨ä¹ê¤j³¡¤ÀªºHTTP server³£·|¦Û°ÊÀ°§A¥[¤W¤@¨Ç¥¦»{¬°¦³»Ý­nªºheaders¡A¨Ò¦pª¬ºA½X¡B²{¦bªº¤é´Á®É¶¡¡Bserverªºª©¥»µ¥µ¥¡A §Ú­Ì¬°¤F²¤Æµ{¦¡°_¨£¡A³q±`¥u°e¥Xpartial HTTP headers¡A¦Ó¥æ¥Ñserver¨ÓÀ°§Ú­Ì§¹¦¨headers¡C ¨Æ¹ê¤W§Ú­Ì¤]¥i¥H¨Ï¥Îcomplete HTTP headers¡A¤]´N¬OCGIµ{¦¡ªº¿é¥Xµ²ªG·|ª½±µ¶Ç¨ìÂsÄý¾¹¡Aserver¤£·|¦AÃB¥~²K¥[¨ä¥Lheaders¡C ³o¼Ë©Î³\¥i¥H¥[§Öµ{¦¡°õ¦æ³t«×¡A¦ý§A¤]­n¯S§O¤p¤ß¦Û¤v²£¥Íªºheaders¡A¦]¬°server¨Ã¤£·|À°§AÁ׶}¿ù»~¡C ¦Ócomplete HTTP headers¦Ü¤Ö­n¥]¬AHTTPª©¥»¡Bª¬ºA½X¡Bserver name/version¡BMIME content typeµ¥¡A§_«h±N·|µo¥Í¤£¥i¹w´Áªº¿ù»~¡C ¥t¥~§Ú­Ì¼gCGIµ{¦¡®ÉÁÙ­nª`·N¨ì¤@ÂI¡G¨Ì·Ó³W©w"Content-type:"«á­±¤@©w­nªÅ¤@®æ¡A¤]´N¬O¹³"Content-Type: text/html"³o¼Ë¡A ¦Óheadersµ²§ô«á¤@©w­nªÅ¤@¦æ¡A¤]´N¬O"\n\n"¡C³o¨â­Ó²Ó¸`Å¥»¡¥´¦º«Ü¦hªì¾ÇªÌ¡A¤j®a¼gµ{¦¡®É­n¤p¤ßÂI¡A¤£­n³s«ç»ò¦ºªº³£¤£ª¾¹D¡C


¡·¶Ã¼ÆªºÀ³¥Î

¶Ã¼ÆªºÀ³¥Î¤@ª½¬Oµ{¦¡³]­p¸Ì¤@­Ó«D±`¦³½ìªº³æ¤¸¡A¹ïWWW¤]¬O¤@¼Ë¡A¾A·íªºÀ³¥Î¶Ã¼Æ¥i¥H°µ¨ì³\¦h¥O¤HÅå³ßªº®ÄªG¡C ¨Ò¦p¡A§Ú¬Ý¹L¤@­Óºô¯¸¡A¤@¶i¥h´N¬O¤@±i¹Ï¤ù¡A¥O¤HÅå©_ªº¬O¨C¦¸¶i¥h(reload)ªº¹Ï¤ù³£¤£¤@¼Ë¡AÅý¤H¨C¦¸³£¦³¦Õ¥Ø¤@·sªº·Pı¡A³o´N¬OÀ³¥Î¶Ã¼Æªº®ÄªG¡C ¨ä¹ê¶Ã¼ÆÀ³¥Î³Ì¦hªº¦a¤è´N¬O¹CÀ¸¤F¡A¹³³Ì²³æªº²q®±¹CÀ¸¤]¬O»Ý­nÀ³¥Î¶Ã¼Æ¡C¶Ã¼Æªº¥Îªk¨Ã¤£Ãø¡A­n¦p¦óÀ³¥Î¥þ¬Ý§Aªº¾÷´¼¥©«ä¤F¡C Perl¨ú¶Ã¼Æªº¤èªk©MC»y¨¥¤@¼Ë¡A¤@¶}©l­n¥ý³]random seed¡A¤£µM¨C¦¸¨úªº¶Ã¼Æ³£¤@¼Ë¡A¨º´N«ÜµL½ì¤F¡C¦bPerl¤¤§Ú­Ì³q±`¬O¥H®É¶¡©MPID°µor¹Bºâ«á°µ¬°random seed¡A¤]´N¬Osrand(time|$$);¡C µM«á¥Îrand¨ç¼Æ¨ú¶Ã¼Æ¡A¨Ò¦prand(9)¡A¥¦·|¶Ç¦^¤@­Ó0-9¤§¶¡ªº¼Æ¦r¡C±µ¤U¨Ó¸Ó«ç»òÀ³¥Î³o­Ó¶Ã¼Æ¡A½Ð¦Û¦æ½¾\¦Uµ{¦¡»y¨¥ªº®Ñ¡A§Ú´N¤£¦A¦h»¡¤F¡C ©Î³\¥H«á§Ú¦³ªÅ·|¼g­Ó³¥²y®±ªºCGIµ{¦¡µ¹¦U¦ì·í½d¨Ò¡C


¡·¨ä¥L¦³½ìªº¨Ò¤l

±µ¤U¨Ó³o¨Ç¨Ò¤l³£¬O¡yCGIµ{¦¡³]­p--ªQ®æ¸ê°T¡z³o¥»®Ñ¤Wªº½d¨Ò¡A§Ú¥u¬O¾ß´X­Ó¤ñ¸û¦³½ìªº¸ò¤j®a¤À¨É¡A¸Ô²Óªº»¡©úÁÙ¬O½Ð¤j®a¥h¬Ý®Ñ§a¡C ³o¥»®Ñ¨S¦³ªþºÏ¤ù¡A¸Ì­±ªºµ{¦¡ÁÙ­n¶]¨ì°ê¥~§ì¡A§Ú¶OºÉ¤d¨¯¸U­W¡A©Þ¯A¤d¤s¸U¤ô¡A²×©ó§â³o¥»®Ñ©Ò¦³ªº½d¨Òµ{¦¡¥þ§ì¦^¨Ó¤F¡A¦³¿³½ìªº´N¨Ó³o¸Ì§ì§a¡C