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-·Î ½ÃÀÛÇØ¾ß ÇÑ´Ù.