GET或POST,用于提交表单的方法?

时间:2009-02-28 10:43:24

标签: ruby-on-rails http forms webforms

我正在为Ruby on Rails应用编写一个Web表单。表单有一个文本字段,一些复选框,一组单选按钮和两个文本框。

使用GET而不是POST有什么优缺点,反之亦然。我一直认为你应该使用GET来检索表单和POST来提交,但我知道你可以做到这两点。它真的有所作为吗?欢呼声。

<% form_tag({ :action => "create" }, :method => "get") do %>

4 个答案:

答案 0 :(得分:17)

GET请求始终添加到URL中,其中POST与请求正文一起提交。如您所知,两者都可用于检索和发送数据,但有一些区别:

  1. 由于GET是使用URL发送的,因此您将大小限制为查询字符串的最大长度。这在浏览器之间有所不同,但通常至少约为2000个字符(在现代浏览器上)。这通常不适合发送大型文本字段(例如电子邮件)。

  2. 由于GET命令在查询字符串中公开,因此用户可以轻松修改

  3. 由于GET命令位于查询字符串中,因此用户可以更轻松地为特定页面添加书签,假设您的页面可以处理存储的某些状态变量。

  4. POST通常更适合发送数据,因为它适合请求的性质,主要是因为上述限制。

答案 1 :(得分:5)

HTML规范在技术上定义了两者之间的区别,因为“GET”意味着表单数据将被(通过浏览器)编码为URL,而“POST”意味着表单数据将出现在消息正文中。

但是使用建议是当表单处理是“幂等”时应该使用“GET”方法,并且仅在这些情况下使用。作为一种简化,我们可以说“GET”基本上只是用于获取(检索)数据,而“POST”可能涉及任何事情,例如存储或更新数据,订购产品或发送电子邮件。

答案 2 :(得分:1)

取决于你是否是语义。如果您正在制作基于HTML的API,GET和POST都具有内在含义。但一般来说,GET用于获取数据,POST用于提交数据。

最大的区别是GET将所有数据放入URL(可以限制大小),而POST将其作为HTTP请求的数据部分发送。如果您允许使用GET请求输入数据,那么您也可以更轻松地进行大量Web攻击,例如CSRF。有人可以只为易受攻击的表单的操作(例如,密码更改表单?)制作预先填写的链接,将其发送给不知情的用户,他们点击它并在不知不觉中更改密码。

此外,如果用户刷新进行数据输入的GET页面(如果你不小心那么会产生重复的条目),没有浏览器会警告用户,但在POST上,大多数浏览器都会显示警告。

答案 3 :(得分:1)

我认为其他答案涵盖了主要内容。另外我想添加这一点。将GET用于关键数据(例如通过GET请求发送密码)将比POST更多地暴露密码,因为它将存储在浏览器的历史缓存,代理缓存,服务器日志等中。