ServletÀ» È°¿ëÇÑ JavaScript Caching
ServletÀ» È°¿ëÇÑ JavaScript CachingÁ¤ÀûÀÎ HTMLÀ̳ª À̹ÌÁö ÆÄÀÏÀÇ °æ¿ì º°µµÀÇ ¼³Á¤ÀÌ ¾ø¾îµµ À¥¼¹ö¿¡¼ ÀÚµ¿À¸·Î ÇØ´çµÇ´Â ÆÄÀÏÀÇ Ä³½Ì Á¤º¸¸¦ °ü¸®ÇÑ´Ù. ÇÏÁö¸¸ JSP³ª Servlet°ú °°Àº µ¿ÀûÀÎ ÆÄÀÏÀ» ij½ÌÇϱâ À§Çؼ´Â ¿©·¯°¡Áö »çÇ×À» °í·ÁÇؾßÇÑ´Ù. À̹ø¿¡´Â JavaScriptÆÄÀÏÀ» ServletÀ» ÀÌ¿ëÇؼ ¾ÐÃàÇÏ¿© Àü¼ÛÇÏ´Â °æ¿ì¿¡ ij½Ì ¼º´ÉÀ» Çâ»ó ½ÃÅ°´Â ¹æ¾ÈÀ» ¾Ë¾Æº¸°Ú´Ù. À̹ø ¹æ¾È¿¡ ´ëÇÑ ÀÌÇظ¦ ³ôÀ̱â À§Çؼ´Â ¸î°¡Áö ¹è°æ Áö½ÄÀÌ ÇÊ¿äÇÏ´Ù. HTTP/1.1 304 Not Modified ÀÌ·¯ÇÑ ¼¹ö ij½ÌÀÇ °æ¿ì¿¡´Â ³×Æ®¿öÅ©¸¦ ÅëÇØ Àü¼ÛµÇ´Â µ¥ÀÌÅÍÀÇ ¾çÀº ÀûÁö¸¸ ÇØ´ç ij½Ì Á¤º¸ÀÇ À¯È¿¼ºÀ» ¼¹ö¿¡¼ È®ÀÎÇØ¾ß Çؼ Ŭ¶óÀ̾ðÆ®¿Í ¼¹ö°£ ÀÀ´ä½Ã°£(ping time)ÀÌ ´À¸° °æ¿ì ¼Óµµ°¡ ´À¸®´Ù°í ´À³¢°Ô µÈ´Ù. ³×Æ®¿öÅ©ÀÇ ´ë¿ªÆø(bandwidth)´Â Å©´Ù°í ÇÏ´õ¶óµµ ÀÀ´ä½Ã°£ÀÌ ´À¸®¸é »ç¿ëÀÚÀÇ Ã¤°¨¼Óµµ°¡ ¶³¾îÁö°Ô µÇ°í, ÀÌ·¯ÇÑ Çö»óÀº Çö¶õÇÑ(?) µðÀÚÀÎÀ» Àû¿ëÇÏ¿© ¼ö¸¹Àº À̹ÌÁö¸¦ ´Ù¿î¹Þ¾Æ¾ß ÇÏ´Â ÆäÀÌÁö³ª CSS¿¡ À̹ÌÁö ÆÄÀÏÀ» Àû¿ëÇÏ¿© »ç¿ëÇÏ´Â °æ¿ì ƯÈ÷ ¿µÇâÀ» ¸¹ÀÌ ¹Þ°Ô µÈ´Ù. ¾Æ·¡ ȸéÀº ¼¹ö¿¡¼ ij½ÌÀ» º¸³»ÁØ °æ¿ìÀÌ´Ù. µÎ ¹ø°´Â Ŭ¶óÀ̾ðÆ® ij½ÌÀÌ´Ù. ºê¶ó¿ìÀú´Â ¿äû µ¥ÀÌÅÍÀÇ Çì´õ Á¤º¸¸¦ ±â¹ÝÀ¸·Î ¼¹ö·Î ¿äûÇÒÁö ¿©ºÎ¸¦ ÆÇ´ÜÇÏ°í ¿äû ÀÚü°¡ ÇÊ¿ä¾ø´Â °æ¿ì¿¡´Â ·ÎÄÿ¡ ij½ÌµÈ µ¥ÀÌÅ͸¦ ¹ÝȯÇÑ´Ù. ÀÌ °æ¿ì XMLHttpRequestÀÇ status´Â 200À¸·Î ¸¶Ä¡ ¼¹ö¿¡¼ °ªÀ» Àü¼ÛÇÑ °Í ó·³ º¸ÀÌÁö¸¸, HTTP Watch·Î ¸ð´ÏÅ͸µ ÇÏ°Ô µÇ¸é Result°¡ (Cache)·Î µÇ¾î ÀÖ°í ¼¹ö¿Í´Â ¾Æ¹«·± Åë½ÅÀÌ ¹ß»ýÇÏÁö ¾Ê¾ÒÀ½À» ¾Ë ¼ö ÀÖ´Ù. ¾Æ·¡ ȸéÀº Ŭ¶óÀ̾ðÆ® ij½ÌÀÇ °æ¿ìÀÌ´Ù. ·ÎÄà ij½Ì°ú °ü·ÃµÈ Header °ü·Ã Á¤º¸´Â ´ÙÀ½°ú °°´Ù. 1. Expires : ÇØ´ç ¸®¼Ò½ºÀÇ ¸¸·áÀÏÀÚ¸¦ ÁöÁ¤ÇÑ´Ù. Locale´Â US·Î ÇØ¾ß Çϸç, TimeZoneÀº GMT·Î ¼³Á¤ÇØ¾ß ÇÑ´Ù. 2. ETag : Entity TagÀÇ ¾àÀÚ·Î °¢ Entity(html, gif, jpg µî ¼¹ö¿¡¼ ´Ù¿î¹ÞÀº ¸®¼Ò½º)¸¦ ±¸ºÐÇϱâ À§ÇÑ À¯ÀÏÇÑ Å°°ªÀ¸·Î ºê¶ó¿ìÀú¿¡¼´Â ETag °ªÀ¸·Î ¼¹ö¿¡ ÀÖ´Â ¸®¼Ò½º¿Í Ŭ¶óÀ̾ðÆ®¿¡ ÀÖ´Â ¸®¼Ò½º°¡ ÀÏÄ¡ÇÏ´ÂÁö ÆÇ´ÜÇÑ´Ù. 3. Last-Modified : ÇØ´ç ¸®¼Ò½ºÀÇ ÃÖÁ¾ ¼öÁ¤ÀÏÀÚ¸¦ ÁöÁ¤ÇÑ´Ù. Locale´Â US·Î ÇØ¾ß Çϸç, TimeZoneÀº GMT·Î ¼³Á¤ÇØ¾ß ÇÑ´Ù. ÀϹÝÀûÀ¸·Î À§ÀÇ ¼¼°¡Áö °ªÀ» ¾î¶»°Ô ¼³Á¤ÇÏ´À³Ä¿¡ µû¶ó ¾îÁ¦ Æ÷½ºÆÃÇÑ JavaScriptÀ» gzipÀ¸·Î ¾ÐÃàÇÏ´Â ¼Ò½º¿Í °áÇÕÇÏ¸é ¾Æ·¡¿Í °°´Ù. package tester;
import java.io.*; import com.inswave.util.*; public class Test extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { byte[] jsSource = "alert('test123');".getBytes(); response.setContentType("text/javascript"); // ¸¸·áÀÏÀº ¼³Á¤ÆÄÀÏ¿¡¼ Àоî¿Â´Ù. ±âº»°ªÀº ÇöÀçÀÏ + 1³â - 1ÀÏ·Î{HTTP 1.1ÀÇ Never Expired) ¼³Á¤ÇÑ´Ù. (ÀÌ °ªÀÌ ¼³Á¤µÇ¾î¾ß ¼¹ö¿¡ ¿äûÀ» º¸³»Áö ¾Ê´Â´Ù.) // ½ÇÁ¦ ÆÄÀÏ »ý¼ºÀÏÀ» ºôµå½ÃÁ¡¿¡ °¡Á®¿Â´Ù. // ÆÄÀÏÀÇ º¯°æÀ» ºê¶ó¿ìÀú¿¡¼ üũÇÒ ¶§ »ç¿ëÇÏ´Â °ªÀ¸·Î ·£´ýÇÏ¸é¼ À¯ÀÏÇÑ °ªÀ» ³»·Áº¸³½´Ù. ÆÄÀÏÀÌ º¯°æµÇ±â Àü¿¡´Â º¯°æµÉ ÇÊ¿ä°¡ ¾ø´Ù. out = response.getOutputStream(); } finally { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ÀÚ ÀÌÁ¦ JavaScript¸¦ ¾ÐÃàÇÏ°í ij½ÌÇϱâ À§ÇÑ ¼¹ö ¸ðµâÀ» ¿Ï¼ºÇÏ¿´´Ù. ÀÌÁ¦ Ŭ¶óÀ̾ðÆ®¿¡¼ ¾î¶»°Ô È£ÃâÇØ¾ß ÇÏ´ÂÁö ¾Ë¾Æº¸°Ú´Ù. ¼Ò½º´Â ¾Æ·¡¿Í °°´Ù. var oXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
var url = "/tester1"; oXmlHttp.open("GET", url, true); oXmlHttp.send( null ); ÀÌ ÂªÀº ¼Ò½º¿¡´Â ¸î°¡Áö Áß¿äÇÑ »çÇ×À» ´ã°í ÀÖ´Ù. ÀÚ ÀÌÁ¦ HTTP 1.1 Áß ÇÊ¿äÇÑ ½ºÆÑ°ú ¼¹ö ¼Ò½º¿Í Ŭ¶óÀ̾ðÆ® ¼Ò½º¸¦ Á¤¸®Çß´Ù. ÀÌ ¼Ò½º¿¡¼ ¼¹öÀÇ ¼Ò½º°¡ º¯°æµÇ´õ¶óµµ ij½Ã°¡ °»½ÅµÇÁö ¾Ê´Â ¹®Á¦Á¡ÀÌ ÀÖ´Ù. ±× ºÎºÐ¿¡ ´ëÇÑ ÇØ°á ¹æ¾ÈÀº ´ÙÀ½ Æ÷½ºÆ®¿¡¼ ´Ù·ï º¸µµ·Ï ÇÏ°Ú´Ù. |