Jadi, saya sedikit dari IIS7 n00b tetapi saya telah menggunakan sebagian besar sistem IIS lama kembali ke 3. Saya mencoba untuk menghidupkan kompresi dinamis dan itu berfungsi, kebanyakan. Tidak berfungsi untuk permintaan Layanan Data ADO.Net saya (Astoria), batched atau tidak.
Saya menemukan penelusuran permintaan gagal (FREB) yang sangat membantu. Dan apa yang saya lihat pada permintaan yang tidak cocok adalah Reason Code 12, NO_MATCHING_CONTENT_TYPE
. OK, jadi saya tidak menentukan jenis MIME yang cocok, itu mudah.
Kecuali ini yang saya miliki di web.config saya (yang menurut saya benar, tapi mungkin tidak).
<httpCompression dynamicCompressionDisableCpuUsage="100"
dynamicCompressionEnableCpuUsage="100"
noCompressionForHttp10="false"
noCompressionForProxies="false"
noCompressionForRange="false"
sendCacheHeaders="true"
staticCompressionDisableCpuUsage="100"
staticCompressionEnableCpuUsage="100">
<dynamicTypes>
<clear/>
<add mimeType="*/*"
enabled="true" />
</dynamicTypes>
<staticTypes>
<clear/>
<add mimeType="*/*"
enabled="true" />
</staticTypes>
</httpCompression>
<urlCompression doDynamicCompression="true"
doStaticCompression="true"
dynamicCompressionBeforeCache="false" />
Sekarang saya berpikir bahwa ini berarti harus memampatkan setiap permintaan yang menyertakan header Terima: Gzip. Saya ingin tahu apa yang dipikirkan orang lain di sini.
Jejak pemain biola saya:
GET /SecurityDataService.svc/GetCurrentAccount HTTP/1.1
Accept-Charset: UTF-8
Accept-Language: en-us
dataserviceversion: 1.0;Silverlight
Accept: application/atom+xml,application/xml
maxdataserviceversion: 1.0;Silverlight
Referer: http://sdev03/apptestpage.aspx
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.21022; .NET CLR 3.5.30729; InfoPath.2; .NET CLR 3.0.30729; OfficeLiveConnector.1.4; OfficeLivePatch.1.3)
Host: sdev03
Connection: Keep-Alive
Cookie: .ASPXAUTH=<snip>
HTTP/1.1 200 OK
Cache-Control: no-cache
Content-Type: application/atom+xml;charset=utf-8
Server: Microsoft-IIS/7.0
DataServiceVersion: 1.0;
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Date: Mon, 22 Mar 2010 22:29:06 GMT
Content-Length: 2726
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
*** <snip> removed ***
sumber
"C:\Windows\System32\Inetsrv\Appcmd.exe" set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/javascript',enabled='True']" /commit:apphost
Dan lagi: setelah perubahan ini dibuat - Anda akan melihatnya hanya di notepad. Notepad ++ (dan juga editor Visual Studio 2010 !!)Jawaban:
OK, ternyata Anda tidak bisa mengonfigurasi ini di web.config, hanya appHost.config. Saya kira dokumen mengatakan appHost.config tapi saya berasumsi itu adalah spesifikasi dari konsep umum, bukan satu-satunya lokasi konfigurasi yang diijinkan.
sumber
web.config
penggantian pengaturan kompresi, itulah sebabnya Anda harus memodifikasiapplicationHost.config
. Alih-alih mengubah pengaturan kompresi di sana, Anda hanya dapat membiarkan penggantian, dan Anda kembali dalam bisnis.Peter, terima kasih atas petunjuknya - kami juga menemukan pengaturan itu
di
<httpCompression>
bagianapplicationHost.config
diperbaiki ini.Kami juga harus menentukan pengkodean karena bug dalam kode kompresi:
Inilah bagian yang relevan secara penuh
sumber
Dari instalasi baru,
applicationHost.config
(dalam%windir%\system32\inetsrv\config
) saya memiliki pengaturan berikut:... serta serangkaian standar tipe MIME untuk mengompres itu, sayangnya, tidak termasuk JSON dan tipe data lain yang akan menjadi kandidat kompresi yang baik.
Beralih ke:
mengaktifkan konfigurasi
httpCompression
tag di bawahsystem.webServer
tag di myweb.config
.Saya mengkonfirmasi ini dengan mengatur
httpCompression
bagianapplicationHost.config
ke:... dan sekarang saya dapat mengatur semua tipe MIME yang sebenarnya ingin saya kompres di
web.config
.sumber
httpCompression
elemen untuk bekerja padaweb.config
level di versi IIS yang lebih baru atau apakah itu mustahil? Documents adalah mimpi buruk - sepertinya tidak mengatakan apa kesepakatan itu resmi di mana saja.Untuk menambahkan mimetipe yang hilang dari PowerShell, gunakan perintah berikut:
Perhatikan bahwa urutan mimeTypes penting, karena IIS tampaknya mengambil kecocokan pertama. Ini berarti bahwa mimeTypes dengan wildcard (*) harus di bawah mimeTypes tanpa wildcard. Oleh karena itu pastikan mimeType
*/*
ada di bagian bawah, karena setiap entri di bawahnya tidak akan digunakanEdit:
IIS menyebalkan, jadi opsi terbaik adalah dengan hanya menghapus staticTypes dan menambahkan semuanya kembali dalam urutan yang benar:
sumber