Merge commit from fork

This commit is contained in:
Yuki Okushi 2026-02-06 21:05:15 +09:00 committed by GitHub
parent d9b96e635d
commit 06a354fe52
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 24 additions and 3 deletions

View File

@ -470,6 +470,24 @@ mod tests {
assert_eq!(response.status(), StatusCode::RANGE_NOT_SATISFIABLE); assert_eq!(response.status(), StatusCode::RANGE_NOT_SATISFIABLE);
} }
#[actix_rt::test]
async fn test_named_file_empty_range_headers() {
let srv = actix_test::start(|| App::new().service(Files::new("/", ".")));
for range in ["", "bytes="] {
let response = srv
.get("/tests/test.binary")
.insert_header((header::RANGE, range))
.send()
.await
.unwrap();
assert_eq!(response.status(), StatusCode::RANGE_NOT_SATISFIABLE);
let content_range = response.headers().get(header::CONTENT_RANGE).unwrap();
assert_eq!(content_range.to_str().unwrap(), "bytes */100");
}
}
#[actix_rt::test] #[actix_rt::test]
async fn test_named_file_content_range_headers() { async fn test_named_file_content_range_headers() {
let srv = actix_test::start(|| App::new().service(Files::new("/", "."))); let srv = actix_test::start(|| App::new().service(Files::new("/", ".")));

View File

@ -550,9 +550,12 @@ impl NamedFile {
// check for range header // check for range header
if let Some(ranges) = req.headers().get(header::RANGE) { if let Some(ranges) = req.headers().get(header::RANGE) {
if let Ok(ranges_header) = ranges.to_str() { if let Ok(ranges_header) = ranges.to_str() {
if let Ok(ranges) = HttpRange::parse(ranges_header, length) { if let Some(range) = HttpRange::parse(ranges_header, length)
length = ranges[0].length; .ok()
offset = ranges[0].start; .and_then(|ranges| ranges.first().copied())
{
length = range.length;
offset = range.start;
// When a Content-Encoding header is present in a 206 partial content response // When a Content-Encoding header is present in a 206 partial content response
// for video content, it prevents browser video players from starting playback // for video content, it prevents browser video players from starting playback