使用GET还是POST方法来提交表单?

4
我正在为我的Ruby on Rails应用编写一个web表单。该表单有一个文本字段、一些复选框、一组单选按钮和两个文本框。
使用GET或POST的优缺点如何?我一直认为应该使用GET来检索表单并使用POST来提交表单,但我刚学习到您可以做两者。真的有什么区别吗?谢谢。
<% form_tag({ :action => "create" }, :method => "get") do %>
4个回答

18

GET请求总是添加到URL中,而POST则是通过请求正文提交的。正如您所注意到的那样,两者都可以用于检索和发送数据,但存在一些区别:

  1. 由于GET与URL一起发送,因此您受限于查询字符串的最大长度。这因浏览器而异,但通常至少为约2000个字符(在现代浏览器上)。这通常使其不适合发送大型文本字段(例如电子邮件)。

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

  3. 由于GET命令在查询字符串中,因此对于用户来说更容易将特定页面加入书签,假设您的页面将使用某些状态变量存储。

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


5
HTML规范在技术上定义了两者之间的区别:“GET”表示表单数据将被编码(由浏览器)成URL,而“POST”表示表单数据将出现在消息体中。
但是使用建议应该是只有在表单处理是“幂等”的情况下才使用“GET”方法。简单来说,“GET”基本上只用于获取(检索)数据,而“POST”可能涉及任何事情,比如存储或更新数据、订购产品或发送电子邮件。

1

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

最大的区别是GET将所有数据放在URL中(大小可能受限),而POST将其作为HTTP请求的数据部分发送。如果允许使用GET请求进行数据输入,那么也会使许多Web攻击变得更加容易,例如CSRF。某人可以只需创建一个预填充链接到易受攻击的表单操作(比如密码更改表单),然后将其发送给不知情的用户,他们点击它并无意中更改了自己的密码。

此外,如果刷新进行数据输入的GET页面(如果您不小心),则没有浏览器会警告用户,但是在POST上,大多数浏览器都会显示警告。


1

我认为其他回答已经覆盖了主要内容。此外,我想添加一点内容。对于诸如通过GET请求发送密码之类的关键数据,使用GET将比POST更容易暴露密码,因为它将存储在浏览器的历史缓存、代理缓存、服务器日志等中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接