feat(http) add unsafe-headers feature flag (#1050)

* [http] add unsafe-headers feature flag

* change file

* fmt
pull/1059/head
Lorenzo Rizzotti 1 year ago committed by GitHub
parent bff722451d
commit 753c7be0a6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -0,0 +1,5 @@
---
"http": patch
---
Add `unsafe-headers` cargo feature flag to allow using [forbidden headers](https://fetch.spec.whatwg.org/#terminology-headers).

58
Cargo.lock generated

@ -230,7 +230,7 @@ checksum = "5ad32ce52e4161730f7098c077cd2ed6229b5804ccf99e5366be1ab72a98b4e1"
[[package]] [[package]]
name = "api" name = "api"
version = "2.0.0-beta.1" version = "2.0.0-beta.2"
dependencies = [ dependencies = [
"log", "log",
"serde", "serde",
@ -6401,7 +6401,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-authenticator" name = "tauri-plugin-authenticator"
version = "2.0.0-beta.1" version = "2.0.0-beta.2"
dependencies = [ dependencies = [
"authenticator", "authenticator",
"base64 0.21.7", "base64 0.21.7",
@ -6423,7 +6423,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-autostart" name = "tauri-plugin-autostart"
version = "2.0.0-beta.1" version = "2.0.0-beta.2"
dependencies = [ dependencies = [
"auto-launch", "auto-launch",
"log", "log",
@ -6436,7 +6436,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-barcode-scanner" name = "tauri-plugin-barcode-scanner"
version = "2.0.0-beta.1" version = "2.0.0-beta.2"
dependencies = [ dependencies = [
"log", "log",
"serde", "serde",
@ -6448,7 +6448,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-biometric" name = "tauri-plugin-biometric"
version = "2.0.0-beta.1" version = "2.0.0-beta.2"
dependencies = [ dependencies = [
"log", "log",
"serde", "serde",
@ -6461,7 +6461,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-cli" name = "tauri-plugin-cli"
version = "2.0.0-beta.1" version = "2.0.0-beta.2"
dependencies = [ dependencies = [
"clap", "clap",
"log", "log",
@ -6474,7 +6474,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-clipboard-manager" name = "tauri-plugin-clipboard-manager"
version = "2.0.0-beta.1" version = "2.0.0-beta.2"
dependencies = [ dependencies = [
"arboard", "arboard",
"log", "log",
@ -6487,7 +6487,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-deep-link" name = "tauri-plugin-deep-link"
version = "2.0.0-beta.1" version = "2.0.0-beta.2"
dependencies = [ dependencies = [
"log", "log",
"serde", "serde",
@ -6500,7 +6500,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-dialog" name = "tauri-plugin-dialog"
version = "2.0.0-beta.1" version = "2.0.0-beta.2"
dependencies = [ dependencies = [
"glib 0.16.9", "glib 0.16.9",
"log", "log",
@ -6516,7 +6516,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-fs" name = "tauri-plugin-fs"
version = "2.0.0-beta.1" version = "2.0.0-beta.2"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"glob", "glob",
@ -6535,7 +6535,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-global-shortcut" name = "tauri-plugin-global-shortcut"
version = "2.0.0-beta.1" version = "2.0.0-beta.2"
dependencies = [ dependencies = [
"global-hotkey", "global-hotkey",
"log", "log",
@ -6548,7 +6548,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-http" name = "tauri-plugin-http"
version = "2.0.0-beta.1" version = "2.0.0-beta.2"
dependencies = [ dependencies = [
"data-url", "data-url",
"http 0.2.11", "http 0.2.11",
@ -6567,7 +6567,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-localhost" name = "tauri-plugin-localhost"
version = "2.0.0-beta.1" version = "2.0.0-beta.2"
dependencies = [ dependencies = [
"http 1.0.0", "http 1.0.0",
"log", "log",
@ -6580,7 +6580,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-log" name = "tauri-plugin-log"
version = "2.0.0-beta.1" version = "2.0.0-beta.2"
dependencies = [ dependencies = [
"android_logger", "android_logger",
"byte-unit", "byte-unit",
@ -6599,7 +6599,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-nfc" name = "tauri-plugin-nfc"
version = "2.0.0-beta.1" version = "2.0.0-beta.2"
dependencies = [ dependencies = [
"log", "log",
"serde", "serde",
@ -6612,7 +6612,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-notification" name = "tauri-plugin-notification"
version = "2.0.0-beta.1" version = "2.0.0-beta.2"
dependencies = [ dependencies = [
"chrono", "chrono",
"color-backtrace", "color-backtrace",
@ -6640,7 +6640,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-os" name = "tauri-plugin-os"
version = "2.0.0-beta.1" version = "2.0.0-beta.2"
dependencies = [ dependencies = [
"gethostname", "gethostname",
"log", "log",
@ -6656,7 +6656,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-persisted-scope" name = "tauri-plugin-persisted-scope"
version = "2.0.0-beta.1" version = "2.0.0-beta.2"
dependencies = [ dependencies = [
"aho-corasick", "aho-corasick",
"bincode", "bincode",
@ -6670,7 +6670,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-positioner" name = "tauri-plugin-positioner"
version = "2.0.0-beta.1" version = "2.0.0-beta.2"
dependencies = [ dependencies = [
"log", "log",
"serde", "serde",
@ -6683,7 +6683,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-process" name = "tauri-plugin-process"
version = "2.0.0-beta.1" version = "2.0.0-beta.2"
dependencies = [ dependencies = [
"tauri", "tauri",
"tauri-plugin", "tauri-plugin",
@ -6691,7 +6691,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-shell" name = "tauri-plugin-shell"
version = "2.0.0-beta.1" version = "2.0.0-beta.2"
dependencies = [ dependencies = [
"encoding_rs", "encoding_rs",
"log", "log",
@ -6709,7 +6709,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-single-instance" name = "tauri-plugin-single-instance"
version = "2.0.0-beta.2" version = "2.0.0-beta.3"
dependencies = [ dependencies = [
"log", "log",
"serde", "serde",
@ -6722,7 +6722,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-sql" name = "tauri-plugin-sql"
version = "2.0.0-beta.1" version = "2.0.0-beta.2"
dependencies = [ dependencies = [
"futures-core", "futures-core",
"log", "log",
@ -6738,7 +6738,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-store" name = "tauri-plugin-store"
version = "2.0.0-beta.1" version = "2.0.0-beta.3"
dependencies = [ dependencies = [
"log", "log",
"serde", "serde",
@ -6750,7 +6750,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-stronghold" name = "tauri-plugin-stronghold"
version = "2.0.0-beta.1" version = "2.0.0-beta.2"
dependencies = [ dependencies = [
"hex", "hex",
"iota-crypto 0.23.1", "iota-crypto 0.23.1",
@ -6771,7 +6771,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-updater" name = "tauri-plugin-updater"
version = "2.0.0-beta.1" version = "2.0.0-beta.2"
dependencies = [ dependencies = [
"base64 0.21.7", "base64 0.21.7",
"dirs-next", "dirs-next",
@ -6798,7 +6798,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-upload" name = "tauri-plugin-upload"
version = "2.0.0-beta.1" version = "2.0.0-beta.2"
dependencies = [ dependencies = [
"futures-util", "futures-util",
"log", "log",
@ -6815,7 +6815,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-websocket" name = "tauri-plugin-websocket"
version = "2.0.0-beta.1" version = "2.0.0-beta.2"
dependencies = [ dependencies = [
"futures-util", "futures-util",
"http 1.0.0", "http 1.0.0",
@ -6832,7 +6832,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-window-state" name = "tauri-plugin-window-state"
version = "2.0.0-beta.1" version = "2.0.0-beta.2"
dependencies = [ dependencies = [
"bincode", "bincode",
"bitflags 2.4.2", "bitflags 2.4.2",

@ -53,3 +53,4 @@ deflate = [ "reqwest/deflate" ]
trust-dns = [ "reqwest/trust-dns" ] trust-dns = [ "reqwest/trust-dns" ]
socks = [ "reqwest/socks" ] socks = [ "reqwest/socks" ]
http3 = [ "reqwest/http3" ] http3 = [ "reqwest/http3" ]
unsafe-headers = []

@ -195,7 +195,8 @@ pub async fn fetch<R: Runtime>(
for (name, value) in &headers { for (name, value) in &headers {
let name = HeaderName::from_bytes(name.as_bytes())?; let name = HeaderName::from_bytes(name.as_bytes())?;
let value = HeaderValue::from_bytes(value.as_bytes())?; let value = HeaderValue::from_bytes(value.as_bytes())?;
if !matches!( #[cfg(not(feature = "unsafe-headers"))]
if matches!(
name, name,
// forbidden headers per fetch spec https://fetch.spec.whatwg.org/#terminology-headers // forbidden headers per fetch spec https://fetch.spec.whatwg.org/#terminology-headers
header::ACCEPT_CHARSET header::ACCEPT_CHARSET
@ -218,8 +219,10 @@ pub async fn fetch<R: Runtime>(
| header::UPGRADE | header::UPGRADE
| header::VIA | header::VIA
) { ) {
request = request.header(name, value); continue;
} }
request = request.header(name, value);
} }
// POST and PUT requests should always have a 0 length content-length, // POST and PUT requests should always have a 0 length content-length,

Loading…
Cancel
Save