HTTP GET和POST参数建议

时间:2010-01-03 00:36:40

标签: http post get request

发出以下POST请求是不好的做法:

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

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

另一方面,仍然建议遵循以下规则:

  • GET请求:从中检索内容 服务器,但不要改变任何东西 在服务器上。
  • POST请求:发布 内容到服务器可能 修改服务器上的数据

我在问,因为我在网上看到了一些东西。

劳伦特卢斯

4 个答案:

答案 0 :(得分:6)

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

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

我建议您阅读Wikipedia entry on HTTP protocol

  

GET

     

请求指定资源的表示。请注意,GET不应用于导致副作用的操作,例如使用它在Web应用程序中执行操作。其中一个原因是机器人或爬虫可以任意使用GET,这不应该考虑请求应该引起的副作用。请参阅下面的安全方法。

     

POST

     

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

还有其他操作(例如HEAD,PUT,DELETE),如果您正在设计API,则应考虑使用它们。这些在RESTful API设计中有很多讨论。

答案 1 :(得分:3)

这个规则绝对是值得推荐的。

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

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

答案 2 :(得分:2)

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

鉴于这一事实,那么通常有一个非常好的理由将一些参数放在GET中,而一些参数放在POST变量中 - 考虑一下你有一个基于web的脚本的情况,它会做类似的事情:

UPDATE datatable SET quantity=30 WHERE order=21559

这可能表示为:

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

下进行。

答案 3 :(得分:1)

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

相关问题