尽管在某些情况下用户观察到的行为可能非常相似,但这两段代码所做的事情根本不同。
这是服务器发起的重定向:
<?php
header('Location: example.php?parameter');
?>
基本上这是服务器告诉浏览器它应该浏览到另一个位置的方式。(浏览器可以忽略它,但实际上并没有理由忽略它。)可以在响应中添加额外的细节来告诉浏览器这个重定向是临时的还是永久的,或者有其他条件。但最简单的情况,这只是服务器说“我这里没有任何东西给你,去那里获取你的信息”。
这是一个客户端发起的表单 POST:
<form action="example.php" method="post">
好吧,“客户端启动”,因为 POST 表单的实际操作来自浏览器。服务器可能将该 HTML 标记提供给客户端以告诉它这样做,但客户端可以根据需要自由更改它。(不过,没有理由这样做。)这里的重点是,这是客户端将数据发送到example.php
. 它与重定向无关,它只是将数据发送到服务器上的特定资源。
服务器可以使用重定向、呈现的页面或任何其他响应来响应该数据。
这些可以以多种方式结合使用。假设你有page1.php
和page2.php
。上面page1
有一个表单,提交该表单后,您希望用户看到page2
. 这是用户观察到的结果可能无法区分的地方。
page1
可以post到page2
可以page2
处理提交的数据然后显示。 或者 page1
可以回page1
发,处理提交的数据,并重定向到page2
. 对于最终用户来说,基本上没有区别。主要区别在于您如何组织代码。在这方面,当然,个人喜好会起作用。但这并不是使用这两种工具的唯一场景。例如,您可能希望出于完全不同的原因将值提交到完全不同的页面,或者出于客户端完全不知道的某些服务器端原因重定向页面请求。
随着您开发更复杂的 Web 应用程序,您会发现某些模式在某些情况下运行良好,并且个人偏好将开始符合这些模式。最后,这些只是执行操作的工具(将客户端重定向到另一个位置,将数据发送到服务器),您的总体模式和实践只是使用这些工具。