Aktifkan IIS7 gzip


229

Bagaimana saya bisa mengaktifkan IIS7 untuk gzip file statis seperti js dan css dan bagaimana saya bisa menguji apakah IIS7 benar-benar gziping mereka sebelum mengirim ke klien?

Jawaban:


243

Konfigurasi

Anda dapat mengaktifkan kompresi GZIP sepenuhnya di Web.configfile Anda . Ini sangat berguna jika Anda menggunakan hosting bersama dan tidak dapat mengonfigurasi IIS secara langsung, atau Anda ingin konfigurasi Anda dijalankan di antara semua lingkungan yang Anda targetkan.

<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>

Pengujian

Untuk menguji apakah kompresi berfungsi atau tidak, gunakan alat pengembang di Chrome atau Firebug untuk Firefox dan pastikan tajuk respons HTTP diatur:

Content-Encoding: gzip

Perhatikan bahwa tajuk ini tidak akan ada jika kode responsnya 304 (Tidak Dimodifikasi). Jika demikian, lakukan penyegaran penuh (tahan shift atau kontrol saat Anda menekan tombol penyegaran) dan periksa lagi.


@DenNukem, maaf saya tidak begitu yakin. Saya hanya menguji ini pada IIS7. Adakah yang mau berkomentar?
Drew Noakes

21
Hati-hati - ini hanya berfungsi jika bagian httpCompression di applicationhost.config tidak terkunci. Secara default, bagian ini dikunci untuk modifikasi, jadi mengganti di web.config tidak berfungsi. Terbuang beberapa jam untuk ini. stackoverflow.com/a/2894695/245460 , lihat komentar di bawah artikel.
Karel Kral

Pastikan fitur yang diinstal dari Peran Web, dan juga, dari MSDN: "Anda juga dapat menambahkan entri wildcard untuk tipe MIME. Namun, Anda dapat mengatur tipe MIME hanya untuk level server web. Misalnya, untuk mengaktifkan kompresi statis untuk semua tipe MIME untuk situs web default, pertama tambahkan entri wildcard untuk tipe MIME untuk tingkat server, dan kemudian aktifkan kompresi statis untuk situs web default. "
Luke Puplett

12
Kompresi dinamis juga tidak akan berfungsi kecuali Anda memiliki modul Kompresi Konten Dinamis yang diinstal pada Server (dapat dicapai melalui penginstal platform web). Anda akan membutuhkan ini jika Anda menggunakan bundel Css / Js.
Markus

hanya css yang dikompresi, .jstidak. Juga, coba tambahkan application/x-javascript. Menggunakan bersama-sama dengan kucing jantan, maka dihapus directoryparameternya.
coding_idiot

58

Anda harus mengaktifkan fitur di panel kontrol Fitur Windows:

Tangkapan layar fitur IIS


16
Di Windows Server 2008 R2, ini terletak di bawah Server Manager> Peran> Web Server (IIS). Klik "Tambahkan Layanan Peran" di bagian "Peran". "Kompresi Konten Dinamis" terdaftar di bawah tajuk "Kinerja".
Jonathan Little

37

Gzip Global dalam HttpModule

Jika Anda tidak memiliki akses ke instance IIS akhir (shared hosting ...) Anda dapat membuat HttpModule yang menambahkan kode ini ke setiap acara 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;

Pengujian

Kudos, tidak ada solusi yang dilakukan tanpa pengujian. Saya suka menggunakan plugin Firefox " Liveheaders " yang menunjukkan semua informasi tentang setiap pesan http antara browser dan server, termasuk kompresi, ukuran file (yang dapat Anda bandingkan dengan ukuran file di server).


3
Saya menggunakan shared hosting dan tidak perlu menulis kode apa pun untuk mengaktifkan kompresi keluaran GZIP. Itu mungkin melalui Web.config saja. Lihat jawaban saya: stackoverflow.com/questions/702124/enable-iis7-gzip/…
Drew Noakes

2
Saya menempatkan tiga baris pertama di awal halaman satu aspx yang ingin saya kompres, dan berhasil! Terima kasih! Ini jauh lebih mudah daripada pendekatan lain, dan ini bekerja pada IIS 6 untuk saya.
DenNukem

1
Ini benar-benar cara untuk melakukannya.
Matthew James Davis


2

Saya hanya perlu menambahkan fitur di fitur windows seperti yang disebutkan Charlie. Bagi orang yang tidak dapat menemukannya di windows 10 atau server 2012+ menemukannya seperti di bawah ini. Saya sedikit kesulitan

Windows 10

masukkan deskripsi gambar di sini

windows server 2012 R2

masukkan deskripsi gambar di sini

jendela server 2016

masukkan deskripsi gambar di sini


1

Jika Anda menggunakan YSlow dengan Firebug dan menganalisis kinerja halaman Anda, YSlow pasti akan memberi tahu Anda apa artefak pada halaman Anda yang tidak gzip!





0

Untuk semua orang miskin yang harus berjuang dengan Server Jerman / deutsche :)

auf deutsch bitte schön

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.