Ruby on rails 获取或发布,提交表单时使用哪种方法?

Ruby on rails 获取或发布,提交表单时使用哪种方法?,ruby-on-rails,http,forms,webforms,Ruby On Rails,Http,Forms,Webforms,我正在为我的RubyonRails应用程序编写一个web表单。表单有一个文本字段、一些复选框、一组单选按钮和两个文本框 使用GET over POST和GET over POST的优缺点是什么。我一直认为你应该使用GET来检索表单和提交帖子,但我刚刚了解到你可以两者兼而有之。这真的有区别吗?干杯 <% form_tag({ :action => "create" }, :method => "get") do %> “create”},:method=>“get”)do

我正在为我的RubyonRails应用程序编写一个web表单。表单有一个文本字段、一些复选框、一组单选按钮和两个文本框

使用GET over POST和GET over POST的优缺点是什么。我一直认为你应该使用GET来检索表单和提交帖子,但我刚刚了解到你可以两者兼而有之。这真的有区别吗?干杯

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

HTML规范从技术上定义了两者之间的区别,因为“GET”表示表单数据将(通过浏览器)编码到URL中,而“POST”表示表单数据将显示在消息体中


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

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

最大的区别是GET将所有数据放在URL中(URL的大小可以限制),而POST将其作为HTTP请求的数据部分发送。如果您允许使用GET请求输入数据,那么您也使得许多web漏洞利用变得更加容易,比如CSRF。有人只需创建一个指向易受攻击表单操作的预填充链接(例如,密码更改表单?),将其发送给毫无戒心的用户,这些用户单击该表单并在不知情的情况下更改其密码


此外,如果用户刷新进行数据输入的GET页面(如果您不小心的话,这将导致重复输入),则浏览器不会警告用户,但在帖子上,大多数浏览器都会显示警告。

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

  • GET与URL一起发送时,您的大小限制为查询字符串的最大长度。这在不同的浏览器中有所不同,但通常至少在2000个字符左右(在现代浏览器上)。这通常不适合发送大文本字段(如电子邮件)

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

  • 由于GET命令位于查询字符串中,因此用户可以更轻松地为特定页面添加书签,前提是您的页面将使用存储的某些状态变量

  • POST通常更适合于发送数据,因为它适合请求的性质,主要是因为上面的限制


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