【问题标题】:Reason for checking if $_SERVER['REQUEST_METHOD'] == 'POST'?检查 $_SERVER['REQUEST_METHOD'] == 'POST' 的原因?
【发布时间】:2014-07-21 12:57:09
【问题描述】:

我在这里搜索了大约十几个与以下相关的答案:

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
}

但我仍然没有找到为什么的答案。

如果我们已经设置了<form method="post">,为什么还要这样做?

那不是说它是这里唯一的表单方法吗?

【问题讨论】:

  • 这就是您如何判断表单已提交,因为普通页面请求是使用 GET 发出的
  • 你的答案是什么意思?如果我们不知道答案是不可能的。但是代码(显然)所做的是检查请求方法是什么。你为什么想知道这个?好吧,如果你制作某种形式的 REST 服务,你会对 POST 和 GET 请求做出不同的反应,对 PUT、DELETE 等也是如此。
  • 即使<form method="post">,谁阻止我将我在您的表单中看到的 URL 复制粘贴到我的浏览器中,这将对该资源执行 GET 请求?如果我这样做,那意味着我做了你不允许的事情。这就是使用有问题的 sn-p 的原因。

标签: php


【解决方案1】:

如果用户来自之前的表单,那么请求方法确实是 POST。但是任何人都可以向您的服务器发出请求,例如通过 CURL 或自定义程序。没有人会阻止人们对您的网页进行随机请求。

因此你不能确定服务器上的请求方法确实是POST,并且所有数据都存在。

在另一种情况下,它可用于检查表单是否已实际提交。例如:

<?php if($_SERVER['REQUEST_METHOD'] == 'POST') { ?> <!-- The server has recieved something via POST! -->
    Thank you for submitting the form!
<?php } else { ?> <!-- No postdata, lets show the form! -->
    <form method='POST'> <!-- By setting the method we ask that the client does a post request. -->
        <input type='submit' />
    </form>
<?php } ?>

【讨论】:

  • 非常感谢。非常好的答案,让我很清楚。
【解决方案2】:

您可以通过两种方式将表单从客户端发送到服务器:GETPOST。它们是在RFC 2616 (HTTP) 中定义的,但您可以直接看到的区别是GET 显示在URL 中,而POST 没有。

请记住,这只是让客户端的浏览器决定他们将内容发送到服务器的方式。

关于$_SERVER['REQUEST_METHOD']

使用哪种请求方法访问该页面;即“GET”、“HEAD”、“POST”、“PUT”。

注意:如果请求方法是 HEAD,则 PHP 脚本在发送标头后终止(这意味着在没有输出缓冲的情况下产生任何输出)。

您可能想要使用的一个原因

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
} 

可能是检查表单是否已提交。但请记住:人们可以发送POST 请求,而无需实际使用您的表单!所以无论如何你必须检查其他数据。

【讨论】:

  • 您的答案没有错,但绝对具有误导性。可以使用不同于 POST 和 GET 的动词。此外,您可以轻松查看正在发布的信息,不同之处在于您必须按 F12,转到网络选项卡 > 查看漂亮酷炫的新浏览器告诉您的有关正在发送的数据的信息。实际上,不同之处在于动作的目的取决于所使用的动词。这是开发人员编写的代码。
  • 当然可以使用不同的 HTTP 方法。但我认为这对他来说并不重要。据我所知,您只能告诉客户端使用 GET 或 POST(至少我从未在 HTML 中看到过不同的东西)。
  • 如果他真的想知道,我贴了一个相关规范的链接。在那里他会找到所有的 HTTP 方法。
猜你喜欢
  • 2010-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-21
相关资源
最近更新 更多