2009-02-28 88 views
4

我正在为我的Ruby on Rails应用程序编写Web表单。该表格有一个文本框,一些复选框,一组单选按钮和两个文本框。GET或POST,用于提交表单的方法?

使用GET over POST的优缺点是什么,反之亦然。我一直认为你应该使用GET检索表单和POST提交,但我刚刚了解到你可以做到这一点。它真的有所作为吗?干杯。

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

回答

17

GET请求总是添加到URL中,其中POST与请求的主体一起提交。正如你注意既可以用来检索和发送数据,但也有一些区别:

  1. 由于得到的是你的大小受限制的查询字符串的最大长度的URL发送。这从浏览器到浏览器不同,但通常至少约2000个字符(在现代浏览器上)。这通常不适合发送大文本字段(例如电子邮件)。

  2. AS的GET命令在查询字符串暴露它可以由用户

  3. 很容易地修改为GET命令是在查询字符串它并使其更容易为用户书签特定的页面,假设你的页面可以处理一些状态变量。

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

+0

Chris,好的答案! – Niyaz 2009-02-28 10:57:31

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更容易暴露密码,因为它将存储在浏览器的历史缓存,代理缓存,服务器日志等中。

相关问题