headers
headers
関数を使用すると、サーバーコンポーネントからHTTP受信リクエストヘッダーを読み取ることができます。
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()
: このオブジェクトに含まれるすべてのキー/値ペアを通過するためのiterator
を返します。Headers.forEach()
: このHeaders
オブジェクト内の各キー/値ペアに対して、提供された関数を1回実行します。Headers.get()
: 指定された名前のヘッダー値のString
シーケンスを返します。Headers.has()
:Headers
オブジェクトが特定のヘッダーを含むかどうかを示すブール値を返します。Headers.keys()
: このオブジェクトに含まれるキー/値ペアのすべてのキーを通過するためのiterator
を返します。Headers.values()
: このオブジェクトに含まれるキー/値ペアのすべての値を通過するためのiterator
を返します。
使用例
データフェッチングとの併用
headers()
はサスペンスを使ったデータフェッチングと組み合わせて使用できます。
import { Suspense } from 'react'
import { headers } from 'next/headers'
async function User() {
const authorization = headers().get('authorization')
const res = await fetch('...', {
headers: { 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 が導入されました。 |