Gzip

Status
Nicht offen für weitere Antworten.

Johannes L.

Aktives Mitglied
Hi,

ich bin gerade dabei einen Proxy zu schreiben und sende immer Accept-Encoding: gzip im HTTP Request-Header mit, allerdings ist mir nun nicht klar, wann ich nun einen GZIPInputStream verwenden muss und wann nicht, d.h. wie entpackt man und wie sendet man den Stream quasi direkt an den Client weiter?

Code:
				InputStream in = getMethod.getResponseBodyAsStream();
				
				GZIPInputStream gzipIn = new GZIPInputStream(in);
				
				if(decode == true)
				{
					logger.debug("Decode: "+decode);
					
					byte[] uncompressedBinaryBody = new byte[8192];
					
					while((gzipIn.read(uncompressedBinaryBody)) != -1) 
					{
						client.getOutputStream().write(uncompressedBinaryBody);
						client.getOutputStream().flush();
					}
					
					gzipIn.close();
				}

Ich dachte damit sende ich entpackte Daten weiter, aber ich bin mir da wirklich nicht mehr sicher bzw. langsam völlig verwirrt.

Viele Grüsse,
Johannes
 

Murray

Top Contributor
Normalerweise würde das ein Proxy doch transparent behandeln: wenn im Client-Request bereits Accept-Encoding: gzip steht, dann wird das zum Server durchgereicht, und der Response muss auch nicht entpackt werden (denn das macht ja der Client bereits).
Nur wenn dein Proxy auch dann, wenn der Client eigentlich keine komprimierten Daten haben wollte, trotzdem den Request um Accept-Encoding: gzip eweitert, dann musst du die Daten selbst entpacken (und in diesem Fall natürlich auch den HTTP-Response-Header ändern, denn die Daten sind ja nicht mehr gepackt)
 

Johannes L.

Aktives Mitglied
Er soll halt auf jeden Fall den Header setzen, damit wenigstens auf dem Weg vom Server zum Proxy die Bandbreite nicht unnötig ausgereitzt wird.
 

Johannes L.

Aktives Mitglied
Ich meine den Stream kann ich doch dann grade weiterschieben, falls ich nicht dekodieren muss? Also

Code:
logger.debug("Decode: "+decode);
					
byte data[] = new byte[8192]; 
					
while(in.read(data, 0, data.length) != -1) 
{
	client.getOutputStream().write(data);
	client.getOutputStream().flush();
}
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben