从同一服务器调用路由会导致无限循环



开始之前

我以Laravel为例,但我实际上用手工制作的MVC做了一个小项目,问题仍然存在,所以这与框架无关。

上下文

我使用php artisan serve,这相当于php -S localhost:8000 -t public来启动我的 Web 应用程序。我不使用Apache(可能是一个提示?

客户端(人类)通过其网络浏览器请求/user页面。下面是响应此终结点的控制器的外观:

路线.php

<?php
Route::resource('user', 'UserController');
?>

用户控制器.php

<?php
namspace AppHttpController;
use IlluminateHttpRequest;
use AppUser;
class UserController {
public function index( Request $request ) {
$users = User::all();
if( $request->wantsJson() ) {
return response()->json($users, 200);
}
else {
return view('user.index')->with('users', $users);
}
}
}
?>

这段代码没有错,一切正常。

我想建立一个"存储"机制,其中只有我的 api 端点负责提供数据。所以这是变化:

接口.php

<?php
Route::group(['prefix' => 'v1'], function() {
Route::resource('user', 'UserApiController');
}); 
?>

UserApiController.php

<?php
namespace AppHttpController;
use IlluminateHttpRequest;
use AppUser;
class UserApiController {
public function index() {
return response()->json(User::all(), 200);
}
}
?>

用户控制器.php

<?php
namespace AppHttpController;
use IlluminateHttpRequest;
use AppUser;
class UserController {
public function index() {
return view('user.index')->with('users', User::all());
}
}

?>

重现问题

为此,如果我走错了路,请纠正我,我的终结点/用户应该从/api/v1/user 请求数据,然后将数据提供给视图并返回 Http 响应。所以这是我在UserController.php上修改的内容:

用户控制器.php

<?php
namespace AppHttpController;
use IlluminateHttpRequest;
use AppUser;
use GuzzleHttpClient;
class UserController {
public function index() {
$client = new Client;
$response = $client->get(url('/api/v1/user'));
return view('user.index')->with('users', User::all());
}
}
?>

对我来说,端点将接收来自客户端(人类)的请求,然后向 api 端点发送第二个请求,获取 json 数据,解析它($data = $response->getBody()->getContents();使用 GuzzleHttp 方法),然后将其提供给视图(使用return view('user.index')->with('users', $data);.

问题

服务器实际上是无限循环,我不明白过程中失败了什么。请注意,从另一个服务器调用 api(例如https://ipapi.co/json完全可以正常工作)。

有人可以给我一个提示,是什么导致了这种冻结?

这绝对与 PHP 处理请求的方式有关。我localhost:8000通过设置 Apache 配置httpd.conf将我的项目植根在同一位置,并且它正在工作,我可以跨我的路由发出请求。

如果任何善良的灵魂可以在这里粘贴有关我在 PHP Web 服务器上的请求正在发生的事情的技术细节......

最新更新