| | import { NextResponse } from 'next/server' |
| |
|
| | import { headers as nextHeaders } from 'next/headers' |
| |
|
| | |
| | |
| | |
| | export async function proxy(request) { |
| | const headersFromRequest = new Headers(request.headers) |
| | |
| | const headersFromNext = await nextHeaders() |
| | headersFromRequest.set('x-from-proxy', 'hello-from-proxy') |
| |
|
| | |
| | if ( |
| | headersFromRequest.get('x-from-client') && |
| | headersFromNext.get('x-from-client') !== |
| | headersFromRequest.get('x-from-client') |
| | ) { |
| | throw new Error('Expected headers from client to match') |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| |
|
| | const removeHeaders = request.nextUrl.searchParams.get('remove-headers') |
| | if (removeHeaders) { |
| | for (const key of removeHeaders.split(',')) { |
| | headersFromRequest.delete(key) |
| | } |
| | } |
| |
|
| | const updateHeader = request.nextUrl.searchParams.get('update-headers') |
| | if (updateHeader) { |
| | for (const kv of updateHeader.split(',')) { |
| | const [key, value] = kv.split('=') |
| | headersFromRequest.set(key, value) |
| | } |
| | } |
| |
|
| | if (request.nextUrl.pathname.includes('/rewrite-to-app')) { |
| | request.nextUrl.pathname = '/headers' |
| | return NextResponse.rewrite(request.nextUrl) |
| | } |
| |
|
| | if (request.nextUrl.pathname === '/rsc-cookies') { |
| | const res = NextResponse.next() |
| | res.cookies.set('rsc-cookie-value-1', `${Math.random()}`) |
| | res.cookies.set('rsc-cookie-value-2', `${Math.random()}`) |
| |
|
| | return res |
| | } |
| |
|
| | if (request.nextUrl.pathname === '/rsc-cookies/cookie-options') { |
| | const res = NextResponse.next() |
| | res.cookies.set('rsc-secure-cookie', `${Math.random()}`, { |
| | secure: true, |
| | httpOnly: true, |
| | }) |
| |
|
| | return res |
| | } |
| |
|
| | if (request.nextUrl.pathname === '/rsc-cookies-delete') { |
| | const res = NextResponse.next() |
| | res.cookies.delete('rsc-cookie-value-1') |
| |
|
| | return res |
| | } |
| |
|
| | if (request.nextUrl.pathname === '/preloads') { |
| | const res = NextResponse.next({ |
| | headers: { |
| | link: '<https://example.com/page>; rel="alternate"; hreflang="en"', |
| | }, |
| | }) |
| | return res |
| | } |
| |
|
| | if (request.nextUrl.pathname === '/test-location-header') { |
| | return NextResponse.json( |
| | { foo: 'bar' }, |
| | { |
| | headers: { |
| | location: 'https://next-data-api-endpoint.vercel.app/api/random', |
| | }, |
| | } |
| | ) |
| | } |
| |
|
| | return NextResponse.next({ |
| | request: { |
| | headers: headersFromRequest, |
| | }, |
| | }) |
| | } |
| |
|