headers
Функция headers
позволяет читать HTTP-заголовки входящего запроса в Серверном Компоненте (Server Component).
headers()
Этот API расширяет Web Headers API. Он доступен только для чтения, то есть вы не можете изменять (set
) или удалять (delete
) заголовки исходящего запроса.
import { headers } from 'next/headers'
export default function Page() {
const headersList = headers()
const referer = headersList.get('referer')
return <div>Referer: {referer}</div>
}
import { headers } from 'next/headers'
export default function Page() {
const headersList = headers()
const referer = headersList.get('referer')
return <div>Referer: {referer}</div>
}
Полезно знать:
headers()
является Динамической Функцией (Dynamic Function), возвращаемые значения которой невозможно предсказать заранее. Использование в layout или page переведёт маршрут в режим динамического рендеринга (dynamic rendering) во время запроса.
Справочник API
const headersList = headers()
Параметры
headers
не принимает параметров.
Возвращаемое значение
headers
возвращает только для чтения объект Web Headers.
Headers.entries()
: Возвращаетитератор
для перебора всех пар ключ/значение в объекте.Headers.forEach()
: Выполняет переданную функцию один раз для каждой пары ключ/значение в объектеHeaders
.Headers.get()
: Возвращаетстроку
со всеми значениями заголовка с указанным именем.Headers.has()
: Возвращает логическое значение, указывающее, содержит ли объектHeaders
определённый заголовок.Headers.keys()
: Возвращаетитератор
для перебора всех ключей в объекте.Headers.values()
: Возвращаетитератор
для перебора всех значений в объекте.
Примеры использования
Использование с получением данных
headers()
можно использовать вместе с Suspense для получения данных (Suspense for Data Fetching).
import { Suspense } from 'react'
import { headers } from 'next/headers'
async function User() {
const authorization = headers().get('authorization')
const res = await fetch('...', {
headers: { authorization }, // Пересылаем заголовок authorization
})
const user = await res.json()
return <h1>{user.name}</h1>
}
export default function Page() {
return (
<Suspense fallback={null}>
<User />
</Suspense>
)
}
IP-адрес
headers()
можно использовать для получения IP-адреса клиента.
import { Suspense } from 'react'
import { headers } from 'next/headers'
function IP() {
const FALLBACK_IP_ADDRESS = '0.0.0.0'
const forwardedFor = headers().get('x-forwarded-for')
if (forwardedFor) {
return forwardedFor.split(',')[0] ?? FALLBACK_IP_ADDRESS
}
return headers().get('x-real-ip') ?? FALLBACK_IP_ADDRESS
}
export default function Page() {
return (
<Suspense fallback={null}>
<IP />
</Suspense>
)
}
Помимо x-forwarded-for
, headers()
также может читать:
x-real-ip
x-forwarded-host
x-forwarded-port
x-forwarded-proto
История версий
Версия | Изменения |
---|---|
v13.0.0 | Добавлена функция headers . |