代码之家  ›  专栏  ›  技术社区  ›  fgalan

为什么现代卷曲版本会切断URL的#锚定部分?

  •  3
  • fgalan  · 技术社区  · 8 年前

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

    curl 'localhost:9999/foo#bar' (nc收听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: */*
    

    GET /foo HTTP/1.1
    User-Agent: curl/7.38.0
    Host: localhost:9999
    Accept: */*
    

    注意URL不同: /foo#bar (7.19.7)与 /foo

    我理解正确的行为是移除 #anchor

    the curl changelog 但它太冗长了,我还没有发现它背后的变化和/或理由。

    2 回复  |  直到 8 年前
        1
  •  7
  •   Julian Reschke    8 年前

    修复方法如中所述 https://curl.haxx.se/changes.html#7_20_0 :

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

    https://www.greenbytes.de/tech/webdav/rfc7230.html#rfc.section.5.1.p.2 :

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

        2
  •  0
  •   MrCryo    8 年前

    curl 'localhost:9999/foo%23bar'

    推荐文章