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>
}

Полезно знать:

Справочник 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).

app/page.js
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-адреса клиента.

app/page.js
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.