178

像这样的网址http://example.com/foo?bar有效吗?

我正在寻找指向某种官方说法的链接。一个简单的是/否答案或轶事证据不会削减它。

4

9 回答 9

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

URI RFC不要求查询字符串的格式。尽管人们认识到查询字符串通常会携带名称-值对,但这不是必需的(例如,它通常会包含另一个 URI)。

3.4. 询问

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

...但是,由于查询组件通常用于以“key=value”对的形式携带识别信息,并且一个经常使用的值是对另一个 URI 的引用,...

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

您无法确定您使用的服务器端框架(如果有的话),但您的服务器端框架可能会假定查询字符串将始终在名称-值对中,并且它可能会阻塞在不是的查询字符串上以这种格式(例如?bar)。如果它是您自己的自定义代码解析查询字符串,您只需确保处理该查询字符串格式。如果它是一个框架,您将需要查阅您的文档或简单地对其进行测试以了解它是如何处理的。

于 2010-12-29T20:53:52.980 回答
112

它们是完全有效的。你可以认为他们相当于一个肌肉发达的大汉,默默地站在暴徒信使后面。这家伙没有名字,也不会说话,但他的存在就传达了信息。

于 2010-12-29T20:15:11.537 回答
10

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

http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]] 

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

于 2010-12-29T20:06:25.423 回答
9

是的,它是有效的。

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

于 2010-12-29T20:05:31.160 回答
5

URI 规范

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

在此处查找RFC 3986

HTML 规范

isindex不是有意义的 HTML5。

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

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

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.

Node.js url(无特殊支持)

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

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

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

于 2017-01-17T05:07:58.707 回答
3

它是有效的:参见WikipediaRFC 1738 (3.3. HTTP)RFC 3986 (3. Syntax Components)

于 2010-12-29T20:08:30.213 回答
3

isindexnameHTML5 中弃用的魔法

此已弃用的功能允许表单提交生成这样的 URL,进一步证明它对 HTML 有效。例如:

<form action="#isindex" class="border" id="isindex" method="get">
  <input type="text" name="isindex" value="bar"/>
  <button type="submit">Submit</button>
</form>

生成一个 URL 类型:

?bar

标准:https ://www.w3.org/TR/html5/forms.html#naming-form-controls:-the-name-attribute

isindex但是已弃用,如下所述:https ://stackoverflow.com/a/41689431/895245

于 2016-06-01T21:22:27.470 回答
1

正如所有其他答案所述,它对于检查非常有效,特别是对于布尔类型的东西

这是一个按名称获取查询字符串的简单函数:

function getParameterByName(name, url) {
    if (!url) {
        url = window.location.href;
    }
    name = name.replace(/[\[\]]/g, "\\$&");
    var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
        results = regex.exec(url);
    if (!results) return null;
    if (!results[2]) return '';
    return decodeURIComponent(results[2].replace(/\+/g, " "));
}

现在你想检查你正在寻找的查询字符串是否存在,你可以做一个简单的事情,比如:

var exampleQueryString = (getParameterByName('exampleQueryString') != null);

exampleQueryString如果false函数找不到查询字符串,则为 ,否则为true

于 2017-02-21T08:11:38.150 回答
-1

寻找这个的正确资源是RFC6570。请参阅第 3.2.9 节,示例中的空参数如下所示。

 Example Template     Expansion
   {&x,y,empty}       &x=1024&y=768&empty=
于 2021-12-01T07:08:19.177 回答