我正在我的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 / - 帖子工作得很好。
答案 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
,但实际上并没有得到广泛的支持。)
您需要直接向规范网址发出请求,以免导致重定向。