IIS 7 संपीड़न के लिए कुछ निश्चित (लेकिन सभी नहीं) MIME प्रकारों को अनदेखा क्यों कर रहा है? त्रुटि प्रदान करना: DYNAMIC_COMPRESSION_NOT_SUCCESS - कारण 12


11

तो, मैं एक IIS7 n00b का एक सा हूँ, लेकिन मैं वापस जाने के लिए सबसे पुराने IIS सिस्टम का उपयोग किया है 3. मैं गतिशील संपीड़न को चालू करने की कोशिश कर रहा हूं और यह काम कर रहा है, ज्यादातर। यह मेरे ADO.Net डेटा सर्विस (एस्टोरिया) अनुरोधों, बैचेड या नहीं के लिए काम नहीं करता है।

मुझे असफल अनुरोध (FREB) ट्रेसिंग मिला , जो वास्तव में मददगार था। और जो कुछ मैंने देखा है, वह अप्रतिबंधित अनुरोधों पर है Reason Code 12, NO_MATCHING_CONTENT_TYPE। ठीक है, इसलिए मेरे पास मिलान MIME प्रकार निर्दिष्ट नहीं है, यह आसान है।

सिवाय इसके कि मेरे वेब में क्या है ।config (जो मुझे लगता है कि सही है, लेकिन शायद नहीं)।

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

अब मुझे लगता है कि इसका मतलब यह है कि किसी भी अनुरोध को स्वीकार करना चाहिए जिसमें स्वीकार करें: गज़िप शीर्षलेख शामिल हैं। मुझे यह जानकर अच्छा लगेगा कि दूसरे यहाँ क्या सोच सकते हैं।

मेरा फिडलर ट्रेस:

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

1
ApplicationHost.config को संपादित करने के लिए नोट का उपयोग न करें। आईआईएस द्वारा लागू नहीं किए जाने से पहले मैंने नोटपैड ++ (साथ ही विजुअल स्टूडियो 2010 के संपादक !!) में किए गए मेरे बदलावों को समझने से पहले कई घंटे बर्बाद किए हैं। डायनामिकटाइप्स / स्टेटिकटेप्स संग्रह में अतिरिक्त माइम टाइप को जोड़ने का वैकल्पिक तरीका एप्पीकैम का उपयोग करना है। "C:\Windows\System32\Inetsrv\Appcmd.exe" set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/javascript',enabled='True']" /commit:apphostऔर फिर से: इन परिवर्तनों के बाद - आप उन्हें केवल नोटपैड में देखेंगे। नोटपैड ++ (साथ ही विजुअल स्टूडियो 2010 के संपादक !!)
साशा

अलेक्जेंडर, मैं 100% निश्चित नहीं हूं कि मैं समझता हूं कि आप यहां क्या कह रहे हैं, लेकिन मैं निश्चित रूप से कह सकता हूं कि किसी भी पाठ संपादक के साथ IIS कॉन्फ़िगरेशन को संशोधित करना ठीक काम करता है। आपको एक संपादक से कठिनाई हो सकती है जो BOM मार्कर जोड़ता है, लेकिन इसके अलावा यह ठीक होना चाहिए। मेरे मामले में, यह नहीं था कि मैं इसे संपादित करने के लिए नोटपैड का उपयोग नहीं कर सकता, बस यह कि मैं गलत फ़ाइल को संपादित कर रहा था। सभी कॉन्फ़िगरेशन परिवर्तन web.config में नहीं किए जा सकते हैं जो एप्लिकेशन वेब रूट में है। कुछ सिस्टम फ़ोल्डर में appHost के खिलाफ बनाया जाना चाहिए।
पीटर ओहेलर्ट

6
@alexander: सच है, नोटपैड ++ जैसे 32-बिट एप्लिकेशन या 64-बिट विंडोज़ पर विज़ुअल स्टूडियो का उपयोग करके सिस्टम 32 फ़ोल्डर के लिए फ़ाइल पुनर्निर्देशन को ट्रिगर करने के लिए WOW64 मिलेगा। संपादन C: \ WINDOWS \ SysWOW64 में केवल 32-बिट प्रोग्राम के लिए एक क्लोन बनाएगा और इसका उपयोग कभी भी IIS द्वारा नहीं किया जाएगा जो कि 64-बिट प्रोग्राम है
फ्रेड्रिक हाग्लंड

