从问号开始的表单操作

时间:2015-01-21 17:50:28

标签: html forms url

今天我与团队发生冲突,因为他声称这是一个无效的网址:

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

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

我有一个疯狂的简单HTML与表单并提交给W3C验证器,我没有看到任何问题。但是,我找不到任何&#34;官方&#34;说明这种做法无效的文件。

我的这些文档看起来不错,但不确认有效或无效的网址:

2 个答案:

答案 0 :(得分:1)

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

e.g:

<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>

答案 1 :(得分:1)

这是有效的,但没用。 RFC 3986,被指定为Internet标准66,在URL语法方面具有权威性,并且它不包含任何会使相对URL ?foo=bar无效的内容。但是,如果它在HTML表单中显示为action属性的值,则将其丢弃;页面的行为就像指定了action=""一样(或省略了action属性)。

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