³¯Â¥: 1996-04-14 | ±Û¾´ÀÌ: µµ¾Æ | 10075 ¹ø | ÇÁ¸°Æ® | ¸ÞÀϷκ¸³»±â

Á¦ 14°­ - CGIÀÇ Ãâ·Â


Content-Tyep: MIME À¯Çü Ãâ·Â MIME-TypeÀÌ text/htmlÀÎ °æ¿ì

 1: #! /usr/local/bin/perl
 2: 
 3: print <<Html;
 4: content-type: text/html
 5: 
 6: <html><head>
 7: <title> ÀÌ °ÍÀº CGI Ãâ·ÂÀ» ½ÃÇèÇϱâÀ§ÇÑ ¿¹ÀÔ´Ï´Ù </title>
 8: </head><body bgcolor="#ff0000">
 9: <h1> ÀÌ °ÍÀº Content-typeÀÌ text/htmlÀÎ ¹®¼­ÀÔ´Ï´Ù </h1>
10: <img src="http://qaos.com/~artech/a.gif">
11: ¿Í °°ÀÌ À̹ÌÁö¸¦ Ãâ·ÂÇÒ ¼öµµ ÀÖÀ¸¸ç
12: , ¸ðµç HTML Tag¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
13: ½ÉÁö¾î´Â Form Tag¸¦ ÀÌ¿ëÇؼ­
14: ¿ø·¡ÀÇ CGI¸¦ ´Ù½Ã È£Ãâ ÇÒ ¼öµµ ÀÖ½À´Ï´Ù
15: <form action=/~artech/cgi-bin/print.cgi">
16: <input type=submit value="º¸³»±â">
17: </form>
18: </body></html>
19: Html
½ÇÇà°á°ú

content.cgi

CGI´Â ¹Ýµå½Ã Content-type:, Location:, Status LineÁß Çϳª¸¦ Ãâ·ÂÇØ¾ß ÇÑ´Ù. À§ÀÇ ¿¹´Â ÀÌ·¯ÇÑ CGI Ãâ·ÂÁß Content-Type:¸¦ Ãâ·ÂÇÏ´Â ¿¹ÀÌ´Ù. MIME Çü½ÄÀº Ãâ·ÂÇÒ ¹®¼­¿¡µû¶ó ´Þ¶óÁö¸ç, ÀÌ °æ¿ì¿¡´Â text/htmlÀÌ´Ù.

ù ÇàÀº ½ºÅ©¸³Æ® ¾ð¾î(perl, Sehll Script)¸¦ »ç¿ëÇÏ´Â °æ¿ì ¹ÝµíÀÌ Æ÷ÇԵǾî¾ß ÇÏ´Â ÇàÀÌ´Ù. ÀÌ Ã¹ÇàÀ¸·Î OS ´Â ÇöÀç ¼öÇàÇÏ°í ÀÖ´Â ÇÁ·Î±×·¥ÀÌ ½ºÅ©¸³Æ® ¾ð¾î·Î ÀÛ¼ºµÇ¾úÀ¸¸ç, ÀÌ ÇÁ·Î±×·¥À» ¼öÇàÇϱâÀ§ÇØ /usr/local/bin ¹Ø¿¡ÀÖ´Â perlÀ̶ó´Â ÀÎÅÍÇÁ¸®Å͸¦ »ç¿ëÇؾߵȴٴ °ÍÀ» ÀνÄÇÏ°Ô µÈ´Ù. ¶ÇÇÑ perl·Î ÀÌ ÆÄÀÏÀ» ½ÇÇà ½ÃÅ°´Â °æ¿ì¿¡´Â ù¿­ÀÌ #À¸·Î ½ÃÀ۵ǹǷΠperl¿¡¼­´Â ÁÖ¼®À¸·Î ó¸®ÇÏ°Ô µÈ´Ù.

3ÇàÀº Document Here¸¦ ÀÌ¿ëÇؼ­ Ãâ·ÂÇÏ´Â Ãâ·Â¹®ÀÌ´Ù.

