مقدمة للمبدأ
يمكن لضغط HTTP أن يحسن بشكل كبير سرعة تصفح مواقع الويب. مبدأه هو أنه بعد أن يطلب العميل الموارد المقابلة من الخادم، يتم ضغط ملفات الموارد من الخادم ثم إخراجها إلى العميل، ويكون متصفح العميل مسؤولاً عن فك الضغط والتصفح . بالمقارنة مع عملية التصفح العادية لـ HTML وCSS وJavascript وText، يمكنها توفير حوالي 40% من حركة المرور. والأهم من ذلك، أنه يمكنه أيضًا ضغط صفحات الويب التي تم إنشاؤها ديناميكيًا بما في ذلك CGI وPHP وJSP وASP وServlet وSHTML وما إلى ذلك، كما أن كفاءة الضغط عالية جدًا أيضًا.
طريقة التكوين
يدعم الإصدار 5.0 من Tomcat والإصدارات الأحدث ضغط محتوى الإخراج باستخدام تنسيق الضغط gzip.
قم بتعديل %TOMCAT_HOME%/conf/server.xml وقم بمراجعة العقد كما يلي:
<منفذ الموصل = "80" بروتوكول = "HTTP/1.1" اتصال Timeout = "20000" redirectPort = "8443" المنفذ = "tomcatThreadPool" URIEncoding = "utf-8" ضغط = "on" PressureMinSize = "50" noCompressionUserAgents = "gozilla , ترافياتا"compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" />
كما يتبين من خصائص العقدة أعلاه، لاستخدام وظيفة ضغط gzip، تحتاج إلى إضافة الخصائص التالية إلى عقدة الموصل
•compression="on" يقوم بتشغيل وظيفة الضغط
•compressionMinSize = "50" تمكين حجم محتوى إخراج الضغط، الافتراضي هو 2 كيلو بايت
•noCompressionUserAgents="gozilla, traviata" تعطيل الضغط للمتصفحات التالية
•compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" ما هي أنواع الموارد التي يجب ضغطها
طريقة الاختبار
بعد تمكين وظيفة الضغط TOMCAT، كيف يمكننا اختبار ما إذا كان الضغط فعالاً؟
بادئ ذي بدء، يحدد Tomcat ما إذا كان المتصفح يدعم وظيفة الضغط بناءً على ترميز القبول في رأس طلب المتصفح. إذا كانت هذه القيمة تحتوي على gzip، فهذا يعني أن المتصفح يدعم تصفح محتوى gzip المضغوط. يمكننا استخدام طريقتين للتحقق من ذلك وظيفة الضغط هي نافذة المفعول.
الطلب المباشر عبر المتصفح
يصل الجميع مباشرة إلى الخادم مع تمكين تكوين الضغط من خلال المتصفح، ثم يستخدمون أداة التقاط الحزم لعرض حزم البيانات الملتقطة. إذا كان هناك الكثير من المحتوى الذي لا يمكنك فهمه، فهذا يعني أنه تم تمكين وظيفة الضغط.
ومن خلال محاكاة الطلبات من خلال البرنامج، نستخدم httpclient لكتابة برنامج اختبار بسيط، ويكون الكود كما يلي:
@Test public void testGzip() { HttpClient httpClient = new HttpClient(); GetMethod = new GetMethod("http://localhost/admin.jsp"); deflate"); getMethod.addRequestHeader("user-agent",Mozilla/4.0 (متوافق; MSIE 6.0; Windows NT 5.0; Alexa Toolbar; Maxthon 2.0)"); int result = httpClient.executeMethod(getMethod); if (result == 200) { System.out.println(getMethod.getResponseContentLength()); String html = getMethod.getResponseBodyAsString(); System.out.println(html); } } Catch (HttpException e) { e.printStackTrace();
قم بتنفيذ برنامج junit هذا وشاهد المحتوى الذي سيخرجه. إذا كان الناتج عبارة عن بعض الأحرف المشوشة وكان طول المحتوى المطبوع أصغر بكثير من الطول الفعلي، فهذا يعني أن التكوين الخاص بنا قد أصبح ساري المفعول من خلال بعض أدوات التحقق الأخرى تجد أنه سيتم تحسين سرعة تصفح الموقع بشكل ملحوظ.
ملاحظة: إذا وجدت أن المحتوى غير مضغوط، فيمكنك التفكير في تعديل حجم PressureMinSize إذا كان المورد المطلوب أصغر من هذه القيمة، فلن يتم تمكين الضغط.