1
0
mirror of https://github.com/fafhrd91/actix-web synced 2025-08-18 11:55:36 +02:00

Compare commits

...

2 Commits

Author SHA1 Message Date
Rob Ede
70e3758ecc chore(awc): prepare release 3.5.1 2024-08-10 04:08:38 +01:00
Rob Ede
5ad92c0062 fix(awc): ws host req header includes port 2024-08-10 03:58:45 +01:00
4 changed files with 33 additions and 6 deletions

View File

@@ -2,11 +2,15 @@
## Unreleased
## 3.5.1
- Fix WebSocket `Host` request header value when using a non-default port.
## 3.5.0
- Add `rustls-0_23`, `rustls-0_23-webpki-roots`, and `rustls-0_23-native-roots` crate features.
- Add `awc::Connector::rustls_0_23()` constructor.
- Fix `rustls-0_22-native-roots` root store lookup
- Fix `rustls-0_22-native-roots` root store lookup.
- Update `brotli` dependency to `6`.
- Minimum supported Rust version (MSRV) is now 1.72.

View File

@@ -1,6 +1,6 @@
[package]
name = "awc"
version = "3.5.0"
version = "3.5.1"
authors = ["Nikolay Kim <fafhrd91@gmail.com>"]
description = "Async HTTP and WebSocket client library"
keywords = ["actix", "http", "framework", "async", "web"]

View File

@@ -5,9 +5,9 @@
<!-- prettier-ignore-start -->
[![crates.io](https://img.shields.io/crates/v/awc?label=latest)](https://crates.io/crates/awc)
[![Documentation](https://docs.rs/awc/badge.svg?version=3.5.0)](https://docs.rs/awc/3.5.0)
[![Documentation](https://docs.rs/awc/badge.svg?version=3.5.1)](https://docs.rs/awc/3.5.1)
![MIT or Apache 2.0 licensed](https://img.shields.io/crates/l/awc)
[![Dependency Status](https://deps.rs/crate/awc/3.5.0/status.svg)](https://deps.rs/crate/awc/3.5.0)
[![Dependency Status](https://deps.rs/crate/awc/3.5.1/status.svg)](https://deps.rs/crate/awc/3.5.1)
[![Chat on Discord](https://img.shields.io/discord/771444961383153695?label=chat&logo=discord)](https://discord.gg/NWpN5mmg3x)
<!-- prettier-ignore-end -->

View File

@@ -257,8 +257,9 @@ impl WebsocketsRequest {
return Err(e.into());
}
// validate uri
// validate URI
let uri = &self.head.uri;
if uri.host().is_none() {
return Err(InvalidUrl::MissingHost.into());
} else if uri.scheme().is_none() {
@@ -273,9 +274,12 @@ impl WebsocketsRequest {
}
if !self.head.headers.contains_key(header::HOST) {
let hostname = uri.host().unwrap();
let port = uri.port();
self.head.headers.insert(
header::HOST,
HeaderValue::from_str(uri.host().unwrap()).unwrap(),
HeaderValue::from_str(&Host { hostname, port }.to_string()).unwrap(),
);
}
@@ -434,6 +438,25 @@ impl fmt::Debug for WebsocketsRequest {
}
}
/// Formatter for host (hostname+port) header values.
struct Host<'a> {
hostname: &'a str,
port: Option<http::uri::Port<&'a str>>,
}
impl<'a> fmt::Display for Host<'a> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(self.hostname)?;
if let Some(port) = &self.port {
f.write_str(":")?;
f.write_str(port.as_str())?;
}
Ok(())
}
}
#[cfg(test)]
mod tests {
use super::*;