नोटपैड वास्तव में काम करता है ... नोटपैड ++ और विजुअल स्टूडियो पुनर्निर्देशित हो जाते हैं।
ब्रायन व्हाइट

@FredrikHaglund पवित्र धूम्रपान करता है। मैं कुछ स्पष्टीकरण के साथ अपने स्वयं के उत्तर में उस टिप्पणी को डालने का सुझाव दूंगा ... मुझे नहीं पता था कि ऐसा कुछ हो रहा होगा, और अगर मैं आपकी टिप्पणी नहीं देख रहा था, तो वह कई और घंटों तक मेरी पूंछ का पीछा कर रहा होगा। (साशा और ब्रायन व्हाइट के लिए भी जिन्होंने इस मुद्दे का उल्लेख किया, लेकिन आपकी टिप्पणी समस्या के दिल के सबसे करीब लगती है।)
बेस्का

जवाबों:


7

ठीक है, पता चला है कि आप इसे web.config में कॉन्फ़िगर नहीं कर सकते, केवल appHost.config। मुझे लगा कि डॉक्स ने appHost.config कहा है, लेकिन मैंने मान लिया था कि यह एक सामान्य अवधारणा का विनिर्देश है, केवल स्वीकार्य कॉन्फ़िगरेशन स्थान नहीं।


सही बात। system.webServer कॉन्फ़िगरेशन वेब साइट स्तर पर httpCompression की अनुमति नहीं देता है। आप उसी को रूट पर कॉन्फ़िगर कर सकते हैं जैसे कि applicationhost.config।
विवेक कुंभार

हम्म .. डॉक्स कहते हैं कि इसे web.config स्तर पर लागू किया जा सकता है - नीचे तक स्क्रॉल करें: msdn.microsoft.com/en-us/library/ms690689(v=vs.90).aspx और "कॉन्फ़िगरेशन स्थानों को देखें" तालिका .. क्या यह प्रलेखन में एक समस्या है?
avs099

@ avs099 मुझे नहीं पता। जब मैंने इसे 3 साल पहले पोस्ट किया था, तो मुझे यकीन है कि मैंने web.config से शुरुआत की थी और मैंने b / c पोस्ट किया था यह काम नहीं कर रहा था। हो सकता है कि पैच में कार्यक्षमता बदल गई हो या डॉक्स गलत हो। पता लगाने के लिए परीक्षण करना अच्छा होगा।
पीटर ओहलर्ट

1
ओह - हो सकता है कि मैं स्पष्ट नहीं था - जिस तरह से मैं प्रलेखन पढ़ता हूं, वह कहता है कि httpCompression Web.config में उपयोग किया जा सकता है - लेकिन मैं इसे काम करने में सक्षम नहीं था इसलिए मैंने एप्लीकेशनहॉस्ट.कॉन्फिग फ़ाइल को भी संशोधित किया। मुझे लगता है कि प्रलेखन की तरह भ्रामक है। मैं अपने उत्तर को SO पर यहाँ लिंक करूंगा: stackoverflow.com/a/20552186/1246870
avs099

मेरा उत्तर देखें - डिफ़ॉल्ट रूप से, एक साफ IIS इंस्टॉल web.configसंपीड़न सेटिंग्स के ओवरराइड को बंद कर देता है, यही वजह है कि आपको इसे संशोधित करना होगा applicationHost.config। हालांकि, वहाँ संपीड़न सेटिंग्स बदलने के बजाय, आप बस इसके बजाय ओवरराइड की अनुमति दे सकते हैं, और आप व्यवसाय में वापस आ गए हैं।
एमसीडब्ल्यू

3

पीटर, संकेत के लिए धन्यवाद - हमने उस सेटिंग को भी पाया

<add mimeType="application/atom+xml; charset=utf-8" enabled="true" />

इसे तय करने वाले <httpCompression>अनुभाग में applicationHost.config

हमें संपीड़न कोड में बग के कारण एन्कोडिंग निर्दिष्ट करना पड़ा :

संपीड़न कोड में एक बग है कि यह प्रतिक्रिया हेडर में चार्ट को सही ढंग से पार्स नहीं करता है, इसलिए आपको गतिशील संपीड़न सेटिंग्स में "एप्लिकेशन / xml; charset = utf-8" को कॉन्फ़िगर करना होगा ताकि यह काम कर सके।

