Php $ _SERVER [“REQUEST_METHOD”]总是返回get

时间:2016-07-28 07:37:17

标签: php http

我正在我的localhost中编写一些代码。

index.php:

   $task = null;

    $method = $_SERVER['REQUEST_METHOD'];

    var_dump($method);

    //initialize data
    HttpProtocol::init();

    if (empty($method))
        exitApp("unknown method");

    if ($method == HttpProtocol::get())
        $task = new WebhookVerifyTask();
    else if ($method == HttpProtocol::post())
        $task = new ProcessFacebookEventTask();
    if (is_null($task))
        exitApp("unknown method");

    $task->start();
    http_response_code(200);

如果我发送GET或POST请求并不重要,$ method将始终为GET。 尝试PUT或DELETE时 - 它会完美地改变..

即使在POST时,什么可能导致$方法总是GET?

更新 显然当我将请求发送到localhost / path时 - 会发生上述行为。如果我将它发送到localhost / path / - 帖子工作得很好。

1 个答案:

答案 0 :(得分:0)

  

显然,当我将请求发送到localhost / path时 - 会发生上述行为。如果我将它发送到localhost / path / - 帖子工作正常

  

您的更新也会回答您的问题。如果是/ path,但是没有这样的文件,Web服务器会自动将您重定向到/ path /。 - Janno

  

当它执行此重定向时 - 他没有完全使用所有请求数据和方法吗?

它不能。 Web服务器决定告诉客户端它应该尝试另一个URL的另一个请求。 Web服务器使用302 Found状态代码和Location: http://localhost/path/标头进行响应。这会导致客户端向该新位置发出另一个HTTP请求,并且该新请求始终是GET请求。 POST请求无法重定向。 (嗯,从理论上讲,它们可以使用307 Temporary Redirect,但实际上并没有得到广泛的支持。)

您需要直接向规范网址发出请求,以免导致重定向。