【问题标题】:Calling route from same server causes an infinite loop从同一服务器调用路由会导致无限循环
【发布时间】:2018-01-24 23:20:47
【问题描述】:

开始之前

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

上下文

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

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

routes.php

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

UserController.php

<?php
    namspace App\Http\Controller;

    use Illuminate\Http\Request;
    use App\User;

    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 端点负责提供数据。所以这里是变化:

api.php

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

UserApiController.php

<?php
    namespace App\Http\Controller;

    use Illuminate\Http\Request;
    use App\User;

    class UserApiController {
        public function index() {
            return response()->json(User::all(), 200);
        }
    }
?>

UserController.php

<?php
namespace App\Http\Controller;

use Illuminate\Http\Request;
use App\User;

class UserController {
    public function index() {
        return view('user.index')->with('users', User::all());
    }
}

?>

重现问题

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

UserController.php

<?php
    namespace App\Http\Controller;

    use Illuminate\Http\Request;
    use App\User;
    use GuzzleHttp\Client;

    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-&gt;getBody()-&gt;getContents();GuzzleHttp方法),然后提供给视图(使用return view('user.index')-&gt;with('users', $data);

问题

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

有人可以给我提示一下导致这种冻结的原因吗?

【问题讨论】:

  • 对我来说似乎合乎逻辑。你调用端点,它调用同一个端点,它调用端点等等,永远
  • 这与 PHP Web 服务器处理并发请求的方式有关吗?例如,如果我使用 Apache,这会产生同样的效果吗?

标签: php api server request


【解决方案1】:

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

如果有好心人可以在这里粘贴关于我在 PHP 网络服务器上的请求发生了什么的技术细节...

【讨论】:

    猜你喜欢
    • 2011-08-23
    • 2013-09-04
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 2016-05-01
    相关资源
    最近更新 更多