为什么现代的curl版本会截断URL的#anchor部分?

fga*_*lan 2 url curl http libcurl

我观察到不同卷曲版本之间的奇怪行为。

如果我使用带有7.19.7的curl的CentOS 6 curl 'localhost:9999/foo#bar'(在9999上侦听),我得到:

GET /foo#bar HTTP/1.1
User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2
Host: localhost:9999
Accept: */*
Run Code Online (Sandbox Code Playgroud)

但是如果我在带有curl 7.38.0的现代系统(Debian 8)上进行相同的卷曲,则会得到:

GET /foo HTTP/1.1
User-Agent: curl/7.38.0
Host: localhost:9999
Accept: */*
Run Code Online (Sandbox Code Playgroud)

请注意,URL不同:(7.19.7)/foo#bar/foo(7.38.0)

我了解正确的行为是删除了该#anchor部件,因为这是curl工具的较新版本。但是,我不知道发生此更改的原因...请问有关此原因的任何提示或对此的引用(例如RFC)?

我试图在curl更新日志中找到信息,但是它太冗长,而且我还没有找到它背后的更改和/或原理。

Jul*_*hke 5

该修复程序在https://curl.haxx.se/changes.html#7_20_0中进行了描述:

“ URL的片段部分不再发送到服务器”

合理的是,片段标识符不应在HTTP请求中发送。参见https://www.greenbytes.de/tech/webdav/rfc7230.html#rfc.section.5.1.p.2

“目标URI排除了引用的片段组件(如果有的话),因为片段标识符是为客户端处理保留的([RFC3986],第3.5节)。”