4ÇàÀº Content-TypeÀ» Ãâ·ÂÇÏ´Â ÇàÀÌ´Ù. Body¿Í HeaderÀ» ±¸ºÐÇϱâÀ§ÇØ ºóÁÙÀÌ »ðÀԵǾú´Ù´Â °Í¿¡ ÁÖÀÇÇϱ⠹ٶõ´Ù.

6-18ÇàÀº ÀϹÝÀûÀÎ HTML ¹®¼­¸¦ Ãâ·ÂÇÏ´Â ºÎºÐÀÌ´Ù. Document HereÀ» °í·ÁÇÏÁö ¾ÊÀ¸¸é ÀϹÝÀûÀÎ HTML ¹®¼­¿Í ¿ÏÀüÈ÷ µ¿ÀÏÇÏ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù.

19 ÇàÀº Document HereÀ» ´Ý¾ÆÁÖ´Â ¹®ÀåÀÌ´Ù. Document¸¦ ´Ý¾ÆÁÙ ¶§¿¡´Â ¹Ýµå½Ã Document HereÀÇ ¾ÕµÚ¿¡ °ø¹éÀÌ ÀÖ´ÂÁö È®ÀÎÇØ¾ß ÇÑ´Ù.

Content-Type¿¡´Â MIME-Type¿¡¼­ ÁöÁ¤ÇÏ°í ÀÖ´Â ¸ðµç Çü½ÄÀÌ °¡´ÉÇÏ´Ù. °£´ÜÇÑ ¿¹·Î¼­ ±×¸²À» Ãâ·ÂÇÏ´Â ¿¹¸¦ º¸µµ·ÏÇÏÀÚ. MIME-TypeÀÌ /images/sections/cgi/gifÀÎ °æ¿ì

CGI Ãâ·ÂÀÇ µÎ ¹ø° ¿¹·Î¼­ Ãâ·ÂÇÏ´Â ¹®¼­ÀÇ ³»¿ëÀÌ ±×¸²À̱⠶§¹®¿¡ MIME Çü½ÄÀº /images/sections/cgi/gif¸¦ »ç¿ëÇß´Ù.

 1: #! /usr/local/bin/perl
 2:
 3: print "content-type: /images/sections/cgi/gif\n\n";
 4:
 5: open(IMAGE, "a.gif");
 6: binmode(IMAGE);
 7: binmode(STDOUT);
 8: while(<IMAGE>) {
 9:      print;
10: }
11:  
12: close(IMAGE);
½ÇÇà°á°ú

image.cgi

3ÇàÀº Content-TypeÁß¿¡¼­ MIME-TypeÀÌ /images/sections/cgi/gif¸¦ Ãâ·ÂÇÏ´Â ºÎºÐÀÌ´Ù. Çì´õºÎºÐÀº MIME-TypeÀÌ /images/sections/cgi/gif·Î ¹Ù²î¾úÀ» »Ó text/htmlÀ» Ãâ·ÂÇÏ´Â °æ¿ì¿Í ¶È °°´Ù.

´Ù¸¸ 5-10±îÁö ¸öü¸¦ Ãâ·ÂÇÏ´Â ºÎºÐÀÌ html¹®¼­°¡ ¾Æ´Ï¶ó ±×¸²À̹ǷΠa.gif¸¦ Àоîµé¾î Ãâ·ÂÇϵµ·Ï º¯°æµÇ¾îÀÖ´Ù. Compile ¾ð¾îÀÇ °æ¿ì ¹ÙÀ̳ʸ® ÆÄÀÏÀ» ÇÁ·Î±×·¥ ÀÚü¿¡ ³»ÀåÇÒ ¼ö ÀÖÁö¸¸ perlÀº ½ºÅ©¸³Æ® ¾ð¾îÀ̹ǷΠÀ§¿¡¼­Ã³·³ a.gif¶ó´Â ÆÄÀÏÀ» Àоî print ¹®À» ÀÌ¿ëÇؼ­ Ãâ·ÂÇÒ ¼ö¹Û¿¡ ¾ø´Ù.

