2013-05-20 24 views
27

Tôi đã thêm các dòng sau vào tệp conf/server.xml của tomcat để cho phép nén gzip nhưng không hoạt động. Các trang vẫn chưa giải nén.Nén Tomcat 7 GZIP không hoạt động

<Connector port="8080" 
     compression="on" 
     compressionMinSize="2048" 
     noCompressionUserAgents="gozilla, traviata" 
     compressableMimeType="text/html,text/xml,text/plain,text/css, 
     text/javascript,text/json,application/x-javascript, 
     application/javascript,application/json"/> 

Bất kỳ ý tưởng nào?

+0

chưa bao giờ thấy biểu mẫu như vậy, sẽ rất thú vị nếu một số giải pháp xuất hiện. Chỉ dành cho bạn thông tin - trong dự án của chúng tôi, chúng tôi sử dụng cách sau http://blog.max.berger.name/2010/01/jetty-7-gzip-filter.html – Dewfy

+3

Trường hợp Tomcat của bạn được Apache đặt trước trên cổng 80 hoặc là Tomcat truy cập trực tiếp trên cổng 8080? –

+0

hi david..u là đúng .. nó là fronted bởi apache trên cổng 80 và đó là lý do tôi nhận được các tập tin không nén ... khi tôi truy cập tomcat của tôi trên cổng 8080, tôi nhận được các tập tin nén .... cảm ơn cho trỏ tôi đi đúng hướng .. –

Trả lời

30

Nếu Tomcat đứng trước Apache trên cổng 80, bạn sẽ cần phải bật tính năng nén trong chính Apache. Nén trong Tomcat sẽ chỉ hoạt động nếu bạn truy cập trực tiếp vào cổng 8080.

3

Tôi đã thử nghiệm các thay đổi tương tự trong môi trường phát triển địa phương của mình và thất vọng rằng nó không hoạt động.

Vấn đề của tôi là tôi đã chỉnh sửa cài đặt Tomcat cục bộ của mình (C: \ apache-tomcat-8.0.5) mà tôi đã chọn khi sử dụng hộp thoại Servers window -> (right-click) -> New -> Server trong Spring Tool Suite.

Tuy nhiên, khi được xuất bản, thư mục tomcat thực tế đang được sử dụng nằm ở (thư mục không gian làm việc) \. Metadata \ .plugins \ org.eclipse.wst.server.core \ tmp0.

Bạn có thể kiểm tra vị trí xuất bản bởi kích chuột phải vào máy chủ và chọn "Browse triển khai vị trí ..."

enter image description here

Từ đó bạn có thể cập nhật các tập tin thích hợp server.xml, hoặc bạn có thể xóa và thêm lại máy chủ.

3

Trong trường hợp của tôi, nó không hoạt động vì Antivirus (ESET, Windows)

Nó đã được gắn ở đâu đó trước trình duyệt. Nó giải nén nội dung và loại bỏ tiêu đề "Mã hóa nội dung". Đối với phản hồi của trình duyệt trông giống như phản hồi bình thường không được nén. Ngay cả trong Fiddler nó đã được giải nén.

Phản hồi Https đang hoạt động, nhưng http resposes đã được giải mã bởi ESET.

Không đủ. Tắt ESET. Tôi phải đi đến "cài đặt nâng cao" -> "Bảo vệ truy cập web" -> "HTTP, HTTPS" và tắt nó ở đó

Nếu bạn phân phát tệp từ ổ đĩa cứng, bạn có thể cần thêm tùy chọn sử dụngSendFile = "false" vào kết nối.

7

Trên Windows, tôi gặp phải hành vi này trong khi cố gắng tạm thời bật nén nội dung trong môi trường phát triển của mình để hiểu rõ tổng trọng tải của một trang trong ứng dụng của tôi.

Tôi có thể xác nhận rằng ESET NOD32 Antivirus hoạt động theo cách mà @bugs_ mô tả trong câu trả lời cho câu hỏi này và tôi cũng có thể xác nhận rằng Fiddler4 đang chạy có cùng tác dụng. Tuy nhiên, cả hai đều đóng Fiddler và vô hiệu hóa chức năng quét HTTP NOD32 đã không giải quyết vấn đề, để làm điều đó, tôi đã phải vô hiệu hóa việc sử dụng các 'sendfile' trong kết nối của tôi như sau:

<Connector port="8080" protocol="HTTP/1.1" 
      connectionTimeout="20000" 
      compression="on" compressionMinSize="8192" useSendfile="false" 
      compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript" 
      redirectPort="8443" /> 

Thuộc tính quan trọng, ở đây, là useSendfile="false"

Tôi đang sử dụng Apache Tomcat 8, trong Windows.Tài liệu Tomcat (http://tomcat.apache.org/tomcat-8.0-doc/config/http.html) nói sau đây về useSendfile:

Sử dụng thuộc tính này để bật hoặc tắt khả năng gửi tệp. Giá trị mặc định là true. Lưu ý rằng việc sử dụng sendfile sẽ vô hiệu hóa bất kỳ nén nào mà Tomcat có thể đã thực hiện trên phản hồi.

Và đây về compression:

Có một sự cân bằng giữa việc sử dụng nén (tiết kiệm băng thông của bạn) và sử dụng các tính năng sendfile (tiết kiệm chu kỳ CPU của bạn). Nếu trình kết nối hỗ trợ tính năng gửi tệp, ví dụ: kết nối NIO, sử dụng sendfile sẽ được ưu tiên hơn nén. Các triệu chứng sẽ là các tệp tĩnh lớn hơn mà 48 Kb sẽ được gửi không nén. Bạn có thể tắt sendfile bằng cách thiết lập thuộc tính useSendfile của connector, như được ghi dưới đây, hoặc thay đổi ngưỡng sử dụng sendfile trong cấu hình của DefaultServlet trong conf/web.xml mặc định hoặc trong web.xml của ứng dụng web của bạn.

+0

Trong trường hợp của tôi đã chuyển đủ ESET. Bởi vì tomcat của tôi không phục vụ các tập tin từ đĩa. –

+0

Cũng vậy với Tomcat 9 (https://tomcat.apache.org/tomcat-9.0-doc/config/http.html) – Drakonoved