°Á Àü Å¿ÀÀÇ Àâ´ã>
À¯¼ö¼®Àº ÇöÀç µå¿ø ¼ÒÇÁÆ®¿þ¾îÀÇ ¼ö¼® ÄÁ¼³ÅÏÆ®·Î ±Ù¹«ÇÏ°í °è½Ã¸ç, .NET ¾ÆÅ°ÅØÃ³ ¹× ÄÁ¼³ÆÃ°ú °ü·ÃÇÑ ÀÏÀ» Çϰí ÀÖ½À´Ï´Ù.
°í¼öµé »çÀÌ¿¡¼´Â ÀÌ¹Ì ¾Ë·ÁÁ® ÀÖ´Â À¯¸íÀÎÀ̸ç, Á¦°¡ ¾Æ´Â ÇÑ ±èÇö½Â(´å³Ý¿¢½ºÆÛÆ®)°ú ´õºÒ¾î
±¹³» .NET ±â¼úºÐ¾ßÀÇ ÃÖ°í °í¼ö·Î Æò°¡¹Þ°í ÀÖ´Â µÑ°°¡¶ó¸é ¼·¯¿ö ÇÒ Àι°ÀÔ´Ï´Ù.
(ƯÀÌÇϰԵµ º»ÀÎÀº ¼·¯¿öÇÏÁö ¾ÊÀ½. ÀÌ»óÇÏ°Ô ÁÖº¯ »ç¶÷µéÀÌ ´õ ¼·¯¿öÇÔ)
Àå±â°£ÀÇ È¸À¯¿Í Ä¿ÇÇÁ¢´ë¸¦ °ÅÃÄ..
µåµð¾î, Àý´ë·Î!! ´Ù¸¥ »çÀÌÆ®³ª ºí·Î±×¿¡ ÆÛ°¨ÁúÀ» Çã¿ëÇÏÁö ¾Ê´Â ±×ºÐÀÇ ±ÛÀ»
Å¿À »çÀÌÆ®¿¡¼µµ ÇÔ²² Çϱâ·Î ÇÏ¿´½À´Ï´Ù.
½±°Ô ¾Ë¼ö ¾ø´Â °í±Þ½º·¯¿î ºñ¹ý °ÁµéÀÌ À̾îÁø´Ù°í ±â´ëÇØµµ ÁÁ½À´Ï´Ù.
´õºÒ¾î, ÀÌ °Á´ ¿ÜºÎ Æß ±ÝÁö ±ÛÀ̱⵵ ÇÕ´Ï´Ù
ÆäÀÌÁö ¸µÅ©´Â °¡´ÉÇϳª, ³»¿ë ÀÚü¸¦ ÆÛ°¡¼ ÀÚ½ÅÀÇ ºí·Î±×¿¡ ¿Ã¸®´Â °ÍÀº ±ÝÁöÇϰí ÀÖ½À´Ï´Ù.
¾çÇØÇØ Áֽñ⠹ٶø´Ï´Ù.
Âü°í·Î, À¯¼ö¼®´ÔÀÇ ºí·Î±×´Â http://www.simpleisbest.net ÀÔ´Ï´Ù
ÇöÀç °ÁÂÀÇ ¿øº» ±ÛÀÇ ¸µÅ©´Â
http://www.simpleisbest.net/archive/2005/07/14/184.aspx ÀÔ´Ï´Ù.
Áö³ Æ÷½ºÆ®¿¡¼± HTTP ¾ÐÃàÀ» ½á¾ßÇÏ´Â ÀÌÀ¯¿¡ ´ëÇØ ½äÀ» Ç®¾î ºÃ¾¹´Ï´Ù. ¹¹ ¿ì¸®³ª¶ó °°ÀÌ ³×Æ®¿öÅ© ÀÎÇÁ¶ó°¡ ÁÁÀº »óȲ¿¡¼± HTTP ¾ÐÃàÀÌ ¾¾°¡ ¾È¸ÔÈú °¡´É¼ºÀÌ ³ôÁö¸¸ ±×·¡µµ Á¦ »ý°¢Àº HTTP ¾ÐÃàÀÌ À¯¿ëÇÏ´Ù´Â °Ì´Ï´Ù. ÃÖ±Ù¿¡ 100Mbps¸¦ »ç¿ëÇÏ´Â »ç¿ëÀڵ鵵 ¸¹¾ÆÁ³Áö¸¸ ¾ÆÁ÷µµ ÄÉÀ̺í¸ðµ©(ÃÖ°í 10Mbps)À̳ª ADSL(2-4Mbps)À» »ç¿ëÇÏ´Â »ç¶÷µµ ¸¹±â ¶§¹®ÀÌÁÒ(Á»´õ È¿°ú¸¦ º¸·Á¸é À̹ÌÁö ÆÄÀϵ鿡 ´ëÇÑ Ä³½Ã ¿ª½Ã µ¿¹ÝµÇ¾î¾ß ÇϰÚÁö¸¸...). ±×·¡¼ …A…AÀÌ ¾¾ºÎ·Á º¼·Æ´Ï´Ù.
HTTP Compression (II) - Principle
¿ä¹ø¿£ HTTP ¾ÐÃàÀ̶õ °ÍÀÌ ±¸Ã¼ÀûÀ¸·Î ¾îÄÉ ÀÛµ¿Çϴ°¡¸¦ »ìÆìº¸µµ·Ï ÇϰڴÙ. ÀÌ·±°Å ´Ù ¶§·ÁÄ¡°í °ð¹Ù·Î HTTP ¾ÐÃàÀ» »çÀÌÆ®¿¡ Àû¿ëÇØ º¸°íÀÚ ÇÏ´Â »ç¶÷µé¿¡°Õ ¸¶´Ï ¹Ì¾ÈŸ... ¿ø¸®¸¦ ¸ð¸£°í µ©ºñ´Â °Í ó·³ ¿ë°¨ÇÑ °ÍÀÌ ¾ø´Ù(XX ÇÏ¸é ¿ë°¨ÇÏ´Ü ¸»À» ÀÌ·± ¶§ ¾²´Â°Å ¾Æ´·±î?). ÀÌ·±°Å ¾Æ¹«·± µµ¿ò ¾ÈµÈ´Ù...
HTTP 1.1 Protocol
HTTP 1.1 ÇÁ·ÎÅäÄÝÀ» ¸í¼¼Çϰí ÀÖ´Â RFC2616À» ÂùÂùÈ÷ »ìÆìº¸¸é º¹ÀâÇÑ ¼³¸í°ú ±ä ³»¿ë¿¡ ÇѼû¸¸ ³ª¿Ã °ÍÀÌ´Ù(¹°·Ð ÇÊÀÚµµ ±×·¸´Ù). HTTP ¾ÐÃà¿¡ °ü·ÃµÈ ÇÁ·ÎÅäÄÝ ¸í¼¼´Â ±×´ÙÁö º¹ÀâÇÏÁöµµ ¸¹Áöµµ ¾Ê´Ù. °£´ÜÈ÷ ²À ÇÊ¿äÇÑ °Å¸¸ ¼³¸íÇϰڴÙ(»ç½Ç ÇÊÀÚ°¡ ¾Æ´Â °ÍÀÌ ±×°Í¹Û¿¡ ¾ÈµÇ¹Ç·Î... -_-).
HTTP ¾ÐÃàÀº (»ç½Ç HTTP ÇÁ·ÎÅäÄÝÀº HTTP ¾ÐÃàÀ̶õ ¿ë¾î¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù. Content-Coding À̶õ ¿ë¾î¸¦ ¾²¸ç ÀÌ Content-CodingÀÌ ÁÖ·Î ¾ÐÃàÀÇ ¿ëµµ·Î »ç¿ëµÈ´Ù°í ¸í½ÃÇϰí ÀÖÀ» »ÓÀÌ´Ù) µÎ °³ÀÇ HTTP Çì´õ Çʵ忡 ÀÇÇØ ÀÛµ¿ÇÑ´Ù. Accept-Encoding Çì´õ¿Í Content-Encoding Çì´õ°¡ ±×°ÍÀε¥ ÀÌ µÎ°³ÀÇ HTTP Çì´õ °ªÀ» ÅëÇØ Ŭ¶óÀ̾ðÆ®(À¥ ºê¶ó¿ìÀú)¿Í ¼¹ö(À¥ ¼¹ö)°¡ ¾ÐÃàÀ» ÇÒ °ÍÀΰ¡ ¸» °ÍÀΰ¡ ±×¸®°í ¾ÐÃà¿¡ »ç¿ëµÇ´Â ¾Ë°í¸®ÁòÀ» ¾¤ºÎÄ¡´Â °ÍÀÌ´Ù.
Accept-EncodingÀº Ŭ¶óÀÌ¾ðÆ®°¡ À¥ ¼¹ö¿¡°Ô º¸³»´Â HTTP Request ¸Þ½ÃÁö¿¡ ¸í¼¼ ÇÏ´Â °ªÀ¸·Î¼ Ŭ¶óÀÌ¾ðÆ®°¡ ÀÌ Çì´õ¿¡ ¸í½ÃµÈ ÀÎÄÚµù(¾ÐÃà)À» ÀÌÇØÇÏ°í µðÄÚµù(¾ÐÃà ÇØÁ¦)À» ¼öÇàÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» ¼¹ö¿¡ ¾Ë¸®´Âµ¥ »ç¿ëÇÑ´Ù. Áï, Ŭ¶óÀÌ¾ðÆ®°¡ ¾ÐÃàµÈ ÄÁÅÙÃ÷¸¦ ¹Þ¾Æ ¾ÐÃàÀ» ÇØÁ¦ÇÒ ¼ö ÀÖ´Â ¾ÐÃà ¾Ë°í¸®ÁòÀ» ¼¹ö¿¡ ¾Ë¸®´Â ¿ëµµ·Î Accept-Encoding Çì´õ°¡ »ç¿ëµÈ´Ù. IE 6.0¿¡¼ ¼¹ö¿¡ º¸³»´Â HTTP Request ¸Þ½ÃÁö¸¦ ¿ì¸®ÀÇ ¸ÚÁø À¯Æ¿¸®Æ¼ÀÎ Fiddler·Î »ì¦ µðºñº¸¸é Accept-EncodingÀÌ ´ÙÀ½°ú °°ÀÌ ¸í½Ã µÇ¾î ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù.
Accept-Encoding: gzip, deflate ¡¡
¿ä Çì´õ °ªÀÌ ÀǹÌÇÏ´Â °ÍÀº IE°¡ gzip ±×¸®°í deflate ÀÎÄÚµù, Áï ¾ÐÃà ¾Ë°í¸®ÁòÀ» ÀÌÇØÇϹǷΠÀ¥ ¼¹ö°¡ HTTP Response ¸Þ½ÃÁö¸¦ ÀÌµé ¾Ë°í¸®Áò Áß Çϳª·Î ¾ÐÃàÇØ¼ º¸³»µµ µÈ´Ù´Â °ÍÀ» ¼¹ö¿¡°Ô Âñ·¯ ÁÖ´Â °ÍÀÌ´Ù.
À¥ ¼¹ö´Â Accept-EncodingÀÇ °ªÀ» »ìÆìº¸°í Çʿ信 µû¶ó¼ HTTP Response(HTML, CSS, À̹ÌÁö µîÀÇ °á°ú¹°)¸¦ ¾ÐÃà ÇÒ ¼ö ÀÖ´Ù. À¥ ¼¹ö°¡ HTTP Response¸¦ ¾ÐÃàÇß´Ù¸é ¼¹ö´Â °á°ú°¡ ¾î¶² ¾Ë°í¸®Áò¿¡ ÀÇÇØ ÀÎÄÚµù(¾ÐÃà) µÇ¾ú´Â°¡¸¦ Content-Encoding Çì´õ¸¦ ÅëÇØ ¸í½ÃÇÑ´Ù. ´ÙÀ½Àº http://www.google.co.kr ¿¡¼ ¹ÝȯÇÑ HTTP Response Çì´õÀÇ ³»¿ëÀÌ´Ù.
HTTP/1.1 200 OK Cache-Control: private Content-Type: text/html Content-Encoding: gzip Server: GWS/2.1 Content-Length: 1865 Date: Thu, 14 Jul 2005 14:21:24 GMT
±¸±ÛÀº Content-Encoding Çì´õ °ª¿¡ gzip¿¡ ¸í½ÃÇÏ¿©, ÄÁÅÙÃ÷°¡ gzip ¾Ë°í¸®Áò¿¡ ÀÇÇØ ¾ÐÃàµÇ¾úÀ½À» ºê¶ó¿ìÀú¿¡°Ô ¾Ë¸®°í ÀÖ´Ù.
Test
Á÷Á¢ Å×½ºÆ®ÇÏ¿© ´«À¸·Î HTTP ¾ÐÃàÀÌ ¼öÇàµÇ´Â °ÍÀ» »ìÆìº¸ÀÚ. ¸ÕÀú Fiddler¸¦ ¼öÇà½ÃŲ´Ù. ±×¸®°í IE¸¦ ¼öÇà½Ã۰í http://www.yahoo.com ¿¡ Á¢¼ÓÇØ º¸ÀÚ. ±×·¯¸é Fiddler¿¡ IE°¡ Àü¼ÛÇÏ´Â HTTP Request Çì´õ¿Í Yahoo »çÀÌÆ®°¡ ¹ÝȯÇÏ´Â HTTP Response Çì´õ°¡ ´ÙÀ½°ú °°ÀÌ Ç¥½ÃµÉ °ÍÀÌ´Ù. ±×¸®°í »çÀÌÆ®°¡ ¹ÝȯÇÏ´Â ½ÇÁ¦ ÄÁÅÙÃ÷(TextView ¹öưÀ» Ŭ¸¯ÇØ º¸¶ó)´Â HTML ÀÌ ¾Æ´Ñ ¹ÙÀ̳ʸ® ÀÓÀ» ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù. IE ºê¶ó¿ìÀú°¡ ¾ÐÃàÀ» Ç®°í ±× °á°ú¸¦ Ç¥½ÃÇÏ´Â °ÍÀÌ´Ù.

