summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock14
-rw-r--r--ext/http/Cargo.toml2
-rw-r--r--ext/http/lib.rs36
3 files changed, 24 insertions, 28 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 916b2fcb9..7275db019 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1575,11 +1575,12 @@ dependencies = [
[[package]]
name = "fly-accept-encoding"
-version = "0.2.0-alpha.5"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "741d3e4ac3bcebc022cd90e7d1ce376515a73db2d53ba7fd3a7e581d6db7fa97"
+checksum = "a3afa7516fdcfd8e5e93a938f8fec857785ced190a1f62d842d1fe1ffbe22ba8"
dependencies = [
"http",
+ "itertools",
"thiserror",
]
@@ -2139,6 +2140,15 @@ dependencies = [
]
[[package]]
+name = "itertools"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3"
+dependencies = [
+ "either",
+]
+
+[[package]]
name = "itoa"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/ext/http/Cargo.toml b/ext/http/Cargo.toml
index cc3dfc49b..d325d8d6c 100644
--- a/ext/http/Cargo.toml
+++ b/ext/http/Cargo.toml
@@ -26,7 +26,7 @@ cache_control = "0.2.0"
deno_core = { version = "0.134.0", path = "../../core" }
deno_websocket = { version = "0.57.0", path = "../websocket" }
flate2 = "1.0.23"
-fly-accept-encoding = "0.2.0-alpha.5"
+fly-accept-encoding = "0.2.0"
hyper = { version = "0.14.18", features = ["server", "stream", "http1", "http2", "runtime"] }
mime = "0.3.16"
percent-encoding = "2.1.0"
diff --git a/ext/http/lib.rs b/ext/http/lib.rs
index 4d19c5edb..918e48120 100644
--- a/ext/http/lib.rs
+++ b/ext/http/lib.rs
@@ -390,31 +390,17 @@ async fn op_http_accept(
_ => unreachable!(),
};
- {
- let mut accept_encoding = stream.accept_encoding.borrow_mut();
-
- // curl --compressed sends "Accept-Encoding: deflate, gzip".
- // fly_accept_encoding::parse() returns Encoding::Deflate.
- // Deno does not support Encoding::Deflate.
- // So, Deno used no compression, although gzip was possible.
- // This patch makes Deno use gzip instead in this case.
- *accept_encoding = Encoding::Identity;
- let mut max_qval = 0.0;
- if let Ok(encodings) = fly_accept_encoding::encodings(request.headers()) {
- for (encoding, qval) in encodings {
- if let Some(enc @ (Encoding::Brotli | Encoding::Gzip)) = encoding {
- // this logic came from fly_accept_encoding.
- if (qval - 1.0f32).abs() < 0.01 {
- *accept_encoding = enc;
- break;
- } else if qval > max_qval {
- *accept_encoding = enc;
- max_qval = qval;
- }
- }
- }
- }
- }
+ stream.accept_encoding.replace({
+ let encodings = fly_accept_encoding::encodings_iter(request.headers())
+ .filter(|r| {
+ matches!(r, Ok((Some(Encoding::Brotli | Encoding::Gzip), _)))
+ });
+
+ fly_accept_encoding::preferred(encodings)
+ .ok()
+ .flatten()
+ .unwrap_or(Encoding::Identity)
+ });
let method = request.method().to_string();
let headers = req_headers(request);