5ÇàÀº a.gif¶ó´Â ÆÄÀÏÀ» Àб⠸ðµå·Î IMAGE¶ó´Â ÆÄÀÏ Çڵ鷯·Î openÇÏ´Â ºÎºÐÀÌ´Ù. ¾ÕÀýÀ̼­ ´Ù·ç¾ú´ø º¯¼ö¿Í´Â ´Þ¸® ÆÄÀÏÇڵ鷯¿¡´Â ¾î¶°ÇÑ Á¢µÎ»çµµ ºÙÁö ¾Ê´Â´Ù´Â °ÍÀ» À¯ÀÇÇϱ⠹ٶõ´Ù.

6, 7ÇàÀº 2Áø ÆÄÀÏÀ» ÀÔÃâ·ÂÇØ¾ß ÇϹǷΠIMAGE¿Í STDOUTÀ» 2Áø ¸ðµå·Î º¯È¯ÇÏ´Â ºÎºÐÀÌ´Ù. ÀÌ¿Í°°Àº °úÁ¤Àº ¹Ýµå½Ã ÇÊ¿äÇÑ °ÍÀº ¾Æ´ÏÁö¸¸ 2Áø ÆÄÀÏÀ» È­¸é¿¡ Ãâ·ÂÇÒ ¶§¿¡´Â °¡±ÞÀû ¼öÇàÇØ ÁÖ´Â °ÍÀÌ ÁÁ´Ù.

8-10ÇàÀº IMAGE¶ó´Â ÆÄÀÏÇڵ鷯¸¦ ÇÑÁÙ¾¿(<>)Àо È­¸é¿¡ Ãâ·ÂÇÏ´Â ºÎºÐÀÌ´Ù. À§ÀÇ 8-10ÇàÀº

7:  whiel($_ = <IMAGE>) {
8:  	print $_;
9:  }

°ú µ¿ÀÏÇÑ ¹®ÀåÀÌ´Ù. ¾ÕÀýÀÇ º¯¼ö¿¡¼­ ¾ð±ÞÇßµíÀÌ perl¿¡¼­´Â $_¶ó´Â Ư¼öº¯¼ö°¡ ÀÖÀ¸¸ç, ÀÎÀÚ°¡ »ý·«µÈ °æ¿ì $_¸¦ ÀÎÀÚ·ÎÇؼ­ ÇÁ·Î±×·¥À» ¼öÇàÇÏ°Ô µÈ´Ù.

¶Ç ÇÑ°¡Áö µÞºÎºÐÀÇ ¼øȯ¹®¿¡¼­ ¼³¸íÇÏ°ÚÁö¸¸ perlÀÇ while¹®¿¡¼­´Â À§ÀÇ ¿¹¿¡¼­Ã³·³ ºñ±³¿¬»êÀÚ°¡ ¾Æ´Ï¶ó ÁöÁ¤¿¬»êÀÚ¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ÀÌ °æ¿ì $_¿¡ °ªÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Â °æ¿ì ÂüÀÌ°í ±×·¸Áö ¸øÇÑ °æ¿ì °ÅÁþÀÌ µÈ´Ù.

µû¶ó¼­ À§ÀÇ ¹®ÀåÀº ÆÄÀÏÀ» óÀ½ºÎÅÍ ³¡±îÁö ÀÐÀ¸¶ó´Â ¹®ÀåÀÌ µÈ´Ù. À§ÀÇ ¿¹¿¡¼­Ã³·³ ±×¸²À» Ãâ·ÂÇÏ´Â CGI ÇÁ·Î±×·¥Àº NetscapeÀÇ Location ÀÔ·Â »óÀÚ¿¡ Á÷Á¢ÀÔ·ÂÇؼ­ CGI¸¦ ¼öÇà½ÃÄѵµ µÇÁö¸¸ ´ÙÀ½°ú °°ÀÌ HTMLÀÇ IMG ű׸¦ ÀÌ¿ëÇؼ­ ¼öÇà½Ãų ¼öµµ ÀÖ´Ù.

1:  <html>
2:  <head>
3:  <title> ÀÌ°ÍÀº ±×¸²À» Ãâ·ÂÇÏ´Â CGIÀÇ ¿¹ÀÔ´Ï´Ù </title>
4:  </head>
5:  <body>
6:  <h3><img src="http://qaos.com/~artech/cgi-bin/image.cgi">´Â 
						CGI¸¦ ½ÇÇàÇÑ °á°úÀÔ´Ï´Ù.</h3>
7:  </body></html>
Location: ¸®Å쵃 ¹®¼­ÀÇ URL

CGI Ãâ·ÂÀÇ µÎ ¹ø° ¿¹·Î¼­ Location: Çì´õ¸¦ Ãâ·ÂÇÏ´Â ¿¹ÀÌ´Ù. Location: Çì´õ´Â ÀϹÝÀûÀ¸·Î ÀÚ¿øÀÇ À§Ä¡°¡ º¯°æµÈ °æ¿ì¿¡ ÀÚÁÖ »ç¿ëµÈ´Ù.

´ÙÀ½ÀÇ ¿¹´Â ȯ°æº¯¼ö Áß¿¡¼­ HTTP_ACCEPT_LANGUAGE¸¦ ÀÌ¿ëÇؼ­ ClientÀÇ ¾ð¾î¼³Á¤ÀÌ KoreanÀ̸é ÇÑ±Û È¨ÆäÀÌÁö¸¦ ±×·¸Áö ¾ÊÀº °æ¿ì¿¡´Â ¿µ¹® ȨÆäÀÌÁö¸¦ º¸¿©ÁÖ´Â ¿¹ÀÌ´Ù.

 1:  #! /usr/local/bin/perl
 2:  %lan = (
 3:      "ko", "http://qaos.com/kindex.htm", 
 4:      "fr", "http://qaos.com/findex.htm", 
 5:      "en", "http://qaos.com/eindex.htm"
 6:  );
 7:  if($ENV{'HTTP_ACCEPT_LANGUAGE'} =~ /(ko|fr)/g) {
 8:      print "Location: $lan{}\n\n";
 9:  }
10:  else {
11:      print "Location: $lan{'en'}\n\n";
12:  }
½ÇÇà°á°ú

language.cgi

2ÇàÀº ¾Õ¿¡¼­ ¹è¿üµí lanÀ̶ó´Â ¿¬°ü¹è¿­À» ¼±¾ðÇÏ´Â ¹®ÀåÀÌ´Ù. Áï, ko¶ó´Â Å°¿öµå¿¡´Â ÇÑ±Û È¨ÆäÀÌÁöÀÇ URLÀ» enÀ̶ó´Â Å°¿öµå¿¡´Â ¿µ¹® ȨÆäÀÌÁöÀÇ URLÀ» ÀúÀåÇϵµ·Ï ¼±¾ðÇÏ°í ÀÖ´Ù.

7ÇàÀº ¿ª½Ã ¾Õ¿¡¼­ °¡²û¾¿ µîÀåÇÑ ÆÐÅϸÅÄ¡¸¦ »ç¿ëÇÑ °ÍÀÌ´Ù. Áï, HTTP_ACCEPT_LANGUAGE¶ó´Â ȯ°æº¯¼ö¿¡ ko¶ó´Â ¹®ÀÚ¿­À̳ª frÀ̶ó´Â ¹®ÀÚ¿­À» Æ÷ÇÔÇÏ°í ÀÖÀ¸¸é, ±× °á°ú´Â ÂüÀ» ¸®ÅÏÇÏ°Ô µÈ´Ù. µû¶ó¼­ Ŭ¶óÀ̾ðÆ®ÀÇ ¾ð¾î¼³Á¤¿¡ koreanÀ̳ª france°¡ Æ÷ÇÔµÈ °æ¿ì¿¡´Â 8ÇàÀÌ ¼öÇàµÇ¸ç, ±×·¸Áö ¾ÊÀº °æ¿ì¿¡´Â 11ÇàÀÌ ¼öÇàµÈ´Ù.

ÀÌ ÇÁ·Î±×·¥À» NetscapeÀÇ Location ÀԷ»óÀÚ¿¡ Á÷Á¢ ÀÔ·ÂÇϸé NetscapeÀÇ Options->General Preferences->Languages(Netscape 4.0¹Ì¸¸) ¶Ç´Â Edit->Preferences..->Languages(Netscape 4.0ÀÌ»ó)ÀÇ ¼³Á¤°ª¿¡µû¶ó kindex.htmlÀ̳ª eindex.html ÆÄÀÏÀ» ºÒ·¯¿À°ÔµÈ´Ù.

À§¿Í °°Àº cgi ÇÁ·Î±×·¥À» index.html ÆÄÀÏ¿¡¼­ ¼öÇà½ÃÅ°¸é »ç¿ëÀÚÀÇ È¨ÆäÀÌÁö¿¡ Á¢¼ÓÇÑ Å¬¶óÀ̾ðÆ®ÀÇ ¼³Á¤°ª¿¡µû¶ó ÇÑ±Û ¶Ç´Â ¿µ¹® ȨÆäÀÌÁö¸¦ ÀÚµ¿ÀûÀ¸·Î ¿¬°á½Ãų ¼ö ÀÖ´Ù.

index.html ÆÄÀÏ¿¡¼­ CGI ÇÁ·Î±×·¥À» ½ÇÇàÇϱâ À§Çؼ­´Â Client-Pull ±â´ÉÀ» »ç¿ëÇϸéµÈ´Ù. Client-PullÀ» ÀÌ¿ëÇؼ­ CGI ÇÁ·Î±×·¥À» ½ÇÇàÇÏ·Á¸é index.html¹®¼­ÀÇ ³»¿ëÀ» ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÈ´Ù.

1:  <html><head>
2:  <meta http-equiv="refresh" Content="0; URL=http://syscon.soongsil.ac.kr
					/~artech/cgi-bin/language.cgi">
3:  </head>
4:  </html>
»óÅÂÇà(Status Line)

»óŶó´Â Respons ¸Þ½ÃÁö¿¡¼­ °¡Àå Áß¿äÇÑ ÇàÀ¸·Î¼­ ¼­¹öÀÀ´ä¿¡´Â ¹Ýµå½Ã Æ÷ÇԵǴ ÇàÀÌ´Ù. CGI°¡ ÀÌ »óÅÂÇàÀ» Ãâ·ÂÇØ¾ß ÇÏ´Â °æ¿ì´Â °ÅÀÇ ¾øÀ¸¸ç ÀÌ »óÅÂÇàÀ» Ãâ·ÂÇÏ´Â °æ¿ì¿¡´Â ´Ù¸¥ Response Headerµµ Ãâ·ÂÇØ¾ß ÇÑ´Ù.

´ÙÀ½ ¿¹´Â À¯·á»çÀÌÆ®¸¦ ¹æ¹®ÇÏ¸é ³ªÅ¸³ª´Â ID¿Í ¾ÏÈ£¸¦ ÀÔ·ÂÇÒ ¼ö ÀÖ´Â ÀÔ·ÂâÀ» ¸¸µå´Â CGIÀÌ´Ù. ¾ÏÈ£¸¦ ¹Þ¾Æµé¿© ÀÎÁõÇÏ´Â ºÎºÐÀÌ ¾øÀ¸¹Ç·Î ID¿Í ¾ÏÈ£¸¦ ÅëÇÑ ÀÎÁõÀº ºÒ°¡´ÉÇÏ´Ù´Â °Í¿¡ ÁÖÀÇÇϱ⠹ٶõ´Ù.

 1 : #!/usr/local/bin/perl
 2 : print <<Html;
 3 : HTTP/1.1 401 Authorization Required
 4 : Date: Tue, 30 Jun 1998 03:44:01 GMT
 5 : Server: Apache/1.3.0 (Unix)
 6 : WWW-Authenticate: Basic realm="DoA"
 7 : Connection: close
 8 : Content-Type: text/html
 9 : 
