【问题标题】:HTTP URL - allowed characters in parameter namesHTTP URL - 参数名称中允许的字符
【发布时间】:2010-10-23 07:36:18
【问题描述】:

对于 URL 参数名称中允许使用哪些字符有任何正式限制吗?

我一直在阅读RFC3986(“统一资源标识符(URI):通用语法”),但没有得出明确的结论。

我知道有实际限制,但实际上是否会禁止这样做:

param with\funny=some_value

只要我正确转义:

param%20with%1cfunny%3cchars%3e=some_value

【问题讨论】:

    标签: http url character-encoding specifications


    【解决方案1】:

    URI 规范中对转义参数名称没有限制。但是,您使用的服务器端软件可能存在限制。如果您使用“自制”脚本来解释 URI,则尤其如此。

    【讨论】:

    • 这正是我一直在问的原因...stackoverflow.com/questions/814613/…——我想我的答案需要彻底检查才能在不寻常的情况下正确。
    • 啊,这使情况大大复杂化了。特别是因为使用& 作为分隔符只是一种约定;可以使用其他的,例如,; 过去经常被使用。此外,许多服务器引擎(PHP、Rails……)支持嵌套参数,因此这将是一个合法的带有查询的 URI:example.com/?a=b;c[1]=x;c[2]=y……许多 Web 应用程序实际上使用这种查询表示法来处理表单数据(选项、复选框……)获取类似数组的数据。
    • 所以我想它归结为“没有一个正确的函数可以从 URL 中提取参数”——除非你准备好接受“c[1]=x”是一个服务器-side 约定,而您要查找的参数实际上在客户端上称为“c[1]”(这实际上是正确的,但对于那些习惯于服务器端编程的人来说却很奇怪。 ..).
    • 请允许对此提出问题。现在是 2017 年 10 月,我使用 Bluehost (Apache)。我正在尝试传入一个实际的部分文件名。该文件名为2017-10-15.jpg,我希望它在我将showplot.htm?dt=2017-10-15 与Javascript 行document.write('<img src="' + dt + '.jpg"/>') 一起使用时显示 - 但它不起作用。它显示除了我尝试像这样连接的行之外的所有内容。是因为它不能处理连字符吗?
    【解决方案2】:

    您还应该阅读RFC2396。它似乎比 RFC3986 提供更多信息。

    【讨论】:

    • 第 3.4 节。 (“查询组件”)有它:“查询组件是要由资源解释的信息字符串。”。正如我所想的那样,这基本上意味着“任何事情都会发生”。
    • 不幸的是,它不是特定于 HTTP 的。但我想这里没有标准,只是约定。
    【解决方案3】:

    网址有保留字符,但只要你转义(urlencode)就可以了。

    根据所使用的框架,如果您尝试提交可疑值,您可能会遇到异常。 ASP.NET 具有内容过滤功能,如果您尝试提交“不安全”数据(如脚本或 HTML),则会引发异常。这是框架的一个特性,而不是 URL 语法强制执行的限制或规则。

    【讨论】:

      【解决方案4】:

      根据RFC 2396,参数名称和值可以包含大写/小写字母、十进制数字和 -_.!~*'() 字符。 其他一切都需要逃脱。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-02
      • 2010-11-30
      • 1970-01-01
      • 2015-07-14
      • 1970-01-01
      • 2023-04-08
      • 2011-07-13
      相关资源
      最近更新 更多