Response modification lets you change what the server sends back to the browser. This helps you add headers, change status codes, or modify the content before the user sees it.
Response modification in NextJS
export async function GET(request) { const response = await fetch('https://api.example.com/data'); const data = await response.json(); return new Response(JSON.stringify(data), { status: 200, headers: { 'Content-Type': 'application/json', 'Cache-Control': 'max-age=3600' } }); }
You create a new Response object to modify what is sent back.
Headers, status, and body can all be changed in the Response constructor.
export async function GET() { return new Response('Hello World', { status: 200, headers: { 'Content-Type': 'text/plain' } }); }
export async function GET() { return new Response(null, { status: 404, statusText: 'Not Found' }); }
export async function GET() { const headers = new Headers(); headers.set('Set-Cookie', 'user=123; Path=/; HttpOnly'); return new Response('Cookie set', { status: 200, headers }); }
This Next.js API route fetches data from an external API, then modifies the response by adding a custom header before sending it back to the client.
export async function GET() { // Fetch data from external API const response = await fetch('https://jsonplaceholder.typicode.com/todos/1'); const data = await response.json(); // Modify response: add custom header and change status return new Response(JSON.stringify(data), { status: 200, headers: { 'Content-Type': 'application/json', 'X-Custom-Header': 'MyHeaderValue' } }); }
Always set the correct Content-Type header to match your response body.
You can create and modify Headers objects for more control.
Remember to handle errors when fetching or modifying responses.
Response modification lets you control what the server sends back.
You can change headers, status codes, and the response body.
This helps improve security, caching, and user experience.
Practice
Solution
Step 1: Understand response headers role
Response headers tell the browser how to handle the data, like caching or security rules.Step 2: Identify what modifying headers affects
Changing headers controls browser behavior, not client state or URLs.Final Answer:
Control caching and security policies sent to the browser -> Option BQuick Check:
Headers control browser policies = A [OK]
- Thinking headers change client-side state
- Confusing headers with URL routing
- Assuming headers update databases
Solution
Step 1: Recall Next.js API response methods
Next.js uses Node.js response objects where setHeader is the standard method.Step 2: Compare options to Node.js response API
Only setHeader is a valid method; others are incorrect or undefined.Final Answer:
res.setHeader('X-Custom-Header', 'value') -> Option AQuick Check:
Use setHeader to set headers = D [OK]
- Using res.headers as an object directly
- Calling non-existent methods like header() or addHeader()
- Confusing client-side and server-side APIs
export default function handler(req, res) {
res.status(404).json({ error: 'Not found' });
}Solution
Step 1: Identify the status method usage
The code calls res.status(404) to set the HTTP status code to 404.Step 2: Understand the effect of res.status()
This sets the response status code before sending JSON data.Final Answer:
404 -> Option CQuick Check:
res.status(404) sets status code 404 [OK]
- Assuming default 200 status without checking code
- Confusing 404 with 500 or redirect codes
- Ignoring the status() method effect
export default function handler(req, res) {
res.status(200);
res.json({ message: 'Hello' });
res.setHeader('X-Test', 'value');
}Solution
Step 1: Review response order rules
Headers must be set before sending the response body with res.json().Step 2: Identify incorrect header setting
res.setHeader() is called after res.json(), which is too late to modify headers.Final Answer:
Headers must be set before sending the response body -> Option DQuick Check:
Set headers before body = C [OK]
- Setting headers after res.json()
- Thinking res.status() sends response immediately
- Ignoring response flow order
export default function handler(req, res) {
const isAuth = req.headers.authorization === 'secret-token';
// Add caching headers only if authenticated
???
res.status(200).json({ data: 'Secure data' });
}Solution
Step 1: Understand the condition for caching
Caching headers should be added only if the user is authenticated (isAuth is true).Step 2: Choose the correct conditional header setting
if (isAuth) { res.setHeader('Cache-Control', 'private, max-age=3600'); } sets caching headers only when isAuth is true, matching the requirement.Final Answer:
if (isAuth) { res.setHeader('Cache-Control', 'private, max-age=3600'); } -> Option AQuick Check:
Set cache header only if authenticated = B [OK]
- Setting cache headers when not authenticated
- Using public cache instead of private
- Returning 401 without setting headers when required
Ready to prove it?
Pass the test and this pattern moves unknown
