Код: Выделить всё
Content-Type: application/jsonПочему заголовки ky.create удаляются или игнорируются именно в производственной среде Next.js в Kubernetes, в то время как заголовки и перехватчики .extend() продолжают работать? Существует ли известный конфликт между патчем глобальной выборки Next.js и настройками экземпляра ky по умолчанию?
Настройка:
- Платформа: Next.js (с использованием App Router и действий сервера)
- Библиотека: ky для выборка
- Окружающая среда: Рабочая сборка (), работающий в Kubernetes.
Код: Выделить всё
NODE_ENV: production - Кэширование: Использование nextjs-cache с томом KubernetesemptyDir.
Код: Выделить всё
'use server'
import ky from 'ky'
import { getCurrentUser } from '@/lib/server/session'
import { getCurrentTenantId } from '@/lib/server/tenant'
import { getAuthToken } from '@/services/auth/tokens'
const defaultClient = ky.create({
headers: {
'Content-Type': 'application/json',
},
hooks: {
beforeRequest: [
async request => {
const accessToken = await getAuthToken()
request.headers.set('Authorization', `Bearer ${accessToken}`)
},
],
},
prefixUrl: process.env.API_BASE_URL,
timeout: 60000,
})
export const getClient = async () => {
const [tenantId, user] = await Promise.all([getCurrentTenantId(), getCurrentUser()])
return defaultClient.extend({
headers: {
'XX-Requester': user?.userId,
'XX-Tenant': tenantId,
},
})
}
- Локально: Запрос, отправленный в API, включает Content-Type: application/json и все пользовательские заголовки XX-*.
- Test/K8s Env: Заголовки XX-* и заголовок Authorization присутствуют, но отсутствует[/b].
Код: Выделить всё
Content-TypeЗаголовок
- Мы используем nextjs-cache. Я подозреваю, что запрос может быть перехвачен или изменен внутренним исправлением выборки Next.js в рабочей среде.
- Поскольку он работает локально (режим разработки), но не работает в контейнере производственной сборки, это похоже на проблему промежуточного программного обеспечения или оптимизации, специфичной для среды.
- Том пустойDir используется для кэширования, но поскольку это POST/PUT (где Content-Type имеет значение), он не должен выдавать устаревший кэшированный ответ.
Подробнее здесь: https://stackoverflow.com/questions/798 ... tes-enviro