以问号开头的表单操作

Form action starting with question mark

今天我和一个团队发生了冲突,因为他说这是无效的URL:

<form action="?foo=bar" method="get">

他说:因为浏览器在尝试解析应该重定向的正确文档时遇到麻烦,并且数据可能会在浏览器和服务器之间丢失。

我非常简单地 HTML 使用表单提交给 W3C 验证器,我没有发现任何问题。但是,我没有找到任何 "official" 文档说明这种做法是否无效。

我有这些文件,看起来不错,但不确认有效或无效URL:

HTML 是有效的,但它不是使用表单发送参数的正确方法。如果您的表单通过 POST 发送内容,那么这将不是一个问题,但是 GET 应该使用它自己的参数并且表单应该只 post 到它自己。

例如:

<form action="file.php" method="get">
    <input type="hidden" name="foo" value="bar" />
    ...
</form> 

完整示例(确认有效):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Form Test</title>
</head>
<body>
    <form action="" method="get">
        <input type="hidden" name="foo" value="bar" />
    <button type="submit">Send</button>
</form>
</body>
</html>

有效,但没用。 RFC 3986,指定为 Internet 标准 66,在 URL 语法方面具有权威性,它不包含任何会使相对 URL ?foo=bar 无效的内容。但是,当它以 HTML 形式作为 action 属性的值出现时,它会被丢弃;该页面的行为与指定的 action="" 相同(或省略 action 属性)。

原因是 HTML 表单提交中的 mutate action 替换了 查询部分。它被定义为查询部分设置为从表单数据构造的查询;在极端情况下,它只是 ?,但通常它由一个问号和后跟由 & 分隔的名称=值对组成。无论如何,?foo=bar都输了。