2010-01-03 85 views
5

它是不好的做法,发出以下POST请求:HTTP GET和POST参数建议

/test?a=1&b=2 
POST data: c=3&d=4 

注意,2个参数是URL的一部分,2个参数是POST内容的一部分。

在另一方面,仍建议采取以下规则:

  • GET请求:从 检索内容的服务器,但不更改服务器上的任何 。
  • POST请求:发布 内容可能 修改服务器

我问,因为我看到了一切位线是在数据的服务器。

Laurent Luce

+1

是的,人们仍然相信你应该用'对任何可以修改数据POST's,但* I *仍然认为这是CR的负载AP。当你想要的只是一个简单的删除链接时,这会导致你做一些非常黑客的事情。我认为只要你在服务器端有一些适当的检查,以便网站爬行者不会把你的网站搞得一团糟,那也没什么大不了的。 – mpen 2010-01-03 00:54:38

+1

此外,混合参数的方法很好,但我不知道为什么你会。从编程的角度来看,保持一致更有意义。我能想到的唯一例外是登录表单,有时候您想重定向到登录页面,然后在GET中引入redirect_back_to_this_page链接,并且没有多少点复制到表单中。 – mpen 2010-01-03 00:56:18

回答

6

是的,你的假设是正确的。对于如何传递参数或要求传递参数,您应该保持一致,但这不会造成任何损害。

GET操作应该是安全的操作,不会执行任何副作用(除了缓存等),所以它们很容易被代理等缓存。另一方面,POST操作可能会抵消副作用。

我会推荐阅读Wikipedia entry on HTTP protocol

GET

请指定资源的表示。请注意,不应将GET用于导致副作用的操作,例如将其用于在Web应用程序中执行操作。其中一个原因是GET可能被机器人或抓取工具任意使用,而不需要考虑请求应该导致的副作用。请参阅以下安全方法。

POST

提交数据要被处理(例如,从一个HTML表格)所标识的资源。数据包含在请求的正文中。这可能会导致创建新资源或更新现有资源或两者。

还有其他操作(例如HEAD,PUT,DELETE),如果您正在设计API,您应该考虑使用它们。这些在RESTful API设计中进行了深入的讨论。

1

没有什么不对。 应该在POST中发送修改数据的原因是,如果用户单击刷新按钮,您不会再次更改数据。在这种情况下,只会发送GET信息。

+1

如果用户点击刷新,并且最后一个操作是POST(就像在这个请求中一样),它仍然很可能会重做后期操作。除非服务器发出重定向到GET操作。 – notnoop 2010-01-03 00:46:01

+1

他可能指的是书签/索引搜索引擎。你真的不希望数据修改请求被索引... – 2010-01-03 00:49:23

3

该规则是绝对仍然推荐。

这反映在现代浏览器的刷新行为中。这些将很高兴地使用GET值进行刷新,但会在刷新POST时弹出一个警告对话框('您确定要重新提交?'等)。

它看起来像你试图结合两种方法(GET和POST)..通过发布到具有GET值的URL。虽然这应该可以正常工作,但通常不会这样做。表格通常只使用其中一种。

2

是的,GET和POST的语义应该受到尊重。

鉴于这一事实,则往往是有一个很好的理由把一些参数在GET有的在POST变量 - 考虑,你有一个基于Web的脚本做类似的情况:

UPDATE datatable SET quantity=30 WHERE order=21559 

这可表示为:

/update?order=21559 
POST data: quantity=30 

C.