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?

Paulo
sumber

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.

Drew Noakes
sumber
@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

Charlie
sumber
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).

missaghi
sumber
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
5

di bawah windows 2012 r2 dapat ditemukan di sini:

masukkan deskripsi gambar di sini

Sebastian 506563
sumber
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

Ashkan Sirous
sumber
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!

jadusty
sumber
0

Coba Firefox dengan add-on Firebug terinstal. Saya menggunakannya; alat hebat untuk pengembang web.

Saya telah mengaktifkan kompresi Gzip juga di IIS7 saya menggunakan web.config.

pengguna495450
sumber
Google juga memiliki tes halaman yang tersedia: developers.google.com/speed/pagespeed/insights
Dr. Aaron Dishno
0

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

auf deutsch bitte schön

Stefan Michev
sumber