2009-07-26 21 views
15

मेरे पास बड़ी मात्रा में डेटा (~ 100k) है कि मेरा सी # ऐप mod_gzip स्थापित के साथ मेरे अपाचे सर्वर पर भेज रहा है। मैं System.IO.Compression.GZipStream का उपयोग कर डेटा को पहले gzip करने का प्रयास कर रहा हूं। PHP को कच्चे gzipped डेटा प्राप्त होता है, इसलिए अपाचे इसे असम्पीडित नहीं कर रहा है जैसा कि मैं उम्मीद करता हूं। क्या मैं कुछ भूल रहा हूँ?WebRequest में gzipped डेटा भेज रहा है?

System.Net.WebRequest req = WebRequest.Create(this.Url); 
req.Method = this.Method; // "post" 
req.Timeout = this.Timeout; 
req.ContentType = "application/x-www-form-urlencoded"; 
req.Headers.Add("Content-Encoding: gzip"); 

System.IO.Stream reqStream = req.GetRequestStream(); 

GZipStream gz = new GZipStream(reqStream, CompressionMode.Compress); 

System.IO.StreamWriter sw = new System.IO.StreamWriter(gz, Encoding.ASCII); 
sw.Write(large_amount_of_data); 
sw.Close(); 

gz.Close(); 
reqStream.Close() 


System.Net.WebResponse resp = req.GetResponse(); 
// (handle response...) 

मैं पूरी तरह यकीन नहीं है "सामग्री एन्कोडिंग: gzip" ग्राहक की आपूर्ति हेडर पर लागू होता है।

+6

+1। मेरा मानना ​​है कि आप पूरे इंटरनेट युग में ऐसा करने वाले अकेले हैं ;-) –

+0

सुनना अच्छा लगेगा कि नीचे दिए गए किसी भी विचार में आपकी मदद की गई है - मैं एक ही समस्या को हल करने की कोशिश कर रहा हूं। –

उत्तर

1
http://www.dominoexperts.com/articles/GZip-servlet-to-gzip-your-pages

आप setContentType चाहिए() मूल स्वरूप के अनुसार

, जैसा कि आप आवेदन/x-www फार्म-urlencoded साथ क्या कर रहे मुझे लगता है। तो फिर ...

// See if browser can handle gzip 
String encoding=req.getHeader("Accept-Encoding"); 
if (encoding != null && encoding.indexOf("gzip") >=0) { // gzip browser 
     res.setHeader("Content-Encoding","gzip"); 
     OutputStream o=res.getOutputStream(); 
     GZIPOutputStream gz=new GZIPOutputStream(o); 
     gz.write(content.getBytes()); 
     gz.close(); 
     o.close(); 
      } else { // Some old browser -> give them plain text.      PrintWriter o = res.getWriter(); 
        o.println(content); 
        o.flush(); 
        o.close(); 
      } 
4

मैं mod_gzip के लिए स्रोत कोड को देखा और मैं किसी भी कोड है कि डेटा decompresses नहीं पा सके। स्पष्ट रूप से mod_gzip केवल आउटगोइंग डेटा को संपीड़ित करता है जो सभी के बाद बहुत आश्चर्यजनक नहीं है। जो कार्यक्षमता आप खोज रहे हैं शायद शायद ही कभी उपयोग की जाती है, और मुझे डर है कि आपको सर्वर पर अपना खुद का डिकंप्रेशन करना होगा।

4

कि क्या सामग्री-एन्कोडिंग अपने प्रश्न के संबंध में ग्राहक की आपूर्ति हेडर के लिए लागू है - HTTP/1.1 standard के अनुसार, यह है:

अनुरोध और प्रतिक्रिया संदेशों एक इकाई है, तो हस्तांतरण कर सकते हैं (धारा 7 से) अनुरोध विधि या प्रतिक्रिया स्थिति कोड द्वारा अन्यथा प्रतिबंधित नहीं है।

(खंड 7.1 से)

entity-header = Allow     ; Section 14.7 
        | Content-Encoding   ; Section 14.11 
        | Content-Language   ; Section 14.12 
        | Content-Length   ; Section 14.13 
        | Content-Location   ; Section 14.14 
        | Content-MD5    ; Section 14.15 
        | Content-Range   ; Section 14.16 
        | Content-Type    ; Section 14.17 
        | Expires     ; Section 14.21 
        | Last-Modified   ; Section 14.29 
        | extension-header 
+5

यह सच है, चेतावनी के साथ कि अधिकतर सर्वर HTTP अनुरोधों को डिकंप्रेशन नहीं करेंगे, तथाकथित "ज़िप बम" हमलों की संभावना के कारण। – EricLaw

2

आप

req.Headers.Add("Content-Encoding: gzip"); 

को

req.Headers.Add("Content-Encoding","gzip"); 
0

बदलने के लिए पीएचपी पर की जरूरत है पक्ष इस कोड है कि तैनात डेटा को संपीड़ित पोस्ट करने के लिए फ़ाइल

से शीर्ष लेख और पाद नहीं हटेगा

function gzip_stream_uncompress($data) { return gzinflate(substr($data, 10, -8)); }

संबंधित मुद्दे