1995³â ³×½ºÄÉÀÙ»çÀÇ ¸î¸î »ç¶÷µéÀÌ multipart/mixed MIME Çü½ÄÀ» Á¶ÀÛÇؼ À¥¿¡¼ ¾Ö´Ï¸ÞÀ̼ÇÀ» Ç¥ÇöÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» »ý°¢ÇØ ³Â´Âµ¥, ÀÌ °ÍÀÌ ¼¹öǪ½¬ÀÌ´Ù. ÀÌ »õ·Î¿î MIME Çü½ÄÀº multipart/x-mixed-replaceÀÌ´Ù. x´Â ÀÌ°ÍÀÌ °ø½ÄÀûÀÎ MIME ¸í¼¼°¡ ¾Æ´Ñ Ãß°¡ÀûÀÎ Çü½ÄÀ̶ó´Â °ÍÀ» ÀǹÌÇÑ´Ù. ÀÌ MIMEÀÇ ÇÙ½ÉÀº replace ºÎºÐÀÌ´Ù.
Áï, ÀÌ°ÍÀº ¸¹Àº Çü½ÄÀ» °¡Áø ÇϳªÀÇ ¸Þ½ÃÁö°¡ ¾Æ´Ï¶ó, ¸ðµÎ °°Àº Çü½ÄÀ» °¡Áø ¸¹Àº ºÐ¸®µÈ ¸Þ½ÃÁö¶ó´Â °ÍÀ» ÀǹÌÇϸç, ÇϳªÀÇ ¸Þ½ÃÁö´Â ´ÙÀ½ ¸Þ½ÃÁö·Î ´ëÄ¡(replace)µÈ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù.
¿¹¸¦µé¾î gif À̹ÌÁö¿Í °°Àº °ÍÀ» ÀÌ MIME Çü½Ä¿¡ Àû¿ëÇϸé ÇϳªÀÇ GIF¸¦ Ç¥½ÃÇÏ°í ´ÙÀ½¿¡ ´Ù¸¥ GIF°¡ ±×°ÍÀ» ´ëÄ¡ÇÏ°í °è¼ÓÇؼ ¿©·¯ °³ÀÇ GIF ÆÄÀÏÀ» ÀÌ¿Í °°Àº ¹æ¹ýÀ¸·Î ´ëÄ¡ÇÒ ¼ö ÀÖÀ¸¸ç, ÀÌ°ÍÀ¸·Î¼ °£´ÜÇÑ ¾Ö´Ï¸ÞÀ̼ÇÀ» À¥¿¡ ±¸ÇöÇÒ ¼ö ÀÖ´Ù.
¼¹öǪ½¬´Â À¥¿¡ °£´ÜÇÑ ¾Ö´Ï¸ÞÀ̼ÇÀ» ³ªÅ¸³»±âÀ§Çؼ óÀ½À¸·Î »ç¿ëÇÑ ¹æ¹ýÀÌÁö¸¸ ³×Æ®¿÷ÀÇ ¼Óµµ¿Í ´Ù¸¥ ¿©·¯ °¡Áö ÀÌÀ¯ ¶§¹®¿¡ ºÎµå·¯¿î ¾Ö´Ï¸ÞÀ̼ÇÀ» ±¸ÇöÇϱâ Èûµé´Ù.
´õ¿íÀÌ ¿À´Ã³¯¿¡´Â ÀÚ¹Ù¿Í GIF89aÀÇ µîÀåÀ¸·Î ¾Ö´Ï¸ÞÀ̼ÇÀ» ±¸ÇöÇϱâÀ§ÇÑ ¼¹ö Ǫ½¬·Î¼ÀÇ Àǹ̴ ÀÒ¾úÁö¸¸ Ŭ¶óÀ̾ðÆ®¿ÍÀÇ ¿¬°áÀ» À¯ÁöÇÏ¸é¼ ¼¹öÃøÀÇ Á¤º¸¸¦ Àü¼ÛÇÒ ¼ö Àֱ⠶§¹®¿¡ ¾ÆÁ÷µµ ¸¹Àº °÷¿¡¼ »ç¿ëµÈ´Ù.
µ¿ÀÛ¿ø¸®
multipart/x-mixed-replace MIME Çü½ÄÀº ´ÙÀ½°ú °°Àº Çü½ÄÀ» °®Áö¸ç, CGI°¡ ´ÙÀ½°ú °°Àº Çü½ÄÀÇ ¹®¼¸¦ Ãâ·ÂÇÏ¸é ¼¹ö Ǫ½¬¸¦ Áö¿øÇÏ´Â ¼¹ö´Â ÀÌ CGIÀÇ Ãâ·ÂÀ» ¿©·¯°³ÀÇ ¹®¼·Î ó¸®ÇØ ÁØ´Ù.
1: Content-type: multipart/x-mixed-replace;boundary=TestBoundary
2:
3: --TestBoundary
4: Content-type: text/plain
5:
6: first document
7:
8: --TestBoundary
9: Content-type: text/html
10:
11: <html>
12: <body>
13: second document
14: </body>
15: </html>
16:
17: --TestBoundary--
- multipart/x-mixed-replace
- "multipart"´Â MIME Çü½ÄÁß º¹ÇÕ¹®¼¸¦, "x-mixed-replace"´Â º¹ÇÕ¹®¼Áß¿¡¼µµ ¼¹ö ¹Ð±â¿¡ ÀÌ¿ëµÇ´Â ¹®¼Çü½ÄÀÓÀ» ³ªÅ¸³½´Ù. ¾ÕÀÇ "x-"´Â ¾ÆÁ÷ Á¤½ÄÀ¸·Î Ç¥ÁØȵÇÁö ¾ÊÀº Çü½ÄÀÓÀ» ³ªÅ¸³½´Ù.
- boundary
- º¹ÇÕ¹®¼³»ÀÇ °¢ ¹®¼µéÀ» ±¸º°ÇÏ´Â ºÐ¸®ÀÚ(delimeter)¸¦ ÁöÁ¤ÇÑ´Ù. ÀÌ ºÐ¸®ÀÚ´Â ¹®¼³»¿¡ ³ªÅ¸³ªÁö ¾Ê´Â ¹®ÀÚ¿À» ÀÌ¿ëÇÏ¿©¾ß ÇÑ´Ù. NCSA HTTPD¿¡¼´Â boundary¾Õ¿¡ °ø¹éÀÌ ¿À¸é ¾ÈµÈ´Ù.
- --boundary
- ºÐ¸®ÀÚ ¾Õ¿¡ "--"¸¦ µ¡ºÙ¿©¼ ´ÙÀ½ ¹®¼ÀÇ ½ÃÀÛÀ» Ç¥½ÃÇÑ´Ù.
- --boundary--
- ºÐ¸®ÀÚÀÇ ¾ÕµÚ¿¡ --¸¦ µ¡ºÙ¿©¼ ¹®¼ÀÇ ³¡Àº ³ªÅ¸³½´Ù.
°£´ÜÇÑ ¿¹
´ÙÀ½Àº 1~50±îÁö ¼ýÀÚ¸¦ Ä«¿îÆ®ÇÏ´Â ÇÁ·Î±×·¥ÀÌ´Ù. CGIÀÇ Ãâ·ÂÀÌ ½Ã½ºÅÛ ¹öÆÛ¸¦ °æÀ¯ÇÏÁö ¾Êµµ·Ï $!=1;À» »ç¿ëÇÏ¿´´Ù.
¶ÇÇÑ Á¤È®È÷ ÁöÁ¤ÇÑ ½Ã°£ ÈÄ¿¡ Ãâ·ÂÀÌ µÇµµ·Ï select ÇÔ¼ö¸¦ ÀÌ¿ëÇؼ delay ÇÔ¼ö¸¦ ±¸ÇöÇÏ¿´´Ù.
1 : #! /usr/local/bin/perl
2 : $| = 1;
3 : print "content-type: multipart/x-mixed-replace;boundary=aaa\n\n";
4 : for($i = 1; $i <= 50; $i++)
5 : {
6 : print "--aaa\n";
7 : print "content-type: text/html\n\n";
8 : print &html($i);
9 : &delay(1);
10 : }
11 : print "--aaa--\n\n";
12 :
13 : sub html {
14 : my($i) = @_;
15 : my($html) =<<Push;
16 : <html>
17 : <body>
18 : <head>
19 : <title>Server Push¿¹</title>
20 : </head>
21 : <body>
22 : <span style="font-size: ${i}0px;color: #${i}0${i}0${i}0;
text-align: center"> $i</span>
23 : </body>
24 : </html>
25 : Push
26 : }
27 : sub delay {
28 : select (undef,undef,undef,$_[0]);
29 : return;
30 : }
½ÇÇà°á°ú
¼¹öǪ½¬