【问题标题】:Can a valid URL usefully contain more than 1 question mark?有效的 URL 是否可以有效地包含 1 个以上的问号?
【发布时间】:2021-05-07 05:53:56
【问题描述】:

URL 显然可以包含 0 个问号,例如www.google.com

或者它们可能只包含 1 个问号,例如www.google.com?q=soccer

到目前为止,我可以看到大多数(全部?)URL 的 仍然有效,当更多 '?'添加了字符,而且我也知道 query strings are non-standard and implementation is client-specific,所以,如果我解释正确,从技术上讲,没有什么阻止开发人员让 URL 包含许多?,但它可能不适合标准约定。

示例:这样的东西仍然有效,即使它是一个奇怪的 URL:https://www.google.com/?????????

问题

所以我的问题是一个有效的网址可以包含多个问号,多余的问号有用吗? (显然 1 个问号在许多 URL 中起着非常重要的作用——在域和参数之间进行描述)

背景

为什么会有人关心?我正在制作一个接受 URL 的方法,如果有 > 1 个问号,我会提供警告。 (但如果在典型的日常使用中有大于 1 个问号的正当理由,我不会提供该警告)

【问题讨论】:

    标签: web url parameters


    【解决方案1】:

    我认为这是一个很好的问题并且已经回答了here

    显然,这不是我们通常看到的常见情况(有些地方甚至说这不应该被允许),但我将展示一些更实际的例子。虽然不常见,但我相信带有两个问号的“阻止 URL”可能不是那么好,最后我会说为什么。

    简单的 URL 重定向服务

    假设某些重定向服务的代码或多或少是这样的:

    <?php
    
    if ($_GET['redirect_to']) {
      $url = $_GET['redirect_to'];
      if (filter_var($url, FILTER_VALIDATE_URL)) {
        //valid URL, redirect
        header("HTTP/1.1 302 Moved Temporarily");;
        header("Location: " . $url);
        die;
      }
    }
    

    如您所见,代码首先验证 URL,如果有效,则重定向用户。如果您访问它,它将起作用:

    http://localhost/?redirect_to=https://www.example.com/content?from=https://api.example.com/posts?id=2

    那里有多个问号,一个定义redirect_to参数,另一个定义from参数,最后一个定义重定向URL的id参数。对于 PHP,所有这些(redirect_to 内容)都是有效的 URL。此外,StackOverflow 编辑器会将整个 URL 突出显示为有效链接(生成的答案不会,但我会保持这种方式,您可以检查是否尝试编辑)。

    API

    您可以下载JSON Placeholder API 并在data.json 上创建一个新帖子,如下所示:

    {
      "userId": 1,
      "id": 1,
      "title": "Is multiple question marks useful??",
      "body": "Maybe"
    }
    

    使用npm start 运行后,您可以访问http://localhost:3000/posts?title=Is%20multiple%20question%20marks%20useful?? 并且帖子将被退回,因此,这将是某人想要返回包含问号的帖子的示例。

    但是

    很明显,在 URL 上使用多个问号是很奇怪的,并不是所有的客户都能正确解释这一点,所以构建一个生成这种类型的系统也可能是一种不好的做法的网址。但是您的问题将要验证或不是多个问号,因此,认为这些 URL 可能属于您无法控制的其他服务,对我来说,无需进行验证。

    【讨论】:

      猜你喜欢
      • 2010-11-13
      • 2011-02-24
      • 1970-01-01
      • 2011-11-01
      • 2012-01-18
      • 2017-09-11
      • 1970-01-01
      相关资源
      最近更新 更多