HomeFreeBSD

libfetch: don't include fragments in HTTP requests

Description

libfetch: don't include fragments in HTTP requests

Fragments are reserved for client-side processing, see
https://www.rfc-editor.org/rfc/rfc9110.html#section-7.1

Also, some servers don't like to receive HTTP requests with fragments.

$ fetch 'https://dropbox.com/a/b'
fetch: https://dropbox.com/a/b: Not Found

$ fetch 'https://dropbox.com/a/b#'
fetch: https://dropbox.com/a/b#: Bad Request

This is a real-world scenario, where some download link from dropbox
(eventually) redirects to an URL with a fragment:

$ fetch -v 'https://www.dropbox.com/sh/<some>/<thing>?dl=1' 2>&1 | grep requesting
requesting https://www.dropbox.com/sh/<some>/<thing>?dl=1
requesting https://www.dropbox.com/scl/fo/<foo>/<bar>?rlkey=<baz>&dl=1
requesting https://<boo>.dl.dropboxusercontent.com/zip_download_get/<some-long-strig>#

See how the last redirect ends with a #.

Currently, libfetch includes the ending fragment and makes it impossible
to download the file.

Differential Revision: https://reviews.freebsd.org/D46318
MFC after: 2 weeks

(cherry picked from commit 1af7d5f389536a2f391153513d95d92ffdf360e4)

Details

Provenance
gahrAuthored on Aug 21 2024, 12:35 PM
Differential Revision
D46318: libfetch: don't include fragments in HTTP requests
Parents
rG57e0d4b9a609: agp: Set the driver-specific field correctly
Branches
Unknown
Tags
Unknown