Kích hoạt gạc IIS7


229

Làm cách nào tôi có thể kích hoạt IIS7 để gzip các tệp tĩnh như js và css và làm cách nào để kiểm tra xem IIS7 có thực sự nén chúng trước khi gửi cho khách hàng không?

Câu trả lời:


243

Cấu hình

Bạn có thể kích hoạt nén GZIP hoàn toàn trong Web.configtệp của mình . Điều này đặc biệt hữu ích nếu bạn đang sử dụng lưu trữ chia sẻ và không thể định cấu hình trực tiếp IIS hoặc bạn muốn cấu hình của mình thực hiện giữa tất cả các môi trường bạn nhắm mục tiêu.

<system.webServer>
  <httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll"/>
    <dynamicTypes>
      <add mimeType="text/*" enabled="true"/>
      <add mimeType="message/*" enabled="true"/>
      <add mimeType="application/javascript" enabled="true"/>
      <add mimeType="*/*" enabled="false"/>
    </dynamicTypes>
    <staticTypes>
      <add mimeType="text/*" enabled="true"/>
      <add mimeType="message/*" enabled="true"/>
      <add mimeType="application/javascript" enabled="true"/>
      <add mimeType="*/*" enabled="false"/>
    </staticTypes>
  </httpCompression>
  <urlCompression doStaticCompression="true" doDynamicCompression="true"/>
</system.webServer>

Kiểm tra

Để kiểm tra xem tính năng nén có hoạt động hay không, hãy sử dụng các công cụ dành cho nhà phát triển trong Chrome hoặc Fireorms cho Firefox và đảm bảo tiêu đề phản hồi HTTP được đặt:

Content-Encoding: gzip

Lưu ý rằng tiêu đề này sẽ không xuất hiện nếu mã phản hồi là 304 (Không được sửa đổi). Nếu đó là trường hợp, hãy làm mới hoàn toàn (giữ shift hoặc điều khiển trong khi bạn nhấn nút refresh) và kiểm tra lại.


@DenNukem, xin lỗi tôi không chắc lắm. Tôi chỉ thử nghiệm điều này trên IIS7. Có ai quan tâm đến bình luận không?
Drew Noakes

21
Cẩn thận - nó chỉ hoạt động nếu phần httpCompression trong applicationationhost.config được mở khóa. Theo mặc định, phần này bị khóa để sửa đổi, do đó, ghi đè trong web.config không hoạt động. Đã lãng phí vài giờ về điều này. stackoverflow.com/a/2894695/245460 , xem bài viết dưới đây.
Karel Kral

Đảm bảo tính năng được cài đặt của Vai trò Web và từ MSDN: "Bạn cũng có thể thêm các mục nhập ký tự đại diện cho các loại MIME. Tuy nhiên, bạn chỉ có thể đặt các loại MIME cho cấp độ máy chủ web. Ví dụ: để bật nén tĩnh cho tất cả các loại MIME cho trang web mặc định, trước tiên hãy thêm các mục ký tự đại diện cho các loại MIME cho cấp máy chủ, sau đó kích hoạt tính năng nén tĩnh cho trang web mặc định. "
Luke Puplett

12
Nén động cũng sẽ không hoạt động trừ khi bạn đã cài đặt mô đun Nén nội dung động trên Máy chủ (có thể đạt được thông qua trình cài đặt nền tảng web). Bạn sẽ cần điều này nếu bạn đang sử dụng các gói Css / Js.
Đánh dấu

chỉ css được nén, .jskhông. Ngoài ra, đã thử thêm application/x-javascript. Sử dụng cùng với tomcat, do đó loại bỏ directorytham số.
mã hóa_idiot

58

Bạn sẽ cần bật tính năng này trong bảng điều khiển Tính năng của Windows:

Ảnh chụp màn hình tính năng IIS


16
Trong Windows Server 2008 R2, phần này nằm trong Trình quản lý máy chủ> Vai trò> Máy chủ web (IIS). Nhấp vào "Thêm dịch vụ vai trò" trong phần "Vai trò". "Nén nội dung động" được liệt kê dưới tiêu đề "Hiệu suất".
Jonathan Little

37

Gzip toàn cầu trong HTTPModule

Nếu bạn không có quyền truy cập vào phiên bản IIS cuối cùng (lưu trữ được chia sẻ ...), bạn có thể tạo một HTTPModule thêm mã này vào mọi sự kiện httpApplication.Begin_Request:

HttpContext context = HttpContext.Current;
context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
HttpContext.Current.Response.AppendHeader("Content-encoding", "gzip");
HttpContext.Current.Response.Cache.VaryByHeaders["Accept-encoding"] = true;

Kiểm tra

Kudos, không có giải pháp được thực hiện mà không cần thử nghiệm. Tôi thích sử dụng plugin " Liveheaders " của Firefox, nó hiển thị tất cả thông tin về mọi thông báo http giữa trình duyệt và máy chủ, bao gồm nén, kích thước tệp (mà bạn có thể so sánh với kích thước tệp trên máy chủ).


3
Tôi đang sử dụng lưu trữ được chia sẻ và không cần phải viết bất kỳ mã nào để cho phép nén đầu ra GZIP. Có thể thông qua Web.config một mình. Xem câu trả lời của tôi: stackoverflow.com/questions/702124/enable-iis7-gzip/iêu
Drew Noakes 26/03

2
Tôi đã đặt ba dòng đầu tiên ở đầu một trang aspx mà tôi muốn nén và nó hoạt động! Cảm ơn bạn! Điều này ít rắc rối hơn bất kỳ cách tiếp cận nào khác và nó hoạt động trên IIS 6 đối với tôi.
DenNukem

1
Đây hoàn toàn là cách để làm điều đó.
Matthew James Davis


2

Tôi chỉ cần thêm tính năng này trong các tính năng của windows như Charlie đã đề cập. Đối với những người không thể tìm thấy nó trên cửa sổ 10 hoặc máy chủ 2012+, hãy tìm nó như dưới đây. Tôi vật lộn một chút

Windows 10

nhập mô tả hình ảnh ở đây

máy chủ windows 2012 R2

nhập mô tả hình ảnh ở đây

máy chủ cửa sổ 2016

nhập mô tả hình ảnh ở đây


1

Nếu bạn sử dụng YSlow với Fireorms và phân tích hiệu suất trang của bạn, YSlow chắc chắn sẽ cho bạn biết những tạo tác nào trên trang của bạn không phải là gzip'd!





0

Dành cho tất cả những người nghèo phải vật lộn với Máy chủ tiếng Đức / deutsche :)

auf deutsch bitte schon

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.