何时使用表单提交而不是简单的链接?

时间:2013-08-14 18:37:38

标签: html

使用是否更好:

<form class="delete" action="/post/delete/id/1234.html" method="POST">
    <input type="submit" value="delete this post"/>
</form>

...而不是:

<a class="delete" href="/post/delete/id/1234.html">delete this post</a>

......什么时候需要修改数据库中的内容?就像添加,更新,删除和投票一样?对于注销操作(在我的应用程序中,在执行操作时保存时间戳)等等?

5 个答案:

答案 0 :(得分:2)

<form class="delete" action="/post/delete/id/1234.html" method="POST">
    <input type="submit value="delete this post"/>
</form>

关于代码会生成HTTP Post

<a class="delete" href="/post/delete/id/1234.html">delete this post</a>

以上代码将生成HTTP Get 您不应使用Get来更新/删除记录。 换句话说,您不应使用上述超链接删除记录。

HTTP Verb

以下是来自ASP.NET MVC 4 and the Web API本书

的HTTP动词的解释

获取 - 获取由URI标识的特定任务

PUT - 替换或创建URI标识的单个任务

POST - 在URI标识的任务下创建一个新的下属

删除 - 删除URI标识的任务

答案 1 :(得分:2)

嗯,根据the HTTP spec,POST(在这种情况下,表单提交)用于更改数据,GET(在这种情况下,您的链接)用于检索数据。因此,您应该使用POST来删除内容,而链接只应用于检索内容。如果不出意外,这会让您的最终用户更难以编辑URL来删除他们不应该删除的内容。但实际上,将POST用于任何会改变数据的事情都是“正确的”。

编辑,包括上面链接中的一些文字:

  

获取
  请求指定资源的表示。使用GET的请求应仅检索数据,并且不应产生其他影响。

答案 2 :(得分:1)

对于这种情况,它不会发生。

当你有表格项目(文本框,复选框)或者你想通过POST而不是GET发送信息时,它会发生。

答案 3 :(得分:1)

使用GET,您可能会发生意外或恶意操作。考虑一下:

<img src="http://yourdomain.com/post/delete/id/1234.html">

如果用户查看此“图片”(在任何网站上)并且他们具有删除权限,则会向该页面发送请求并删除帖子。是的,你可以查看引用者和类似的东西,但这是一个更好避免的问题。出于这个原因,我也更喜欢POST注销。

您应该使用GET的唯一时间是请求查看内容,而不是删除,编辑或添加数据。

答案 4 :(得分:1)

表单提交是指您希望将用户定义的值提交给服务器的时间。在你的例子中

<form class="delete" action="/post/delete/id/1234.html" method="POST">
    <input type="submit value="delete this post"/>
</form>

在表单提交中,您可以输入必须提交给服务器进行操作的值。何时使用表单提交的示例是“登录”页面。注册页面,即将用户定义的值提交给服务器时

但是在这个例子中

<a class="delete" href="/post/delete/id/1234.html">delete this post</a>

您没有输入界面供用户输入值并提交给服务器。当您想要传递非用户定义的静态值或主要是为了重定向到另一个页面时,可以使用这些值。