是的,是有区别的,在技术上和概念。差异影响你的方式取决于处理请求的应用程序服务器(当然,以及当然还有你的偏好)。
技术的区别:
在大多数应用服务器,一个参数(URL或FORM)的源确定其中它们结束。在PHP中,url参数分别位于$_GET
和$_POST
超级全局列表中。如果你不关心技术上的差异,为了您的方便,有一个超全球的$_REQUEST
。
概念性的区别:
这是最合乎逻辑的,使两种类型的请求参数之间的差异:
- 所需要的渲染页面,即它们不改变任何东西这样的在数据库中,如果您再次发送请求。
- 这样就改变了数据库,即具有破坏性(它们是浏览器询问你是否可以在发布页面时再次发布)的原因。
前者称为幂等,应通过GET传输。一个很好的例子就是搜索字符串或记录ID。无论您的命中刷新频率如何,数据库都保持不变。
另一种参数是应存储在数据库中的数据。从实际上改变数据库内容的意义上讲,这将是破坏性的。这些参数应通过POST传输。
顺便说一句,这也是一个很好的方式来决定您的表单应该是method="GET"
或method="POST"
:每当表单输入在数据库上是幂等的时,使用GET表单。例如一个用户搜索窗体应该是GET,一个用户偏好窗体应该是POST。
现在你可能会说,你的情况记录ID是幂等的,但信息表单中的其他位都没有。在这种情况下,我觉得最习惯使用
<form action="mysite.com/index.php?id=1234" method="POST">
<!-- ...more inputs here -->
</form>
因为GET mysite.com/index.php?id=1234
将要求非常纪录。
虽然没有必要这样做 - 当然,您可以将ID作为隐藏输入。
两件事情你应该知道,虽然:
- 在这种情况下,HTTP服务器日志不会显示的证据记录的用户发布到(如果你喜欢那种)。
- 这种分离只适用于POST表单。 GET表单忽略
action
属性中的参数,您必须将它们全部指定为隐藏输入字段。
1. $ _REQUEST超全球为您带来的不便。 2.对于POST表单,查询字符串无关紧要,因为无论如何您都必须执行GET重定向。 – 2012-01-15 09:25:08
@ Col.Shrapnel 1.这取决于你的喜好。 2.绝不是*你必须*做一个GET重定向。 – Tomalak 2012-01-15 09:55:45
它是理智的设计问题,而不是“偏好”。 – 2012-01-15 10:22:50