<<IEÀÇ Accept-Encoding °ª °ú Yahoo »çÀÌÆ®ÀÇ Content-Encoding °ª>>
ÀÌÁ¦ µ¿ÀÏÇÑ »çÀÌÆ®¿¡ ´ëÇØ Accept-Encoding À» ¸í½ÃÇÏÁö ¸»¾Æº¸ÀÚ. FiddlerÀÇ ¿À¸¥ÂÊ ÆÐ³Î¿¡¼ Request Builder ÅÇÀ» ¼±ÅÃÇϰí HTTP Request¸¦ '»ý¼º'ÇØ º¸ÀÚ. URL ÀԷ¶õ¿¡ Yahoo »çÀÌÆ®¸¦ ÀÔ·ÂÇϰí Execute ¹öưÀ» Ŭ¸¯Çϸé HTTP Request °¡ ¸¸µé¾îÁö°í À̰ÍÀÌ ¼öÇàµÉ °ÍÀÌ´Ù. ±×¸®°í ³ª¼ HTTP Response °á°ú¸¦ »ìÆìº¸ÀÚ. Request¿¡¼ Accept-EncodingÀÌ ¸í½ÃµÇÁö ¾Ê¾ÒÀ¸¹Ç·Î, À¥ ¼¹ö ¿ª½Ã ¾ÐÃàÀ» ¼öÇàÇÏÁö ¾Ê¾ÒÀ½À» ¾Ë ¼ö ÀÖ´Ù. Áï, Content-Encoding ÀÌ ¸í½ÃµÇÁö ¾Ê¾ÒÀ» »Ó´õ·¯ TextView ¹öưÀ» ´·¯º¸¸é HTMLÀÌ ¾ÐÃàµÇÁö ¾ÊÀº »óÅ·Π¹ÝȯµÇ¾úÀ½À» È®ÀÎÇÏÀÚ.

