ความรู้เบื้องต้นเกี่ยวกับหลักการ
การบีบอัด HTTP สามารถปรับปรุงความเร็วของการเรียกดูเว็บไซต์ได้อย่างมาก หลักการคือ หลังจากที่ไคลเอนต์ร้องขอทรัพยากรที่เกี่ยวข้องจากเซิร์ฟเวอร์ ไฟล์ทรัพยากรจะถูกบีบอัดจากเซิร์ฟเวอร์แล้วส่งออกไปยังไคลเอนต์ เบราว์เซอร์ของไคลเอนต์มีหน้าที่รับผิดชอบในการขยายขนาดและการเรียกดู . เมื่อเทียบกับกระบวนการเรียกดูทั่วไปของ HTML, CSS, Javascript และ Text สามารถประหยัดการเข้าชมได้ประมาณ 40% ที่สำคัญยังสามารถบีบอัดหน้าเว็บที่สร้างแบบไดนามิกเช่น CGI, PHP, JSP, ASP, Servlet, SHTML เป็นต้น และประสิทธิภาพการบีบอัดก็สูงมากเช่นกัน
วิธีการกำหนดค่า
Tomcat 5.0 และเวอร์ชันใหม่กว่ารองรับการบีบอัดเนื้อหาเอาต์พุต โดยใช้รูปแบบการบีบอัด gzip
แก้ไข %TOMCAT_HOME%/conf/server.xml และแก้ไขโหนดดังต่อไปนี้:
<พอร์ตตัวเชื่อมต่อ = "80" protocol = "HTTP/1.1" ConnectionTimeout = "20000" เปลี่ยนเส้นทางพอร์ต = "8443" ผู้ดำเนินการ = "tomcatThreadPool" URIEncoding = "utf-8" การบีบอัด = "บน" การบีบอัดMinSize = "50" noCompressionUserAgents = "gozilla , traviata" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" />
ดังที่เห็นได้จากคุณสมบัติของโหนดด้านบน หากต้องการใช้ฟังก์ชันการบีบอัด gzip คุณจะต้องเพิ่มคุณสมบัติต่อไปนี้ให้กับโหนดตัวเชื่อมต่อ
•compression="on" จะเปิดฟังก์ชันการบีบอัด
•compressionMinSize="50" เปิดใช้งานขนาดเนื้อหาเอาต์พุตการบีบอัด ค่าเริ่มต้นคือ 2KB
•noCompressionUserAgents="gozilla, traviata" ปิดใช้งานการบีบอัดสำหรับเบราว์เซอร์ต่อไปนี้
•compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" ทรัพยากรประเภทใดที่ต้องบีบอัด
วิธีการทดสอบ
หลังจากเปิดใช้งานฟังก์ชันการบีบอัด TOMCAT แล้ว เราจะทดสอบว่าการบีบอัดมีประสิทธิภาพได้อย่างไร
ก่อนอื่น Tomcat จะกำหนดว่าเบราว์เซอร์รองรับฟังก์ชันการบีบอัดตามการยอมรับการเข้ารหัสในส่วนหัวคำขอของเบราว์เซอร์หรือไม่ หากค่านี้มี gzip แสดงว่าเบราว์เซอร์รองรับการเรียกดูเนื้อหาที่บีบอัดของ gzip เราสามารถใช้สองวิธีในการตรวจสอบว่า ฟังก์ชั่นการบีบอัดคือ Take effect
คำขอโดยตรงผ่านเบราว์เซอร์
ทุกคนเข้าถึงเซิร์ฟเวอร์โดยตรงโดยเปิดใช้งานการกำหนดค่าการบีบอัดผ่านเบราว์เซอร์ จากนั้นใช้เครื่องมือจับภาพแพ็คเก็ตเพื่อดูแพ็คเก็ตข้อมูลที่บันทึกไว้ หากมีเนื้อหาจำนวนมากที่คุณไม่เข้าใจ แสดงว่าฟังก์ชันการบีบอัดถูกเปิดใช้งานแล้ว
โดยการจำลองคำขอผ่านโปรแกรม เราใช้ httpclient เพื่อเขียนโปรแกรมทดสอบอย่างง่าย โดยมีโค้ดดังนี้
@ทดสอบโมฆะสาธารณะ testGzip() { HttpClient httpClient = new HttpClient(); GetMethod getMethod = new GetMethod("http://localhost/admin.jsp"); ลอง { getMethod.addRequestHeader("accept-encoding", "gzip, ยุบ"); getMethod.addRequestHeader("user-agent", "Mozilla/4.0 (เข้ากันได้; MSIE 6.0; Windows NT 5.0; แถบเครื่องมือ Alexa; Maxthon 2.0)"); int result = httpClient.executeMethod(getMethod); { System.out.println(getMethod.getResponseContentLength()); String html = getMethod.getResponseBodyAsString(); System.out.println(html.getBytes().length); HttpException e) { e.printStackTrace(); } จับ (IOException จ) { e.printStackTrace(); } ในที่สุด { getMethod.releaseConnection();
รันโปรแกรม Junit นี้และดูว่าเนื้อหาใดที่ส่งออกไป หากผลลัพธ์เป็นอักขระที่อ่านไม่ออกและความยาวของเนื้อหาที่พิมพ์น้อยกว่าความยาวจริงมาก นั่นหมายความว่าการกำหนดค่าของเรามีผลผ่านเครื่องมือตรวจสอบอื่น ๆ พบว่าความเร็วในการเรียกดูเว็บไซต์จะดีขึ้นอย่างเห็นได้ชัด
หมายเหตุ: หากคุณพบว่าเนื้อหาไม่ได้ถูกบีบอัด คุณสามารถพิจารณาปรับขนาดการบีบอัด MinSize ได้ หากทรัพยากรที่ร้องขอมีขนาดเล็กกว่าค่านี้ การบีบอัดจะไม่ถูกเปิดใช้งาน