ctw / ctw-middleware-generatedby
此PSR-15中间件向响应头添加一个X-Generated-By UUID v5。
4.0.0
2024-06-18 06:02 UTC
Requires
- php: ^8.3
- ctw/ctw-middleware: ^4.0
- laminas/laminas-diactoros: ^2.11
- psr/container: ^1.0 || ^2.0
- ramsey/uuid: ^4.1
Requires (Dev)
- ctw/ctw-qa: ^4.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan: ^1.7
- phpstan/phpstan-phpunit: ^1.1
- phpstan/phpstan-strict-rules: ^1.3
- phpunit/phpunit: ^10.0
- squizlabs/php_codesniffer: ^3.6
- symfony/var-dumper: ^7.0
README
PSR-15中间件,用于创建UUID v5(通用唯一标识符)并将其添加到响应头的X-Generated-By。UUID是通过服务器IP地址(即$_SERVER['SERVER_ADDR']
)和应用程序域名(即$_SERVER['SERVER_NAME']
)创建的。
当多个应用程序服务器在负载均衡器后面运行时,此功能非常有用。通过检查X-Generated-By头,可以确定哪个应用程序服务器处理了请求,而不会暴露其公网IP地址。
middlewares/utils 提供了用于处理PSR-15的实用类,而 ramsey/uuid 提供UUID v5生成。
安装
使用Composer安装中间件
$ composer require ctw/ctw-middleware-generatedby
独立示例
use Ctw\Middleware\GeneratedByMiddleware\GeneratedByMiddlewareFactory; use Laminas\ServiceManager\ServiceManager; use Middlewares\Utils\Dispatcher; use Middlewares\Utils\Factory; $container = new ServiceManager(); $factory = new GeneratedByMiddlewareFactory(); $generatedByMiddleware = $factory->__invoke($container); $serverParams = [ 'SERVER_ADDR' => '1.1.1.1', 'SERVER_NAME' => 'www.example.com', ]; $request = Factory::createServerRequest('GET', '/', $serverParams); $stack = [ $generatedByMiddleware, ]; $response = Dispatcher::run($stack, $request); $uuid = $response->getHeaderLine('X-Generated-By'); dump($uuid); // 78ac0e14-0f2b-529e-81e2-a0f50f6029c5
在 Mezzio 中的示例
中间件在Mezzio中进行了广泛的测试。
使用Composer安装后,只需对应用程序的配置进行以下更改。
在 config/config.php
$providers = [ // [..] \Ctw\Middleware\GeneratedByMiddleware\ConfigProvider::class, // [..] ];
在 config/pipeline.php
use Ctw\Middleware\GeneratedByMiddleware\GeneratedByMiddleware; use Mezzio\Application; use Mezzio\MiddlewareFactory; use Psr\Container\ContainerInterface; return function (Application $app, MiddlewareFactory $factory, ContainerInterface $container): void { // [..] $app->pipe(GeneratedByMiddleware::class); // [..] };
然后您可以使用以下方法测试以确保返回的HTTP头中包含X-Generated-At
头:
curl -I -k https://www.example.com.development
如果看到X-Generated-At
头,则中间件安装正确
date: Wed, 17 Mar 2021 05:59:26 GMT
x-generated-by: ce9f95cf-9ce3-5c0d-8c59-c579f2e474fb
content-type: text/html; charset=utf-8