php 23 lines · 5 steps

Enforcing a JSON Accept header in Laravel

A Laravel middleware that rejects clients that won't accept JSON and normalizes the Accept header for the rest.

Explained by highlit
1<?php
2 
3namespace App\Http\Middleware;
4 
5use Closure;
6use Illuminate\Http\Request;
7use Symfony\Component\HttpFoundation\Response;
8 
9class EnsureJsonAcceptHeader
10{
11 public function handle(Request $request, Closure $next): Response
12 {
13 if (! $request->accepts(['application/json', 'application/vnd.api+json'])) {
14 return response()->json([
15 'message' => 'This endpoint only serves JSON. Set the Accept header to application/json.',
16 ], Response::HTTP_NOT_ACCEPTABLE);
17 }
18 
19 $request->headers->set('Accept', 'application/json');
20 
21 return $next($request);
22 }
23}
01 / 01
STEP 01

Walkthrough

Space play step click any line
Three takeaways
  1. 1Middleware lets you guard requests before they reach a controller, centralizing cross-cutting concerns like content negotiation.
  2. 2Rejecting unacceptable requests with 406 Not Acceptable keeps an API honest about what it actually serves.
  3. 3Normalizing the Accept header downstream ensures the rest of the stack behaves consistently regardless of what the client sent.

Related explainers

Share this explainer

Here's the card — post it anywhere.

Enforcing a JSON Accept header in Laravel — share card
Made with highlit — turn any snippet into a walkthrough like this in about a minute.
Explain your code