10 : <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
11 : <HTML><HEAD>
12 : <TITLE>401 ¾ÏÈ£°¡ Ʋ·È¾î ÀÓ¸¶!!!</TITLE>
13 : </HEAD><BODY>
14 : <H1>¾ÏÈ£, ¾ÏÈ£, ¾ÏÈ£!!!</H1>
15 : <P>
16 : ³Í ¿ä±â·Î ¸ø¿Í. ¿Ö³Ä°í ¾ÏÈ£°¡ Ʋ·ÈÀ¸´Ï±î.<BR>
17 : ¾ÏÈ£´Â ´ë¼Ò¹®ÀÚ¸¦ ±¸ºÐÇϰŵç, Àߺ¸°í ´Ù½ÃÇغÁ.<BR>
18 : ¶Ç Ʋ¸®¸é Á×¾î.<BR>
19 : </BODY></HTML>
20 : Html
½ÇÇà°á°ú

lnph-auth.cgi

3ÇàÀÌ »óÅÂÇàÀ» Ãâ·ÂÇÏ´Â ºÎºÐÀÌ´Ù. ¾ÕÀå¿¡¼­ ¹è¿üµíÀÌ »óŶóÀÎÀº HTTP-Version Status-Code ReasonÀ¸·Î ±¸¼ºµÈ´Ù. ¿ø·¡ »óŶóÀÎÀº ¼­¹ö°¡ CGIÀÇ Ãâ·Â¿¡ µ¡ºÙ¿© Client¿¡ µÇµ¹·Á ÁÖÁö¸¸ ÀÌ °æ¿ì¿¡´Â CGI°¡ »óŶóÀÎ ±îÁö Ãâ·ÂÇÏ°í ÀÖ´Ù. »óŶóÀÎÀ» Ãâ·ÂÇÏ´Â °æ¿ì¿¡µµ ¾Õ¼­ÀÇ µÎ°¡Áö Header(Content-typeÀ̳ª Location)Áß Çϳª¸¦ Æ÷ÇÔÇØ¾ß ÇÑ´Ù.

6ÇàÀº HTTP ¸í¼¼¿¡¼­ º» WWW-Authenticate: Çì´õ¸¦ Ãâ·ÂÇÏ´Â ºÎºÐÀÌ´Ù. ÀÌ Çì´õ¸¦ Ŭ¶óÀ̾ðÆ®°¡ ¹Þ°ÔµÇ¸é ID¿Í ¾ÏÈ£¸¦ ÀÔ·ÂÇÒ ¼ö ÀÖ´Â ÀÔ·ÂâÀ» ¸¸µé¸ç, »ç¿ëÀÚ°¡ ÀÔ·ÂÇÑ ID¿Í ¾ÏÈ£¸¦ Base64·Î ÄÚµùÇؼ­ ¼­¹ö·Î Àü¼ÛÇϰԵȴÙ.

10~19ÇàÀº ID¿Í ¾ÏÈ£°¡ Ʋ·ÈÀ» °æ¿ì¿¡ Ãâ·ÂµÇ´Â ¸Þ½ÃÁöÀÌ´Ù.

ÁÖÀÇ: NPH-CGI·Î ±âµ¿ÇϱâÀ§ÇØ´Â ÆÄÀϸíÀÌ ¹Ýµå½Ã nph-·Î ½ÃÀÛÇØ¾ß ÇÑ´Ù.



´ÙÀ½±Û: Á¦ 15°­ - Á¦¾î±¸Á¶ (7908)1996-04-15
ÀÌÀü±Û: Á¦ 13°­ - print ¹® (9015)1996-04-13

¼¼»ó»ç´Â À̾߱â



RSS ±¸µ¶ (À͸í | ȸ¿ø | °­Á | Æ÷·³)
(C) 1996 ~ 2017 QAOS.com All rights reserved.