关于 querystring 疑问

2021-09-02 09:34:31 +08:00
 aqtata

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

/?key=value

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

/?xxx

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

1812 次点击
所在节点    HTTP
8 条回复
zhaokun
2021-09-02 09:43:33 +08:00
没有 key 的 value ??孤魂野鬼?
有见过 /{name},/?name=张三,没见过 /?xxx
lynan
2021-09-02 09:43:43 +08:00
/?xxx 相当于 xxx: null
moreant
2021-09-02 09:47:00 +08:00
oh
2021-09-02 09:47:10 +08:00
一般认为是 key 吧,也有一些服务 会把整段 querystring 一起处理,不是看服务器决定,是看业务决定
对服务器而言不管是 ?key=value 还是 ?xxx 都是 querystring
otakustay
2021-09-02 09:48:09 +08:00
按照 URL 的规范,连 key=value 都没有规范,query string 纯粹就是一条 string,都是由服务器实现解析的
Vegetable
2021-09-02 09:49:30 +08:00
aqtata
2021-09-02 09:56:49 +08:00
谢谢朋友们,看了下各位的回答,看上去规范并没有对格式做出规定,只是一个 string,解释完全由服务器决定。
libook
2021-09-02 11:47:35 +08:00
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 收录,可以直接用了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/799376

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX