
- Next.js - Home
- Next.js - Overview
- Next.js - Project Setup
- Next.js - Folder Structure
- Next.js - App Router
- Next.js - Page Router
- Next.js Features
- Next.js - Pages
- Next.js - Data Fetching
- Next.js - ISR
- Next.js - Static File Serving
- Next.js - Pre-Rendering
- Next.js - Partial Pre Rendering
- Next.js - Server Side Rendering
- Next.js - Client Side Rendering
- Next.js Routing
- Next.js - Routing
- Next.js - Nested Routing
- Next.js - Dynamic Routing
- Next.js - Parallel Routing
- Next.js - Imperative Routing
- Next.js - Shallow Routing
- Next.js - Intercepting Routes
- Next.js - Redirecting Routes
- Next.js - Navigation and Linking
- Next.js Configuration
- Next.js - TypeScript
- Next.js - Environment Variables
- Next.js - File Conventions
- Next.js - ESLint
- Next.js API & Backend
- Next.js - API Routes
- Next.js - Dynamic API Routes
- Next.js - Route Handlers
- Next.js - API MiddleWares
- Next.js - Response Helpers
- Next.js API Reference
- Next.js - CLI Commands
- Next.js - Functions
- Next.js - Directives
- Next.js - Components
- Next.js - Image Component
- Next.js - Font Component
- Next.js - Head Component
- Next.js - Form Component
- Next.js - Link Component
- Next.js - Script Component
- Next.js Styling & SEO
- Next.js - CSS Support
- Next.js - Global CSS Support
- Next.js - Meta Data
- Next.js Advanced Topics
- Next.js - Error Handling
- Next.js - Server Actions
- Next.js - Fast Refresh
- Next.js - Internationalization
- Next.js - Authentication
- Next.js - Session Management
- Next.js - Authorization
- Next.js - Caching
- Next.js - Data Caching
- Next.js - Router Caching
- Next.js - Full Route Caching
- Next.js - Request Memoization
- Next.js Performance Optimization
- Next.js - Optimizations
- Next.js - Image Optimization
- Next.js - Lazy Loading
- Next.js - Font Optimization
- Next.js - Video Optimization
- Next.js - Script Optimization
- Next.js - Memory Optimization
- Next.js - Using OpenTelemetry
- Next.js - Package Bundling Optimization
- Next.js Testing
- Next.js - Testing
- Next.js - Testing with Jest
- Next.js - Testing with Cypress
- Next.js - Testing with Vitest
- Next.js - Testing with Playwright
- Next.js Debugging & Deployment
- Next.js - Debugging
- Next.js - Deployment
- Next.js Useful Resources
- Next.js - Interview Questions
- Next.js - Quick Guide
- Next.js - Useful Resources
- Next.js - Discussion
Next.js - headers() Function
The headers() Function
The Next.js headers()
function is used to read the HTTP incoming request headers from a Server Component. This function is helpful when you want to access the headers of the incoming request and use them to customize the response based on the user's device or browser settings.
Syntax
Following is the syntax of headers()
function:
import { headers } from 'next/headers' export default async function Page() { const headersList = await headers() const userAgent = headersList.get('user-agent') }
Parameters
The headers()
function does not take any parameters.
Return Value
The headers()
function returns a read-only Web Headers object, which is a collection of key/value pairs representing the headers of the incoming request.
- Headers.entries(): Returns an iterator allowing to go through all key/value pairs contained in this object.
- Headers.forEach(): Executes a provided function once for each key/value pair in this Headers object.
- Headers.get(): Returns a String sequence of all the values of a header within a Headers object with a given name.
- Headers.has(): Returns a boolean stating whether a Headers object contains a certain header.
- Headers.keys(): Returns an iterator allowing you to go through all keys of the key/value pairs contained in this object.
- Headers.values(): Returns an iterator allowing you to go through all values of the key/value pairs contained in this object.
Key Points
- The headers is an asynchronous function that returns a promise. You must use async/await or React's use function.
- In version 14 and earlier, headers was a synchronous function. To help with backwards compatibility, you can still access it synchronously in Next.js 15, but this behavior will be deprecated in the future.
- Since headers is read-only, you cannot set or delete the outgoing request headers.
- The headers() is a Dynamic API whose returned values cannot be known ahead of time. Using it in will opt a route into dynamic rendering.
Example 1
In the code below, we used authorization header to fetch user data from an API. The headers() function is used to read the HTTP incoming request headers from a Server Component and get the authorization header value.
import { headers } from 'next/headers' export default async function Page() { const authorization = (await headers()).get('authorization') const res = await fetch('...', { headers: { authorization }, // Forward the authorization header }) const user = await res.json() return <h1>{user.name}</h1> }
Example 2
In the code below, we used the headers() function to read the HTTP incoming request headers from a Server Component and get the user-agent header value.
import { headers } from 'next/headers' export default async function Page() { const headersList = await headers() const userAgent = headersList.get('user-agent') return <h1>{userAgent}</h1> }