2009-07-26 7 views
15

Ich habe eine große Menge an Daten (~ 100k), die meine C# -App an meinen Apache-Server sendet, wenn mod_gzip installiert ist. Ich versuche, die Daten zuerst mit System.IO.Compression.GZipStream zu entpacken. PHP empfängt die rohen, gezippten Daten, so dass Apache es nicht so dekomprimiert, wie ich es erwarten würde. Fehle ich etwas?Gezippte Daten in WebRequest senden?

Ich bin nicht ganz sicher, "Content-Encoding: gzip" gilt für vom Client bereitgestellte Header.

+6

+1 für Code veröffentlichen, die die gesendeten Daten komprimiert. Ich glaube, du bist der einzige, der das im gesamten Internet-Zeitalter getan hat ;-) –

+0

Würde mich freuen zu hören, ob dir eine der folgenden Ideen geholfen hat - ich versuche das gleiche Problem zu lösen. –

Antwort

1

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

Sie sollten setContentType(), um das ursprüngliche Format, wie Sie mit dem application/x-www-form-urlencoded tun nehme ich an. Dann ...

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

sah ich den Quellcode für mod_gzip und ich konnte keinen Code feststellen, dass Daten dekomprimiert. Anscheinend komprimiert mod_gzip nur ausgehende Daten, die nicht allzu überraschend sind. Die Funktionalität, nach der Sie suchen, wird wahrscheinlich selten verwendet, und ich fürchte, Sie müssen Ihre eigene Dekomprimierung auf dem Server durchführen.

4

In Bezug auf Ihre Frage, ob Content-Encoding ist vom Client bereitgestellte Header anwendbar - nach HTTP/1.1 standard, es ist:

(aus dem Abschnitt 7)

Anfrage- und Antwortnachrichten kann ein Unternehmen übertragen, wenn nicht anders durch die Anfrage-Methode oder den Antwort-Status-Code eingeschränkt.

(aus dem Abschnitt 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

Dies ist wahr, mit der Einschränkung, dass die meisten Server keine Dekomprimierung von HTTP-Anfragen durchführen, wegen der Möglichkeit von sogenannten "Zip Bomb" -Angriffen. – EricLaw

2

Sie benötigen

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

zu

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

Auf der PHP ändern Seite wird dies

Kopf- und Fußzeilen aus der Datei Streifen aus

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