V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
httpbin - 协议调试工具
httpstatuses - 协议状态码查询
httpie - cURL-like tool for humans
Fiddler
aqtata
V2EX  ›  HTTP

关于 querystring 疑问

  •  
  •   aqtata · 2021-09-02 09:34:31 +08:00 · 1591 次点击
    这是一个创建于 939 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大家都知道参数是键值对的形式

    /?key=value

    我想问的是规范中有没有对这种格式做出解释?

    /?xxx

    这个xxx是当作 key 处理了还是当作 value 处理?还是由服务器实现决定?

    8 条回复    2021-09-02 11:47:35 +08:00
    zhaokun
        1
    zhaokun  
       2021-09-02 09:43:33 +08:00
    没有 key 的 value ??孤魂野鬼?
    有见过 /{name},/?name=张三,没见过 /?xxx
    lynan
        2
    lynan  
       2021-09-02 09:43:43 +08:00   ❤️ 1
    /?xxx 相当于 xxx: null
    moreant
        3
    moreant  
       2021-09-02 09:47:00 +08:00   ❤️ 1
    oh
        4
    oh  
       2021-09-02 09:47:10 +08:00
    一般认为是 key 吧,也有一些服务 会把整段 querystring 一起处理,不是看服务器决定,是看业务决定
    对服务器而言不管是 ?key=value 还是 ?xxx 都是 querystring
    otakustay
        5
    otakustay  
       2021-09-02 09:48:09 +08:00
    按照 URL 的规范,连 key=value 都没有规范,query string 纯粹就是一条 string,都是由服务器实现解析的
    aqtata
        7
    aqtata  
    OP
       2021-09-02 09:56:49 +08:00
    谢谢朋友们,看了下各位的回答,看上去规范并没有对格式做出规定,只是一个 string,解释完全由服务器决定。
    libook
        8
    libook  
       2021-09-02 11:47:35 +08:00   ❤️ 2
    Querystring 的规范是在 RFC 3986 https://datatracker.ietf.org/doc/html/rfc3986#section-3.4
    以及 WHATWG 的规范 https://url.spec.whatwg.org/#concept-url-query
    可以看出来,querystring 仅仅是一段 string 而已,RFC 里规定了这个 string 从什么地方开始,到什么地方结束,可以和不可以包含哪些字符,并未规定 querystring 内实际的格式是怎样的。

    所以这个是取决于前后端约定的。

    但是这种通过 URL 传键值对的需求非常多,所以 HTML5 的制定者,WHATWG 在 URL 规范中直接说明可以用 application/x-www-form-urlencoded 的格式来传递键值对,算是把行业约定固定下来了(还顺便吐槽了一下这个方案比较坑): https://url.spec.whatwg.org/#urlencoded-parsing
    大概意思是没有=的话,就当成 name 。

    恩,这就是答案了。

    WHATWG 又贴心地提供了一个轮子,叫做 URLSearchParams,基于 application/x-www-form-urlencoded 格式进行封装,任何实现了 HTML5 的浏览器都提供了这个 API,而且和 URL API 有联动,后端像 Node.js 也在标准库里将这两个 API 收录,可以直接用了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3749 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 10:22 · PVG 18:22 · LAX 03:22 · JFK 06:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.