# 启动应用程序

每个Laravel应用程序在web server级别都有一些配置，Apache 的.htaccess文件或者Nginx配置，或者一些类似的东西，这些配置捕获Web请求，并将其路由到Laravel的public/index.php目录。

index.php实际没那么多代码，它有三个主要功能。

首先，它加载Composer的autoload文件，该文件注册所有Composer加载的依赖项。

> Composer 和 Laravel
>
> Laravel的核心功能被划分到Illuminate命名空间下的一系列组件内。这些组件被Composer拉到Laravel内。Laravel还从Symfony和其他几个社区开发的包中提取了相当多的包。这样一来，Laravel实际是汇集众多组件的框架。

接下来，它启动了Laravel的引导程序，创建了应用程序容器（您将在第11章中了解更多关于容器的内容），并注册了一些核心服务（包括内核，我们将在稍后讨论）。

最后，创建了一个内核实例，创建一个请求代表当前用户的web请求,然后传递请求到内核处理，内核返回一个Illuminate响应对象然后返回给终端用户，然后内核终止请求。

**Laravel内核**

内核是每个Laravel应用程序的核心路由器，负责接收用户请求，通过中间件进行处理，处理异常并将其传递给页面，然后返回最终响应。实际上有两个内核，一个用于页面Web请求，另外一个用于控制台, cron, 和 Artisan 请求(称之为控制台内核)，每一个内核都有个handle()方法负责接收Illuminate请求对象然后返回一个Illuminate响应对象。

内核运行每个请求之前需要运行的所有引导程序，包括确定当前请求正在运行的环境（试运行、本地、生产等）和运行所有服务提供者。HTTP内核还定义了将包装每个请求的中间件列表，包括负责会话和CSRF保护的核心中间件。
