WordPress极简博客 WordPress极简博客
  • 新鲜事
  • 战疫情
  • UI素材
    • UI素材
    • 电商/节日
    • PPT
      • 节日庆典
      • 工作汇报
      • 商业计划书
    • word
      • 简历竞聘
      • 合同/公文
  • 创客头条
    • 音乐分享
    • 初创文章
    • 极客头条
    • 数码解说
    • 生活趣事
    • 生活日记
  • 全球科技
    • 新浪博客
    • A5资讯
    • 环球网新闻
  • 编程教学
    • Linux安全栏目
      • Linux运维安全汇总
      • DDOS攻击防护
      • XSS攻击防护
      • SQL安全防护
    • Python技术栏目
      • Python基础入门
      • Python基础结构
    • WordPress技术栏目
      • WP主题
      • WordPress技术教程
      • RIPRO主题美化
    • WordPress漏洞发布
    • 技术教程汇总
  • 专题
  • 基友
  • 隐私
  • 云优化
  • 注册
    登录
立即登录
  • 首页
  • 云优化
  • 新疫情
  • 新鲜事
    • 热文
    • 极客
    • 生活
  • 技术篇
    • WP主题
    • 技术教程
    • Python入门
    • Python基础
  • 专题篇
  • 友链君

Laravel 底层如何处理HTTP请求

夏柔5月 4, 2020

一、概述

web 服务器对 HTTP 请求的处理流程大体上都是这样的:在某个端口监听请求,请求进入后运行程序,然后将程序运行结果以响应的形式发送出去。

Laravel 框架构建的 Web 应用处理 HTTP 请求的流程亦是如此。所有 HTTP 请求都会被转发到单入口文件 /public/index.php。

二、剖析

逐行分析 index.php 的代码。

1、引入自动加载

require __DIR__.'/../vendor/autoload.php';

2、创建一个 Application 实例,作为全局的服务容器,并将处理请求的核心类Kernel实现实例 绑定到该容器中。

$app = require_once __DIR__.'/../bootstrap/app.php';

注:app.php文件内的处理:
<

?php
// 创建一个 Application 实例
$app = new Illuminate\Foundation\Application(
$_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
);
// 绑定处理HTTP请求的接口实现 到服务容器
$app->singleton(
Illuminate\Contracts\Http\Kernel::class,
App\Http\Kernel::class
);
// 绑定处理CLI请求的接口实现 到服务容器
$app->singleton(
Illuminate\Contracts\Console\Kernel::class,
App\Console\Kernel::class
);
$app->singleton(
Illuminate\Contracts\Debug\ExceptionHandler::class,
App\Exceptions\Handler::class
);
// 返回应用程序实例
return $app;

3、从服务容器中解析处理 HTTP 请求的 Kernel 实例

$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
这里的 make 方法在 Illuminate\Foundation\Application 中,作用就是解析

4、处理 HTTP 请求的核心代码

$response = $kernel->handle(
$request = Illuminate\Http\Request::capture()
);
$kernel 是 App\Http\Kernel 的父类,即 Illuminate\Foundation\Http\Kernel,我们进入到 handle() 方法
/**
* 处理传入的http请求,获取一个 Request,返回一个 Response
* 输入http请求,返回http响应
*
* Handle an incoming HTTP request.
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function handle($request)
{
try {
$request->enableHttpMethodParameterOverride();
$response = $this->sendRequestThroughRouter($request);
} catch (Exception $e) {
$this->reportException($e);
$response = $this->renderException($request, $e);
} catch (Throwable $e) {
$this->reportException($e = new FatalThrowableError($e));
$response = $this->renderException($request, $e);
}
$this->app['events']->dispatch(
new RequestHandled($request, $response)
);
return $response;
}

我们发现实际进行处理的是 sendRequestThroughRouter() 这个方法

protected function sendRequestThroughRouter($request)
{
$this->app->instance('request', $request);
Facade::clearResolvedInstance('request');
// 在发送请求到路由之前,先调用 bootstrap() 方法运用应用的启动类
$this->bootstrap();
/**
* 以管道模式来处理 HTTP 请求
*
* 全局中间件都校验通过才会将请求分发到路由器进行处理
* 路由器会将请求 URL 路径与应用注册的所有路由进行匹配,如果有匹配的路由,则先收集该路由所分配的所有路由中间件
* 通过这些路由中间件对请求进行过滤,所有路由中间件校验通过才会运行对应的匿名函数或控制器方法,执行相应的请求处理逻辑
* 最后准备好待发送给客户端的响应。
*/
return (new Pipeline($this->app))
->send($request)
->through($this->app->shouldSkipMiddleware() ? [] : $this->middleware)
->then($this->dispatchToRouter());
}

5、发送响应

$response->send();

6、终止程序,做一些善后清理工作(主要包括运行终止中间件,以及注册到服务容器的一些终止回调)

$kernel->terminate($request, $response);

转载来源:老迟博客

#Laravel#Laravel 底层如何处理HTTP请求
1
等 1 人赞过
分享
夏柔 站长
文章 709评论 23
赞赏
夏柔
相关文章
  • 自定义onion域名
  • 宝塔linux面板一键工具箱
  • 7种提高代码阅读能力的方法
  • 保护你的WordPress,修改服务器默认用户名root
  • Python多线程扫描端口
  • ThnBo-一款针对WordPress开发的缩略图美化插件,为广大站长提供缩略图的美化便利
  • WordPress去除index.php的方法
  • WordPress美化-文字渐变特效
  • WordPress美化-抖动图片
  • 使用HBuilderX封装H5
27 10月, 2019
DISCUZ强制伪静态+seoV5.3插件
夏柔
站长
夏山如碧 - 怀柔天下
709文章
23评论
58144K获赞
版权声明

文章采用创作共用版权 CC BY-NC-ND/2.5/CN 许可协议,与本站观点无关。

如果您认为本文侵犯了您的版权信息,请与我们联系修正或删除。
投诉邮箱wpsite@aliyun.com

栏目推荐
Python基础入门30
WordPress技术教程265
前沿技术情报所7
城市创新——新消费8
最近有哪些不可错过的热文5
程序员的养生之道0
疫情实况
英国变异新冠病毒或致更高死亡率
1月 23, 2021
31省新增确诊107例 本土90例
1月 23, 2021
拜登公布战时抗疫计划
1月 22, 2021
更多
每日快讯
警方调查西藏冒险王网传视频
1月 23, 2021
北京新增3例本土确诊 均在大兴
1月 23, 2021
英国变异新冠病毒或致更高死亡率
1月 23, 2021
云南昭通市盐津县发生4.7级地震
1月 23, 2021
外媒:特朗普弹劾案审讯2月8日开始
1月 23, 2021
31省新增确诊107例 本土90例
1月 23, 2021
美共和党议员提交弹劾拜登条款
1月 22, 2021
江苏镇江一人核酸检测结果可疑
1月 22, 2021
更多
  • 新鲜事
  • 疫情实况
  • UI素材
  • 技术教程
  • 音乐分享
  • 专题
  • 友情
  • 隐私
  • 云优化
Copyright © 2019-2021 WordPress极简博客. Designed by 骚老板. 辽公网安备21010502000474号