<< HTTP È£Ãâ ¸¸µé±â >>
HTTP Compression Implementation
´ë·«ÀûÀ¸·Î ¿ø¸®¸¦ ¾Ë¾Æº¸¾ÒÀ¸´Ï ±¸ÇöÀ» ¾î¶»°Ô ÇÏ¸é µÉÁö °¨ÀÌ ÀâÈú °ÍÀÌ´Ù. À¥ ¼¹ö ±¸ÇöÀ̶ó¸é Ŭ¶óÀÌ¾ðÆ®·ÎºÎÅÍ Accept-EncodingÀ» ÅëÇØ Ŭ¶óÀÌ¾ðÆ®°¡ ¾ÐÃàÀ» Áö¿øÇÏ´ÂÁö °Ë»çÇϰí Áö¿øÇÑ´Ù¸é ÄÁÅÙÃ÷¸¦ ¾ÐÃàÇÑ´Ù. ±×¸®°í Reponse ¸Þ½ÃÁö¿¡ Content-EncodingÀ» ¸í½ÃÇØ ÁÖ¸é µÉ °ÍÀÌ´Ù. Ŭ¶óÀ̾ðÆ®ÀÇ °æ¿ì, IE¿Í °°Àº ºê¶ó¿ìÀú¸¦ »ç¿ëÇÑ´Ù¸é ÀÌ¹Ì ±¸ÇöÀÌ ´Ù µÇ¾î ÀÖÀ¸¹Ç·Î ¾Æ¹«·± ÀÛ¾÷À» ¼öÇàÇÒ Çʿ䰡 ¾ø´Ù. ÇÏÁö¸¸ System.Net ³×ÀÓ½ºÆäÀ̽ºÀÇ HttpWebRequest Ŭ·¡½º ¹× HttpWebResponse Ŭ·¡½º¸¦ »ç¿ëÇÑ´Ù¸é Á÷Á¢ ±¸ÇöÀÌ ÇÊ¿äÇÒ °ÍÀÌ´Ù. HttpWebReqest Ŭ·¡½º¿¡ Accept-EncodingÀ» ¸í½ÃÇØ ÁÖ°í HttpWebResponse¿¡¼ Content-EncodingÀ» °Ë»çÇÏ¿© ¾ÐÃàµÇ¾ú´Ù¸é ¾ÐÃàÀ» ÇØÁ¦ÇÏ¸é µÈ´Ù. ´ÙÀ½ ÄÚµå´Â SharpZipLib ¶óÀ̺귯¸®¸¦ ÀÌ¿ëÇÏ¿© ¾ÐÃàµÈ HTTP ÄÁÅÙÃ÷¸¦ ¾ÐÃà ÇØÁ¦ ÇÏ´Â ¿¹Á¦ ÄÚµåÀÌ´Ù.
using System; using System.IO; using System.Net; using ICSharpCode.SharpZipLib.GZip;
class HttpDecompressTest { // HTTP ¾ÐÃà ÇØÁ¦ ¿¹Á¦ ÄÚµå [STAThread] static void Main(string[] args) { string url = "http://www.google.co.kr";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); // gzip ¾ÐÃà Çã¿ë req.Headers["Accept-Encoding"] = "gzip";
HttpWebResponse res = (HttpWebResponse)req.GetResponse(); string contentEncoding = res.Headers["Content-Encoding"]; Stream httpStream, resultStream; httpStream = res.GetResponseStream(); // ¾ÐÃà ¿©ºÎ È®ÀÎ if (contentEncoding == "gzip") { // SharpZipLibÀÇ ¾ÐÃà ÇØÁ¦ ½ºÆ®¸² »ç¿ë resultStream = new GZipInputStream(httpStream); } else { resultStream = httpStream; } // °£´ÜÇÑ ±¸ÇöÀ̹ǷΠeuc-kr·Î Çϵå ÄÚµù. System.Text.Encoding encoding = System.Text.Encoding.GetEncoding("euc-kr"); // °á°ú Ç¥½Ã StreamReader reader = new StreamReader(resultStream, encoding); Console.WriteLine(reader.ReadToEnd()); resultStream.Close(); } }
<< HTTP ¾ÐÃà ÇØÁ¦ ¿¹Á¦ ÄÚµå >>
À§ Äڵ忡¼ Accept-EncodingÀ» ¼³Á¤ÇÏ´Â ºÎºÐÀ» À¯½ÉÈ÷ »ìÆìº¼ Çʿ䰡 ÀÖ´Ù. ÀÌ ¼³Á¤ÀÌ ¾ø´Â °æ¿ì ±¸±Û »çÀÌÆ®´Â ¾ÐÃàÀ» ¼öÇàÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ¶ÇÇÑ Accept-EcodingÀ» ¼³Á¤ÇØ ³õÀº »óÅ¿¡¼ ¾ÐÃàÀ» Ç®Áö ¾Êµµ·Ï Äڵ带 ¹Ù²Ù°í °á°ú¸¦ »ìÆìº¸ÀÚ. ¾ÐÃàÀ» Ç®Áö ¾ÊÀ¸¸é HTMLÀÌ ¾Æ´Ñ ¿ä»ó½º·± ¹®ÀÚµéÀÌ È¸éÀ» °¡µæ¸Þ¿ì°Ô µÉ °ÍÀÌ´Ù.
´ëºÎºÐÀÇ °æ¿ì Ŭ¶óÀÌ¾ðÆ®·Î IE¸¦ »ç¿ëÇϱ⠶§¹®¿¡ Ŭ¶óÀ̾ðÆ®ÀÇ ¹®Á¦´Â °ÅÀÇ ¾øÀ» °ÍÀÌ´Ù. »ç½Ç Áß¿äÇÑ °ÍÀº À¥ ¼¹öÀÇ ±¸ÇöÀÌ´Ù. ¸¸¾à CGI³ª ISAPI ExtensionÀ¸·Î »çÀÌÆ®°¡ ±¸¼ºµÇ¾î ÀÖ´Ù¸é ¾ÐÃàÀ» ¾îÄÉ ½ÃµµÇØ º¼ÅÙµ¥, ´çÃé ASP ³ª ASP.NETÀ¸·Î ±¸ÇöµÈ »çÀÌÆ®¿¡ ¾ÐÃàÀ» Àû¿ëÇÒ·ÁÄ¡¸é ´« ¾ÕÀÌ ´ä´äÇÏ°í ´«¾ËÀÌ Æ¢¾î³ª¿Ã·Á°í ÇÒ °ÍÀÌ´Ù. °Ô´Ù°¡ ¾ÐÃàÀ» À§ÇØ ±âÁ¸ Äڵ带 ¼öÁ¤ÇØ¾ß ÇÑ´Ù¸é ´õ¿í ¹ÌÄ¥ ³ë¸© ¾Æ´Ñ°¡?
´ÙÀ½ Æ÷½ºÆ®¿¡´Â ÇÁ·Î±×·¥ ¼Ò½º¸¦ ÀüÇô ¼öÁ¤ÇÏÁö ¾Ê°í(´ç¿¬È÷ ±×·¡¾ß ÇÒ°ÍÀÌ´Ù) À¥ ¼¹öÃø¿¡¼ HTTP ¾ÐÃàÀ» ¼öÇàÇÏ´Â ¹æ¹ýµé¿¡ ´ëÇØ »ìÆìº¸µµ·Ï ÇϰڴÙ. ƯÈ÷ IIS 6.0ÀÇ ¾ÐÃà ±â´É¿¡ ´ëÇØ¼ ¸»ÀÌ´Ù. ±Ã±ÝÇÏÁö? ±âµÑ¸®~~~
°Á ¸ñ·ÏÀ¸·Î..
|