Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
88.89% covered (warning)
88.89%
16 / 18
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
GzipResponse
88.89% covered (warning)
88.89%
16 / 18
0.00% covered (danger)
0.00%
0 / 1
9.11
0.00% covered (danger)
0.00%
0 / 1
 handle
88.89% covered (warning)
88.89%
16 / 18
0.00% covered (danger)
0.00%
0 / 1
9.11
1<?php
2
3namespace App\Http\Middleware;
4
5use Closure;
6use Illuminate\Http\Request;
7use Illuminate\Http\Response;
8use Symfony\Component\HttpFoundation\BinaryFileResponse;
9use Symfony\Component\HttpFoundation\StreamedResponse;
10
11class GzipResponse
12{
13    /**
14     * Handle an incoming request.
15     *
16     * @return mixed
17     */
18    public function handle(Request $request, Closure $next)
19    {
20        ini_set('memory_limit', '-1');
21        session()->save();
22
23        // Skip CORS preflight requests entirely
24        if ($request->isMethod('OPTIONS')) {
25            return $next($request);
26        }
27
28        $response = $next($request);
29
30        // Skip for API docs, binary downloads, and streamed responses
31        if ($request->is('docs/api*')
32            || $response instanceof BinaryFileResponse
33            || $response instanceof StreamedResponse
34        ) {
35            return $response;
36        }
37
38        // Only re-encode JSON responses to normalize unicode/slashes
39        if (is_array($response->getOriginalContent()) || is_object($response->getOriginalContent())) {
40            $rawContent = $response->getContent();
41            $decoded = json_decode($rawContent, true, 1024);
42
43            if (json_last_error() === JSON_ERROR_NONE && $decoded !== null) {
44                $response->setContent(
45                    json_encode($decoded, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)
46                );
47            }
48
49            $response->headers->set('Content-Type', 'application/json');
50        }
51
52        return $response;
53    }
54}