【问题标题】:How to enable gzip compression on API Gateway?如何在 API Gateway 上启用 gzip 压缩?
【发布时间】:2021-10-03 19:02:58
【问题描述】:

我在 API Gateway 上启用 gzip 压缩时遇到了一些问题。我正在使用 Laravel Vapor,它在后台使用 AWS Lambda。

我已搜索 API Gateway 控制台仪表板的设置,但无济于事。我在我的应用程序中设置了 CORS,并启用了以下功能:

'allowedHeaders' => [
        'Accept',
        'Accept-Encoding',
        'Authorization',
        'Access-Control-Expose-Headers',
        'Content-Type',
        'X-Requested-With',
        'Origin',
        'X-Shadow-Progress',
        'X-Socket-ID',
        'x-socket-id'
    ],

我的印象是在我的后端设置Accept-Encoding 可以解决问题,但它根本不起作用。响应标头中永远不会包含Content-Encoding: gzip

【问题讨论】:

    标签: laravel amazon-web-services aws-api-gateway laravel-vapor


    【解决方案1】:

    我在 Vapor 上运行了许多项目。我忘记了我们是否必须在 API 网关内做任何特别的事情来实现这一点,但我创建了一个 gzip 响应的中间件,这对我们有用:

    <?php
    
    namespace App\Http\Middleware;
    
    use Closure;
    use Illuminate\Http\Request;
    
    class GzipEncodeResponse
    {
        public function handle(Request $request, Closure $next)
        {
            $response = $next($request);
    
            if (in_array('gzip', $request->getEncodings()) && function_exists('gzencode')) {
                $response->setContent(gzencode($response->getContent(), 9));
                $response->headers->add([
                    'Content-Encoding' => 'gzip',
                    'X-Vapor-Base64-Encode' => 'True',
                ]);
            }
            return $response;
        }
    }
    

    这会检查请求是否接受 gzip 编码,如果是,则对响应进行 gzip 压缩并添加一些必要的标头以使其正常工作。

    更新;自从写了这个答案,我意识到谷歌上没有太多的内容来解释如何做到这一点。我已经详细介绍了这种方法以及更多关于 blog post on my website 中发生的事情。

    【讨论】:

    • 谢谢@James。将尝试您的解决方案。我仍然认为 API Gateway 应该处理这些问题,因为它通常是服务器级别的事情。
    【解决方案2】:

    AWS API Gateway 确实支持压缩(gzipdeflate)。只是有点难找。您可以通过 AWS 控制台或 AWS CLI 中的网关设置启用它。

    在 AWS 控制台中选择您的 API Gateway,然后您可以在 Settings > Content Encoding 下找到它(见下图)。

    文档:https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-enable-compression.html

    【讨论】:

    • 我看不到这个用户界面。我的用户界面完全不同。
    • 您确定您使用的是 API Gateway 吗?否则,也许您所在的地区不同?你能检查一下 us-east-1 或 eu-west-1 吗?当您选择 API 网关时,它们应该如下所示。
    猜你喜欢
    • 2018-08-20
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 2015-02-15
    • 1970-01-01
    • 2015-12-01
    相关资源
    最近更新 更多