mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 13:47:35 +00:00
LibHTTP: Add support for the deflate content encoding
This commit is contained in:
parent
0255c8d976
commit
6cad2aba5e
1 changed files with 27 additions and 0 deletions
|
@ -26,6 +26,7 @@
|
||||||
|
|
||||||
#include <AK/Debug.h>
|
#include <AK/Debug.h>
|
||||||
#include <LibCompress/Gzip.h>
|
#include <LibCompress/Gzip.h>
|
||||||
|
#include <LibCompress/Zlib.h>
|
||||||
#include <LibCore/TCPSocket.h>
|
#include <LibCore/TCPSocket.h>
|
||||||
#include <LibHTTP/HttpResponse.h>
|
#include <LibHTTP/HttpResponse.h>
|
||||||
#include <LibHTTP/Job.h>
|
#include <LibHTTP/Job.h>
|
||||||
|
@ -57,6 +58,32 @@ static ByteBuffer handle_content_encoding(const ByteBuffer& buf, const String& c
|
||||||
dbgln(" Output size: {}", uncompressed.value().size());
|
dbgln(" Output size: {}", uncompressed.value().size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return uncompressed.value();
|
||||||
|
} else if (content_encoding == "deflate") {
|
||||||
|
dbgln_if(JOB_DEBUG, "Job::handle_content_encoding: buf is deflate compressed!");
|
||||||
|
|
||||||
|
// Even though the content encoding is "deflate", it's actually deflate with the zlib wrapper.
|
||||||
|
// https://tools.ietf.org/html/rfc7230#section-4.2.2
|
||||||
|
auto uncompressed = Compress::Zlib::decompress_all(buf);
|
||||||
|
if (!uncompressed.has_value()) {
|
||||||
|
// From the RFC:
|
||||||
|
// "Note: Some non-conformant implementations send the "deflate"
|
||||||
|
// compressed data without the zlib wrapper."
|
||||||
|
dbgln_if(JOB_DEBUG, "Job::handle_content_encoding: Zlib::decompress_all() failed. Trying DeflateDecompressor::decompress_all()");
|
||||||
|
uncompressed = Compress::DeflateDecompressor::decompress_all(buf);
|
||||||
|
|
||||||
|
if (!uncompressed.has_value()) {
|
||||||
|
dbgln("Job::handle_content_encoding: DeflateDecompressor::decompress_all() failed, returning original buffer.");
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if constexpr (JOB_DEBUG) {
|
||||||
|
dbgln("Job::handle_content_encoding: Deflate decompression successful.");
|
||||||
|
dbgln(" Input size: {}", buf.size());
|
||||||
|
dbgln(" Output size: {}", uncompressed.value().size());
|
||||||
|
}
|
||||||
|
|
||||||
return uncompressed.value();
|
return uncompressed.value();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue