ctw/ctw-middleware-generatedby

此PSR-15中间件向响应头添加一个X-Generated-By UUID v5。

4.0.0 2024-06-18 06:02 UTC

README

Build Status Scrutinizer Code Quality Latest Stable Version

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