发出以下POST请求是不好的做法:
/test?a=1&b=2
POST data: c=3&d=4
请注意,2个参数是URL的一部分,2个参数是POST内容的一部分。
另一方面,仍然建议遵循以下规则:
我在问,因为我在网上看到了一些东西。
劳伦特卢斯答案 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信息。