如果url查询参数没有值,它是否有效?

Con*_*ens 125 url query-parameters

网址是否http://example.com/foo?bar有效?

我正在寻找一个官方的链接,说明这种或那种方式.一个简单的是/否答案或轶事证据不会削减它.

Ber*_*t F 94

  • 对URI RFC有效
  • 您的服务器端框架/代码可能已经接受了

URI RFC没有强制要求查询字符串的格式.尽管认识到查询字符串通常带有名称 - 值对,但不需要(例如,它通常包含另一个URI).

3.4.询问

查询组件包含非分层数据,与路径组件(第3.3节)中的数据一起用于标识URI方案和命名权限(如果有)范围内的资源....

...但是,由于查询组件通常用于携带"key = value"对形式的标识信息,而一个常用值是对另一个URI的引用,...

HTML确定通过HTTP GET提交的表单应将表单值编码为"?key1 = value1&key2 = value2 ..."(正确编码)形式的名称 - 值对.解析查询字符串取决于服务器端代码(例如Java servlet引擎).

您没有确定您使用的服务器端框架(如果有),但您的服务器端框架可能假设查询字符串始终位于名称 - 值对中,并且可能会阻塞不是的查询字符串以那种格式(例如?bar).如果您自己的自定义代码解析查询字符串,您只需确保处理该查询字符串格式.如果它是一个框架,您需要查阅您的文档或只是测试它以查看它是如何处理的.

  • ASP.NET MVC(据我所知版本4和5)在没有提供值时肯定会窒息:( (6认同)
  • HTML5中的“ isindex”魔术名“ name”允许发送不带键值格式的查询字符串http://stackoverflow.com/a/37579004/895245 (2认同)

Mar*_*c B 75

他们完全有效.你可以认为它们相当于那些默默地站在暴徒信使身后的肌肉发达的家伙.这家伙没有名字,也没有说话,但他的存在传达了信息.

  • 流氓的肌肉发达的家伙有一个名字,你只是不知道.你知道它在param上,它基本上带有一个布尔值(存在,缺席). (19认同)
  • 这个大个子的名字叫 *Cheich*,来自《星际迷航:深空 9》中赌场抢劫的那一集。 (3认同)
  • 最好的描述方式:) (2认同)

Jef*_*and 8

"http"方案用于通过HTTP协议定位网络资源.本节定义了http URL的方案特定语法和语义.http://www.w3.org/Protocols/rfc2616/rfc2616.html

http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]] 
Run Code Online (Sandbox Code Playgroud)

所以是的,在问号之后任何事情都是有效的.您的服务器可能会有不同的解释,但有趣的是,您可以看到某些语言将其视为布尔值,如果列出则为true.

  • 对于正式定义,请参阅RFC 2396(http://www.ietf.org/rfc/rfc2396.txt),它对查询字符串的内容保持沉默,而不是指定合法的字符集,以及有特殊意义.具体来说,它表示"查询组件是由资源解释的一串信息",暗示其定义依赖于协议,因此_key = value_主要是按照惯例. (6认同)

Ode*_*ded 6

是的,它是有效的.

如果只想检查参数是否存在,这是一种方法.


Eva*_*oll 6

URI规范

URI 规范的唯一相关部分是了解第一个和第一个符合查询规范定义的所有内容。它可以包含任何字符,例如. 这意味着诸如, 或 之类的查询字符串是有效的。?#[:/.?]?bar?ten+green+apples

在此处查找RFC 3986

HTML 规范

isindex不是有意义的 HTML5。

它已被弃用,仅用作表单中的第一个元素,并且在没有名称的情况下提交。

如果条目的名称是“isindex”,其类型是“text”,并且这是表单数据集中的第一个条目,则将该值附加到结果并跳过该条目的其余子步骤,继续下一个条目(如果有),或者整个算法的下一步。

isindex 标志仅供传统使用。符合 HTML 文档的表单不会生成需要使用此标志集进行解码的有效负载。

上次支持 isindex 是 HTML3。它在 HTML5 中的使用是为了提供更简单的向后兼容性。

图书馆支持

各库对这种 URI 格式的支持各不相同,但某些库确实提供旧版支持以方便使用isindex.

Perl URI.pm(特别支持)

一些库(例如Perl 的 URI)提供了解析此类结构的方法

$uri->query_keywords
$uri->query_keywords( $keywords, ... )
$uri->query_keywords( \@keywords )
Sets and returns query components that use the keywords separated by "+" format.
Run Code Online (Sandbox Code Playgroud)

Node.js url(无特殊支持)

作为另一个更常见的示例,node.js采用正常路线并简化解析为

  • 一个字符串
  • 或者,键和值的对象(使用parseQueryString

大多数其他 URI 解析 API 都遵循与此类似的内容。