Skip to content

Commit 646520a

Browse files
authored
Ensure headers are only attached to illuminate responses (#53019)
1 parent 1b3ef8f commit 646520a

File tree

2 files changed

+26
-3
lines changed

2 files changed

+26
-3
lines changed

src/Illuminate/Http/Middleware/AddLinkHeadersForPreloadedAssets.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Illuminate\Http\Middleware;
44

5+
use Illuminate\Http\Response;
56
use Illuminate\Support\Collection;
67
use Illuminate\Support\Facades\Vite;
78

@@ -17,7 +18,7 @@ class AddLinkHeadersForPreloadedAssets
1718
public function handle($request, $next)
1819
{
1920
return tap($next($request), function ($response) {
20-
if (Vite::preloadedAssets() !== []) {
21+
if ($response instanceof Response && Vite::preloadedAssets() !== []) {
2122
$response->header('Link', Collection::make(Vite::preloadedAssets())
2223
->map(fn ($attributes, $url) => "<{$url}>; ".implode('; ', $attributes))
2324
->join(', '));

tests/Http/Middleware/VitePreloadingTest.php

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use Illuminate\Http\Response;
1010
use Illuminate\Support\Facades\Facade;
1111
use PHPUnit\Framework\TestCase;
12+
use Symfony\Component\HttpFoundation\Response as SymfonyResponse;
1213

1314
class VitePreloadingTest extends TestCase
1415
{
@@ -20,7 +21,7 @@ protected function tearDown(): void
2021

2122
public function testItDoesNotSetLinkTagWhenNoTagsHaveBeenPreloaded()
2223
{
23-
$app = new Container();
24+
$app = new Container;
2425
$app->instance(Vite::class, new class extends Vite
2526
{
2627
protected $preloadedAssets = [];
@@ -36,7 +37,7 @@ public function testItDoesNotSetLinkTagWhenNoTagsHaveBeenPreloaded()
3637

3738
public function testItAddsPreloadLinkHeader()
3839
{
39-
$app = new Container();
40+
$app = new Container;
4041
$app->instance(Vite::class, new class extends Vite
4142
{
4243
protected $preloadedAssets = [
@@ -57,4 +58,25 @@ public function testItAddsPreloadLinkHeader()
5758
'<https://laravel.com/app.js>; rel="modulepreload"; foo="bar"'
5859
);
5960
}
61+
62+
public function testItDoesNotAttachHeadersToNonIlluminateResponses()
63+
{
64+
$app = new Container;
65+
$app->instance(Vite::class, new class extends Vite
66+
{
67+
protected $preloadedAssets = [
68+
'https://laravel.com/app.js' => [
69+
'rel="modulepreload"',
70+
'foo="bar"',
71+
],
72+
];
73+
});
74+
Facade::setFacadeApplication($app);
75+
76+
$response = (new AddLinkHeadersForPreloadedAssets)->handle(new Request, function () {
77+
return new SymfonyResponse('Hello Laravel');
78+
});
79+
80+
$this->assertNull($response->headers->get('Link'));
81+
}
6082
}

0 commit comments

Comments
 (0)