|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
Docbook ¿ø¹®
CGI ÇÁ·Î±×·¡¹Ö ¼Ò°³CGI ÇÁ·Î±×·¡¹Ö ¼Ò°³| 고친 과정 |
|---|
| 고침 0.9 | 2004³â 5¿ù 17ÀÏ 20½Ã | | | docbook ¹®¼·Î ¿Å±è |
Áö±Ý¿¡ ¿Í¼¾ß CGI(12)´Â Åð¹°·Î ºÐ·ùµÈ´Ù. PHP(12), ASP¿Í °°Àº ÈǸ¢ÇÑ
¼¹ö»çÀÌÆ® ½ºÅ©¸³Æ®¾ð¾îÀÇ µîÀåÀ¸·Î µ¿ÀûÀÎ ÆäÀÌÁö¸¦ ½±°Ô ÀÛ¼ºÇϴµ¥,
±»ÀÌ ´Ù·ç±â Èûµé°í ±î´Ù·Î¿î ¾ð¾î¸¦ ÀÌ¿ëÇØ¼ CGIÇÁ·Î±×·¡¹ÖÀ»
½ÃµµÇؾßÇÏ´Â Çʿ䰡 »ç¶óÁ³±â ¶§¹®ÀÌ´Ù.
±×·¯³ª ¿©ÀüÈ÷ º¸¾È, ±âÁ¸ Á¦Ç°°úÀÇ È£È¯, ±âŸ Çʿ信 ÀÇÇØ¼ CGI¿¡ ´ëÇÑ
¼ö¿ä°¡ ¹ß»ýÇÑ´Ù. À̹ø ±ÛÀº CGIÀÇ °³³ä°ú CGI ¾ÖÇø®ÄÉÀ̼ÇÀÇ ÀÛ¼º¿¡
´ëÇØ¼ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ. ±×¸®°í ±ÛÀÇ ¸¶Áö¸·¿¡´Â ¾ÆÆÄÄ¡ À¥¼¹ö¿¡¼
¿ì¸®°¡ ÀÛ¼ºÇÑ CGI ¾ÖÇø®ÄÉÀ̼ÇÀ» ÀÛµ¿½Ã۵µ·Ï ÇϰڴÙ.
1. CGI ¼Ò°³ CGI´Â Common Gateway InterfaceÀÇ ÁÙÀÓ¸»Àε¥, information ¼¹ö(¿Í ¿ÜºÎ
¾ÖÇø®ÄÉÀ̼ǰúÀÇ ÀÎÅÍÆäÀ̽º¸¦ À§ÇÑ Ç¥ÁØ ¹æ¹ýÀÌ´Ù. information ¼¹öÀÇ °¡Àå
´ëÇ¥ÀûÀÎ ¿¹´Â À¥¼¹öÀÌ´Ù. ÀϹÝÀûÀÎ plain HTML(12) ¹®¼°¡ À¥¼¹ö¸¦ ÅëÇØ¼
¼ºñ½ºµÈ´Ù¸é ÀÌ ³»¿ëÀº "Á¤Àû"µ¥ÀÌÅͰ¡ µÈ´Ù. À¥ ÇÁ·Î±×·¡¸Ó°¡ ¹®¼¸¦ Á÷Á¢
¼öÁ¤ÇϱâÀü¿¡´Â ¾î¶² À¥¼ÆÛ°¡ ¾î¶² ½Ã°£¿¡ ¹®¼¸¦ º¸´õ¶óµµ µ¿ÀÏÇÑ ¹®¼¸¦ ¹Þ¾Æº¸°Ô
µÈ´Ù.
¸î³âÀü¸¸ ÇØµµ ÀÌ·¯ÇÑ plain HTML¹®¼¸¸À¸·Îµµ ÈǸ¢ÇÑ À¥ ¼ºñ½º¸¦ Á¦°øÇÒ ¼ö
ÀÖ¾úÀ¸³ª, ¿äÁòÀÇ À¥¼ºñ½º´Â ´ëºÎºÐ »óÈ£ ÀÛ¿ëÀûÀÎ °ÍÀÌ´Ù. À̸¦Å×¸é °í°´ÀÇ Á¤º¸¸¦
È®ÀÎÇØ¼ °í°´¸¶´Ù °¢°¢ ´Ù¸¥ Á¤º¸¸¦ Áö´Ñ ÆäÀÌÁö¸¦ »Ñ·ÁÁÖ´Â µîÀÇ ¼ºñ½º°¡
ÇÊ¿äÇØÁø °ÍÀÌ´Ù. CGI´Â ÀÌ·¯ÇÑ µ¿ÀûÆäÀÌÁö ¼ºñ½º¸¦ À§Çؼ ¸¸µé¾îÁ³´Ù.
CGIÇÁ·Î±×·¥Àº À¥¼¹ö¿¡ ÀÇÇØ¼ ¸ðµâ ȤÀº ÇÁ·Î±×·¥ ÇüÅ·Π½ÇÇàµÇ¸ç,
µ¥ÀÌÅͺ£À̽º¿¡ ¿¬°áÇØ¼ µ¥ÀÌÅ͸¦ Àоî¿Í¼ À¥ÆäÀÌÁö·Î Ãâ·ÂÇϰųª, µ¥ÀÌÅ͸¦
ÀúÀåÇÏ´Â µîÀÇ ÀÏÀ» ÇÑ´Ù. Áß°£¿¡¼ µ¥ÀÌÅ͸¦ Áß°èÇÏ´Â ÀÌ·¯ÇÑ ÇÁ·Î±×·¥ÀÇ Æ¯Â¡
¶§¹®¿¡ Gateway¶ó´Â À̸§ÀÌ ºÙ¾ú´Ù. ÇöÀç CGIÀÇ ¹öÁ¯Àº 1.1±îÁö ³ª¿Í ÀÖ´Ù.
참고:
CGIÀº ÀÎÅÍÆäÀ̽º´Ù. ¶óÀ̺귯¸®³ª ÇÔ¼ö°¡ ¾Æ´Ï´Ù.
CGI´Â ±âº»ÀûÀ¸·Î ´ç½ÅÀÇ ½Ã½ºÅÛ¿¡¼ ½ÇÇàµÇ¾îÁö´Â ÇÁ·Î±×·¥À¸·Î ´Ù¸¥ ÇÁ·Î±×·¥(vi,
ls ..)µé°ú ÀüÇô ´Ù¸¦¹Ù°¡ ¾ø´Ù. ´Ù¸¥ ÇÁ·Î±×·¥µéÀÌ Ãâ·Â°á°ú¸¦ Ç¥ÁØÃâ·ÂÀ» ÅëÇØ¼
Àü´ÞÇÏ´Â °Í°ú´Â ´Þ¸® CGI´Â Ãâ·Â°á°ú¸¦ À¥¼¹ö·Î Àü´ÞÇÑ´Ù´Â Á¤µµ¸¸ ¾à°£ ´Ù¸£´Ù°í
º¸¸é µÈ´Ù.
¸¸¾à ´ç½ÅÀÌ Apache(12) HTTPD ¼¹ö¸¦ »ç¿ëÇϰí ÀÖ´Ù¸é, ÀÛ¼ºµÈ CGI ÇÁ·Î±×·¥µéÀº
/cgi-bin ¿¡ À§Ä¡ÇÒ °ÍÀÌ´Ù. CGIÇÁ·Î±×·¡¹ÖÀº ´ÙÀ½°ú °°Àº ´Ù¾çÇÑ ¾ð¾î¸¦ ÅëÇØ¼
ÀÛ¼º°¡´É ÇÏ´Ù.
°á·ÐÀûÀ¸·Î ¸»ÇÏÀÚ¸é ¾î¶°ÇÑ ¾ð¾î¸¦ ¾²´õ¶óµµ CGI±Ô°Ý¸¸ ÁöŲ´Ù¸é CGIÇÁ·Î±×·¥ÀÛ¼ºÀ»
À§Çؼ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¸¸¾à C¿Í C++°°Àº ¾ð¾î¸¦ ÀÌ¿ëÇØ¼ °³¹ßÇÑ´Ù¸é ÄÄÆÄÀÏÀ»
½ÃÄѼ Á¦´ë·Î ½ÇÇàµÇ´ÂÁö ¸ÕÀú Å×½ºÆ®ÇغÁ¾ß ÇÒ °ÍÀÌ´Ù. PerlÀ̳ª shell°ú °°Àº
½ºÅ©¸³Æ® ¾ð¾î¸¦ ÀÌ¿ëÇÑ´Ù¸é ÄÄÆÄÀϽÃŰÁö ¾Ê¾Æµµ µÇ¹Ç·Î Á»´õ ÆíÇÏ°Ô ÇÁ·Î±×·¡¹Ö
°¡´ÉÇÒ °ÍÀÌ´Ù. ÀÌ·± ÀÌÀ¯·Î ½ºÅ©¸³Æ® ¾ð¾î°¡ °ú°Å¿¡ CGI¸¦ À§Çؼ ³Î¸® »ç¿ëµÇ¾ú´Ù.
PerlÀÇ °æ¿ì¿¡´Â ¹ü¿ë ¾ð¾î·Î °³¹ßµÇ¾úÁö¸¸ ƯÀ¯ÀÇ °·ÂÇÑ ¹®ÀÚ¿ ó¸® ´É·ÂÀ¸·Î
ÀÎÇÏ¿© ƯÈ÷ CGIÇÁ·Î±×·¡¹ÖÀ» À§ÇÑ ¾ð¾î·Î ³Î¸® »ç¿ëµÇ¾ú´Ù.
ÄÄÆÄÀÏ µÈ ½ÇÇàÆÄÀÏÀ̳ª, ½ºÅ©¸³Æ®µéÀº /cgi-bin¿¡ ¿Å°Ü ³õ°í À¥ÆäÀÌÁö¸¦ ÅëÇØ¼
ºÒ·¯µéÀ̸é À¥¼¹ö°¡ ¾Ë¾Æ¼ ½ÇÇà½ÃŰ°Ô µÈ´Ù.
1.1. PHP(12), ASP¿Í CGI(12) Âü°í·Î PHP(12)¿Í ASP°°Àº °æ¿ì ÀÚüÀûÀ¸·Î CGI¸¦ ¸¸Á·ÇÑ´Ù. CGI±Ô°ÝÀ»
¿£Áø³»ºÎ¿¡¼ ¾Ë¾Æ¼ ó¸®ÇØ ÁֹǷΠ°³¹ßÀÚ´Â CGI¿¡ ´ëÇØ¼ °ñÄ¡¾ÆÇÁ°Ô ¸Ó¸®
¾µÇÊ¿ä ¾øÀÌ ±¸Çö ÀÚü¿¡ ÁýÁßÇÒ ¼ö ÀÖ´Ù.
±×·¯³ª PHP(12)¿Í ASPÀÇ °æ¿ì À¥¼¹öÀÇ ¸ðµâ·Î¼ ÀÛµ¿Çϴµ¥ ÀÌ´Â °íÀüÀûÀÎ
CGIÇÁ·Î±×·¥µé°ú´Â Ʋ¸° ÀÛµ¿¹æ½ÄÀÌ´Ù. ±×·¯¹Ç·Î ÀÌÇÏ CGI¸¦ ¼³¸íÇϴµ¥ À־Â
PHP(12)¿Í ASP´Â ¿¹¿Ü·Î ÇÏ°í ¼³¸íÇϵµ·Ï ÇϰڴÙ.
2. CGI ÇÁ·Î±×·¡¹Ö2.1. ÀÛµ¿¹æ½Ä(ÀÔ/Ãâ·Â) À¥¼¹ö¿¡¼ CGI ÇÁ·Î±×·¥Àº fork()¸¦ ÅëÇØ¼ ½ÇÇà½Ã۸ç CGI¿¡ µ¥ÀÌÅ͸¦
Àü´ÞÇϱâ À§Çؼ Ç¥ÁØÃâ·Â°ú ȯ°æº¯¼ö¸¦ »ç¿ëÇϸç, CGIÇÁ·Î±×·¥À¸·Î ºÎÅÍ
µ¥ÀÌÅ͸¦ Àü´Þ¹Þ±â À§Çؼ Ç¥ÁØÀÔ·ÂÀ» »ç¿ëÇÑ´Ù.
À¥¼¹ö¿¡¼ CGIÇÁ·Î±×·¥À» ½ÇÇà½Ãų ¶§´Â ¿©·¯°¡Áö Á¤º¸µµ CGIÇÁ·Î±×·¥¿¡ Àü´ÞÇÒ
°ÍÀÌ´Ù. Àü´Þ¹æ½ÄÀº GET, POST¹æ½ÄÀÌ ´ëÇ¥ÀûÀÌ´Ù. GET¹æ½ÄÀÇ µ¥ÀÌÅÍ ¿äû¿¡¼
ÀÌ·ç¾îÁø URI°ªÀº Ȱ溯¼ö¸¦ ÅëÇØ¼, POST¹æ½ÄÀº Ç¥ÁØÀÔ·ÂÀ» ÅëÇØ¼
CGIÇÁ·Î±×·¥À¸·Î ³Ñ¾î°£´Ù.
<img src=http://www.joinc.co.kr/albums/album01/aik.gif>
|
2.1.1. GET ¹æ½Ä GET¹æ½ÄÀº URI¸¦ ÅëÇØ¼ ÇÊ¿äÇÑ µ¥ÀÌÅ͸¦ ¿äûÇÏ´Â ¹æ½ÄÀÌ´Ù.
http://www.joinc.co.kr/modules.php?op=modload&name=Forum&file=viewtopic&topic=29106
|
À¥¼¹ö´Â GET¹æ½ÄÀ» ÅëÇØ¼ ÀԷ¹ÞÀº µ¥ÀÌÅ͸¦ ȯ°æº¯¼ö¸¦ ÅëÇØ¼ CGIÇÁ·Î±×·¥¿¡
Àü´ÞÇÑ´Ù. CGIÇÁ·Î±×·¥Àº ȯ°æº¯¼ö¸¦ Àоîµé¿©¼ ÇÊ¿äÇÑ ÀÛ¾÷À» ÇÏ°Ô µÈ´Ù.
C¿¡¼´Â getenv()¸¦ ÅëÇØ¼ ȯ°æº¯¼ö¸¦ Àоîµé ÀÏ ¼ö ÀÖ´Ù. ´ÙÀ½Àº À§ÀÇ
URI·Î Àü´ÞµÈ °ªÀ» °¢ ¾ð¾îº° ȯ°æº¯¼ö¸¦ ÀоîµéÀÌ´Â ¹æ¹ýÀÌ´Ù.
perl
===========
print $ENV{'QUERY_STRING'}; # modload
C/C++
============
char *value;
value = getenv("QUERY_STRING"); // modload
Shell
============
echo $QUERY_STRING # modload
|
ÀÌ·¸°Ô Çϸé Äõ¸® ¹®ÀÚ¿ÀÎ
"op=modload&name=Forum&file=viewtopic&topic=29106"°¡ ³Ñ¾î¿À°í À̰ÍÀ»
Àû´çÈ÷ ÆÄ½ÌÇØ¼ »ç¿ëÇÏ¸é µÈ´Ù.
ȯ°æº¯¼ö´Â ÇÁ·Î¼¼½ºÀÇ ½ºÅÿµ¿ª¿¡ À§Ä¡ÇÑ´Ù. ±×·¯¹Ç·Î Àü´ÞÇÒ ¼ö ÀÖ´Â µ¥ÀÌÅÍÀÇ
¾ç¿¡ Á¦ÇÑÀÌ »ý±ä´Ù(Á¦ÇÑÀ» ¾Æ½Ã´Â ºÐÀÇ ´äº¯ ºÎʵ右´Ï´Ù).
2.1.2. POST ¹æ½Ä POST ¹æ½ÄÀº À¥¿¡¼ <form>À» ÅëÇØ¼ Àü´ÞµÇ´Â °ªµé·Î CGIÇÁ·Î±×·¥À¸·Î´Â
Ç¥ÁØÀÔ·ÂÀ» ÅëÇØ¼ Àü´ÞµÈ´Ù. °æº¯¼ö¿¡ ÀÇÇØ¼ Á¦ÇÑÀÌ »ý±â´Â GET¹æ½Ä¿¡ ºñÇØ¼
Àü´ÞÇÒ ¼ö ÀÖ´Â µ¥ÀÌÅÍÀÇ ¾ç¿¡ Á¦¾à¾øÀÌ »ç¿ë°¡´ÉÇÏ´Ù.
GET°ú ¸¶Âù°¡Áö·Î POST¹æ½Ä¿ª½Ã °æ¿ì ÇÁ·Î±×·¥¿¡¼ ¹®ÀÚ¿ ÆÄ½ÌÀ»
ÇØÁà¾ß ÇÑ´Ù. ÀÌ°Ç »ó´çÈ÷ ±ÍÂúÀº ÀÛ¾÷ÀÌ µÉ ¼ö ÀÖ´Ù.
ÀÌ·¯ÇÑ ±ÍÂúÀº ÀÛ¾÷À» ´ë½Å ó¸®ÇØÁÙ ¶óÀ̺귯¸®°¡ ¿©·µ Á¸ÀçÇϴµ¥,
¹®¼ÀÇ ¸¶Áö¸·¿¡ µû·Î ¾ð±ÞÇϵµ·Ï ÇϰڴÙ.
2.2. CGI ȯ°æ º¯¼ö CGI ÇÁ·Î±×·¥ÀÇ °æ¿ì ´Üµ¶ÇÁ·Î¼¼½º·Î ÀÛµ¿Çϱ⠶§¹®¿¡, ÀÚ½ÅÀ» ½ÇÇà½ÃŲ À¥¼¹öÀÇ
¿©·¯°¡Áö Á¤º¸¸¦ ¾î¶±ÇؼµçÁö À¯ÁöÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. À̸¦Å׸é À¥¼¹öÀÇ Á¾·ù°¡
¹«¾ùÀÎÁö, ¾î¶² URL(12)ÀÌ À¥¿¡ Á¢±ÙÀ» ÇØ¼ CGI ÇÁ·Î±×·¥À» °¡µ¿½ÃÄ×´ÂÁö, ¾î¶²
Äõ¸® ¹®ÀÚ¿À» º¸³Â´ÂÁö, GETÀ» ÀÌ¿ëÇß´ÂÁö POST¸¦ ÀÌ¿ëÇß´ÂÁö µîµîÀÇ Á¤º¸¸¦
À¥¼¹ö·Î ºÎÅÍ »ó¼Ó¹Þ¾Æ¾ß ÇÑ´Ù.
ÀÌ·¯ÇÑ ¸ðµç Á¤º¸´Â ¾à¼ÓµÈ CGI ȯ°æº¯¼ö¸¦ ÅëÇØ¼ ÀÐ¾î ¿Ã ¼ö ÀÖ´Ù. ÇöÀç CGI
ȯ°æº¯¼ö¿¡´Â ´ÙÀ½°ú °°Àº °ÍµéÀÌ Á¤ÀǵǾî ÀÖ´Ù.
DOCUMENT_ROOT // ¹®¼°¡ À§Ä¡ÇÏ´Â ·çÆ® µð·ºÅ丮
GATEWAY_INTERFACE // »ç¿ëµÈ gateway ÀÎÅÍÆäÀ̽º (À̰æ¿ì CGI 1.1)
HTTP_ACCEPT
HTTP_REFERER // POST¹æ½ÄÀÏ °æ¿ì ¿äûÇÑ ÆäÀÌÁö À̸§
HTTP_ACCEPT_CHARSET
HTTP_ACCEPT_LANGUAGE
HTTP_CONNECTION // ¿¬°á¹æ½Ä (º¸Åë Keep-Alive)
HTTP_HOST // À¥¼¹öÀÇ IP¿Í PORTÁ¤º¸
HTTP_USER_AGENT // ¿¬°á¿¡ »ç¿ëÇÑ ºê¶ó¿ìÀú Á¤º¸
PATH // ½ÇÇàÆÄÀÏ °æ·Î
QUERY_STRING // Äõ¸® ¹®ÀÚ¿
REMOTE_ADDR // Ŭ¶óÀÌ¾ðÆ® ÁÖ¼Ò
REMOTE_HOST
REMOTE_PORT // Ŭ¶óÀÌ¾ðÆ® Æ÷Æ®
REQUEST_METHOD // ¿äû¹æ¹ý, º¸Åë GETÀ̳ª POST
REQUEST_URI // URIÁ¤º¸
SCRIPT_FILENAME
SCRIPT_NAME // ½ÇÇàÇÑ CGI ÇÁ·Î±×·¥ À̸§
SERVER_ADMIN // ¼¹ö°ü¸®ÀÚ Á¤º¸, º¸Åë emailÁÖ¼Ò
SERVER_NAME // ¼¹öÀ̸§, º¸Åë µµ¸ÞÀÎÀ̸§
SERVER_PORT // ¼ºñ½º Æ÷Æ®(80, 8080)
SERVER_PROTOCOL // ¼ºñ½º ÇÁ·ÎÅäÄÝ(HTTP1.0, HTTP1.1)
SERVER_SOFTWARE // ¼¹ö ÇÁ·Î±×·¥
TZ // ŸÀÓÁ¸
|
2.3. CGI Å×½ºÆ® ÇÁ·Î±×·¥ - GET ¹æ½Ä ±×·³ °£´ÜÇÑ CGIÅ×½ºÆ® ÇÁ·Î±×·¥À» Çϳª ¸¸µé¾î º¸µµ·Ï ÇϰڴÙ. ÀÌ ÇÁ·Î±×·¥Àº
ÇöÀç ½Ã°£°ú ÇÔ²² Äõ¸® ½ºÆ®¸µ°ú ±âŸ CGIȯ°æº¯¼ö¸¦ Ãâ·ÂÇÏ´Â ÀÏÀ» ÇÑ´Ù.
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <sys/types.h>
#include <unistd.h>
static char dday[256];
static char wday[7][2] = {"ÀÏ","¿ù", "È", "¼ö", "¸ñ", "±Ý", "Åä"};
char * time2str(time_t, char * );
char * time2str(time_t org_time, char *format)
{
struct tm *tm_ptr;
int index=0;
int i;
tm_ptr = localtime(&org_time);
memset(dday, 0x00, 256);
for (i = 0; i < strlen(format); i++)
{
switch(format[i])
{
case 'y': // ³â
sprintf(dday+index, "%04d", tm_ptr->tm_year+1900);
index += 4;
break;
case 'm': // ¿ù(1-12), ºÐ(0-59)
if (format[i+1] == 'i')
{
sprintf(dday+index, "%02d", tm_ptr->tm_min);
index += 2;
i++;
break;
}
else
{
sprintf(dday+index, "%02d", tm_ptr->tm_mon+1);
index += 2;
break;
}
case 'd': // ÀÏ (1-31)
sprintf(dday+index, "%02d", tm_ptr->tm_mday);
index += 2;
break;
case 'D': // ¿äÀÏ(ÀÏ ~ Åä)
sprintf(dday+index, "%s", wday[tm_ptr->tm_wday]);
index += 2;
break;
case 'h': // ½Ã(00-23)
sprintf(dday+index, "%02d", tm_ptr->tm_hour);
index += 2;
break;
case 's': // ÃÊ(00-59)
sprintf(dday+index, "%02d", tm_ptr->tm_sec);
index += 2;
break;
default:
dday[index] = format[i];
index++;
}
}
return dday;
}
void print_header()
{
printf("Content-type: text/html\n\n");
}
int main(int argc, char ** argv)
{
print_header(); // ¹Ýµå½Ã Æ÷ÇԵǾî¾ß ÇÑ´Ù.
printf("<h2>Hello World CGI VERSION : %s</h2>\n",
time2str( time((time_t *)NULL), "y³â m¿ù dÀÏ D¿äÀÏ h:mi:s"));
printf("Query String %s<br>\n", getenv("QUERY_STRING"));
printf("SERVER_SOFTWARE = %s<br>\n", getenv("SERVER_SOFTWARE"));
printf("GATEWAY_INTERFACE = %s<br>\n", getenv("GATEWAY_INTERFACE"));
printf("SERVER_PROTOCOL = %s<br>\n", getenv("SERVER_PROTOCOL"));
printf("HTTP_ACCEPT = %s<br>\n", getenv("HTTP_ACCEPT"));
printf("REQUEST_METHOD = %s<br>\n", getenv("REQUEST_METHOD"));
printf("REMOTE_ADDR = %s\n", getenv("REMOTE_ADDR"));
printf("<br><br>\n");
}
|
À§ Äڵ带 ÄÄÆÄÀÏ ÇÑµÚ À¥¼¹öÀÇ cgi-bin¿¡ test ¶ó´Â À̸§À¸·Î º¹»çÇÑ´ÙÀ½
http://hostname/cgi-bin/test?name=yundreamÀ¸·Î Å×½ºÆ® ÇØº¸µµ·Ï ÇÏÀÚ.
Hello World CGI VERSION : 2004³â 05¿ù 11ÀÏ È¿äÀÏ 11:10:27
Query String name=yundream
SERVER_SOFTWARE = Apache/1.3.26 (Unix) PHP(12)/4.3.0
GATEWAY_INTERFACE = CGI/1.1
SERVER_PROTOCOL = HTTP/1.0
HTTP_ACCEPT = text/*, image/*, audio/*, application/*
REQUEST_METHOD = GET
REMOTE_ADDR = 192.168.1.101
|
2.4. CGI Å×½ºÆ® ÇÁ·Î±×·¥ - POST ¹æ½Ä POST ¹æ½ÄÀ̶õ URI¸¦ ÅëÇØ¼ µ¥ÀÌÅ͸¦ ³Ñ±â´Â ¹æ½ÄÀÌ ¾Æ´Ñ <form>À» ÅëÇØ¼
µ¥ÀÌÅ͸¦ ³Ñ±â´Â ¹æ½ÄÀ» ¶æÇÑ´Ù. CGI ÇÁ·Î±×·¥¿¡¼´Â Ç¥ÁØÀÔ·ÂÀ¸·Î ¹ÞÀ» ¼ö ÀÖ´Ù.
´ÙÀ½Àº POST ¹æ½Ä Å×½ºÆ®¸¦ À§ÇÑ À¥ÆäÀÌÁöÀÌ´Ù. HTML ÄÚµå´Â ¼³¸í »ý·«Çϵµ·Ï ÇϰڴÙ.
ÆäÀÌÁöÀÇ À̸§Àº post.php·Î ÇϰڴÙ.
<form action=/cgi-bin/post-cgi method=post>
À̸§ : <input type=text name=name size=16><br>
³ªÀÌ : <input type=text name=age size=16><br>
<input type=submit name=submit>
</form>
|
´ÙÀ½Àº POST¹æ½ÄÀ¸·Î ³Ñ¾î¿Â µ¥ÀÌÅ͸¦ ¹Þ±â À§ÇÑ ÇÁ·Î±×·¥ÀÌ´Ù. °£´ÜÇϹǷΠ¿ª½Ã ¼³¸íÀº »ý·«Çϵµ·Ï ÇϰڴÙ.
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
char buf[1024];
int n;
printf("Content-type: text/html\n\n");
printf("Referer ÆäÀÌÁö %s<br><br>", getenv("HTTP_REFERER"));
memset(buf, 0x00, 1024);
while((n = read(0, buf, 1023)) > 0)
{
printf("POST DATA : %s", buf);
memset(buf, 0x00, 1024);
}
}
|
ºê¶ó¿ìÀú¿¡¼ post.php¸¦ ºÎ¸¥´ÙÀ½ Àû´çÇÑ °ªÀ» ³Ö°í ½ÇÇà½ÃŰ¸é ´ÙÀ½°ú °°Àº °á°ú°¡ Ãâ·ÂµÉ °ÍÀÌ´Ù.
Referer ÆäÀÌÁö http://localhost/post.php
POST DATA : name=yundream&age=21&submit=SUBMIT
|
Äõ¸® ¹®ÀÚ¿À» ÀоîµéÀÌ´Â ¹æ¹ý¿Ü¿¡ Äõ¸® ¹®ÀÚ¿ÀÇ ±¸¼ºÀº GET¹æ½Ä°ú µ¿ÀÏÇÔÀ» ¾Ë ¼ö ÀÖ´Ù. ¹°·Ð Ű¿Í °ªÀ» Á¦´ë·Î ¾ò±â À§Çؼ´Â '=','&'¸¦ ±âÁØÀ¸·Î ÆÄ½ÌÇØÁà¾ß ÇϰÚÁö¸¸ ¸»ÀÌ´Ù.
2.5. Äõ¸® ¹®ÀÚ¿ ºÐ¼® Äõ¸® ¹®ÀÚ¿À» ºÐ¼®Àº ¾ð¶æ º¸¸é º°·Î ¾î·Á¿ï °Í °°Áö ¾Ê´Ù. ±ÍÂúÀ» ¼ö´Â
ÀÖ°ÚÁö¸¸ '=','&'À» ±âÁØÀ¸·Î ÆÄ½ÌÇÏ´Â °Ç ±â¼úÀûÀ¸·Î ¾î·Á¿î ¹®Á¦´Â ¾Æ´Ï±â
¶§¹®ÀÌ´Ù.
±×·¯³ª ¾Ë°íº¸¸é ±×·¸°Ô °£´ÜÇÏÁö°¡ ¾Ê´Ù. post.php¿¡¼ name¿¡ yun&dream
°ú °°ÀÌ Äõ¸® ½ºÆ®¸µ ºÐ¸®¸¦ À§ÇÑ Æ¯¼ö¹®ÀÚ°¡ Æ÷ÇÔµÇ¾î ¹ö¸®´Â °æ¿ì¸¦ »ý°¢ÇØ
º¸ÀÚ. ´ç¿¬È÷ Á¦´ë·Î ó¸® ÇÒ ¼ö ¾øÀ» °ÍÀÌ´Ù. ÀÌ·¯ÇÑ ÀÌÀ¯·Î À¥¿¡¼ POST,
GET¹æ½ÄÀ¸·Î µ¥ÀÌÅ͸¦ Àü´ÞÇÒ ¶§´Â ÀÎÄÚµù°úÁ¤ÀÌ ÇÊ¿äÇÏ°Ô µÈ´Ù.
½ÇÁ¦ post.php¿¡ yun&dreamÀ» ÀÔ·ÂÇÑ´ÙÀ½ submit ¹öưÀ» ´©¸£¸é ´ÙÀ½°ú °°ÀÌ
ÀÎÄÚµùµÈ °á°ú°¡ Ç¥½ÃµÈ´Ù.
Referer ÆäÀÌÁö http://www.joinc.co.kr/post.php
POST DATA : name=yun%26dream&age=21&submit=SUBMIT
|
&ÀÌ %25 À¸·Î ÀÎÄÚµù µÇ¾î ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù. À¥¿¡¼ °ªÀÇ Àü´ÞÀ»
À§Çؼ »ç¿ëÇÏ´Â ÀÌ·¯ÇÑ ÀÎÄÚµù ¹æ½ÄÀ» urlencode ¶ó°í ÇÑ´Ù.
urlencode´Â ´ÜÁö &, = ¸¸À» ÀÎÄÚµùÇÏÁö ¾Ê´Â´Ù. [[HTML([a-zA-Z0-9\-._])]]À»
Á¦¿ÜÇÑ ¸ðµç ¹®ÀÚµéÀ» º¯È¯ÇÑ´Ù. º¯È¯ ¹æ¹ýÀº ´ÙÀ½°ú °°´Ù.
¿¹¸¦ µé¾î¼ * ´Â %2A ·Î ( ´Â %28 ·Î º¯È¯µÈ´Ù. ASCII
Å×À̺íÀº ascii table¸¦ Âü°íÇϱ⠹ٶõ´Ù.
±×·¯¹Ç·Î CGI ÇÁ·Î±×·¥¿¡´Â À̵é urlencodeµÈ µ¥ÀÌÅ͸¦ decodeÇϱâ À§ÇÑ Äڵ尡
Æ÷ÇԵǾî¾ß ÇÑ´Ù. encode±ÔÄ¢¸¸ ¾È´Ù¸é decode ÄÚµå´Â ¾î·ÆÁö ¾Ê°Ô ÀÛ¼ºÇÒ ¼ö
ÀÖÀ» °ÍÀÌ´Ù. urlencode °ü·ÃµÈ Äڵ带
Code_C_urlencode¿¡
Á¤¸®ÇØ µÎ¾úÀ¸´Ï Çѹø Âü°íÇØ º¸±â ¹Ù¶õ´Ù.
2.6. CGI °ü·Ã ¶óÀ̺귯¸® Á¦´ë·ÎµÈ CGI ÇÁ·Î±×·¥À» ©·Á¸é ÀÌ°Í Àú°Í ½Å°æ½á¾ß ÇÒ°Ô Çѵΰ¡Áö°¡ ¾Æ´Ï´Ù.
HTTP ÇÁ·ÎÅäÄÝ, Cookie, POST, GET, MIME, uuencode, ÆÄÀÏÀü¼Û ... À̰ÍÀ» ÀÏÀÏÀÌ
ÀÛ¼ºÇϱâ¶õ ¿©°£ ±î´Ù·Î¿î°Ô ¾Æ´Ï´Ù. ±×·¡¼ CGI ÇÁ·Î±×·¡¹Ö °ü·Ã ¸î °¡Áö ¶óÀ̺귯¸®¸¦
¼Ò°³ÇÏ°í ±ÛÀ» ¸¶Ä¡°íÀÚ ÇÑ´Ù.
Cache Error
|
|