यहां संबंधित अनुभाग पूर्ण है

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9" dynamicCompressionLevel="4" />
    <scheme name="deflate" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9" dynamicCompressionLevel="4" />
    <dynamicTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="application/x-javascript" enabled="true" />
        <add mimeType="application/atom+xml; charset=utf-8" 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>

3

एक नई स्थापना से, मेरी applicationHost.config(में %windir%\system32\inetsrv\config) निम्नलिखित सेटिंग थी:

<section name="httpCompression" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />

... के रूप में अच्छी तरह से संपीड़ित करने के लिए MIME प्रकारों का एक डिफ़ॉल्ट सेट, दुर्भाग्य से, JSON और अन्य डेटा प्रकारों को शामिल नहीं करता है जो अच्छे संपीड़न उम्मीदवार होंगे।

उस पर स्विच करना:

<section name="httpCompression" overrideModeDefault="Allow" />

httpCompressionटैग के तहत टैग का विन्यास सक्षम करता system.webServerहै मेरे में web.config

के httpCompressionअनुभाग को सेट करके मैंने इसकी पुष्टि की applicationHost.config:

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
    <dynamicTypes>
        <add mimeType="*/*" enabled="false" />
    </dynamicTypes>
    <staticTypes>
        <add mimeType="*/*" enabled="false" />
    </staticTypes>
</httpCompression>

... और अब मैं उन सभी MIME प्रकार सेट कर सकता हूं जिन्हें मैं वास्तव में संक्षिप्त करना चाहता हूं web.config


यह समस्या निवारण में मेरे लिए असफल अनुरोध अनुरेखण बहुत मददगार था: iis.net/learn/troubleshoot/use-failed-request-tracing/…
mcw

यह IIS8 + के लिए बिल्कुल काम नहीं करता है। क्या आपके पास IIS के नए संस्करणों httpCompressionमें web.configस्तर पर काम करने का कोई अनुभव है या यह असंभव है? डॉक्स एक बुरा सपना है - यह कहना नहीं लगता कि सौदा कहीं भी आधिकारिक है।
वेइतिमान

@ वेयटीमन - क्षमा करें, मैंने IIS8 + के साथ बिल्कुल काम नहीं किया है। सौभाग्य।
mcw

0

शब्‍दावली से गायब mimetypes जोड़ने के लिए, निम्‍न कमांड का उपयोग करें:

Add-WebConfiguration -Filter '/system.webServer/httpCompression/staticTypes' -PSPath 'IIS:\' -AtIndex 0 -Value @{mimeType='application/javascript'; enabled='True'}

Add-WebConfiguration -Filter '/system.webServer/httpCompression/staticTypes' -PSPath 'IIS:\' -AtIndex 0 -Value @{mimeType='image/svg+xml'; enabled='True'}

Add-WebConfiguration -Filter '/system.webServer/httpCompression/staticTypes' -PSPath 'IIS:\' -AtIndex 0 -Value @{mimeType='text/css'; enabled='True'}

ध्यान दें कि mimeTypes का क्रम महत्वपूर्ण है, क्योंकि IIS को पहला मैच लगता है। इसका अर्थ है कि वाइल्डकार्ड (*) के साथ माइमटेप्स वाइल्डकार्ड के बिना माइमटेप से नीचे होना चाहिए। इसलिए सुनिश्चित करें कि mimeType */*सबसे नीचे है, क्योंकि इसके नीचे किसी भी प्रविष्टि का उपयोग नहीं किया जाएगा

संपादित करें:

IIS बेकार है, इसलिए सबसे अच्छा विकल्प सिर्फ स्टैटिकटाइप्स को साफ़ करना है और सही क्रम में फिर से सब कुछ जोड़ना है:

Clear-WebConfiguration -Filter "//system.webServer/httpCompression/staticTypes/add" -PSPath 'IIS:\'

SetCompressionOfMimeType 'text/*' 'True'
SetCompressionOfMimeType 'application/javascript' 'True'
SetCompressionOfMimeType 'image/svg+xml' 'True'
SetCompressionOfMimeType 'text/css' 'True'
SetCompressionOfMimeType '*/*' 'False'


function SetCompressionOfMimeType($mimeType, $enabled){
    Write-Output "Setting compression for $mimeType to $enabled"
    Add-WebConfiguration -Filter '/system.webServer/httpCompression/staticTypes' -PSPath 'IIS:\' -Value @{mimeType=$mimeType; enabled=$enabled}
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.