Заголовки ky отсутствуют в действии сервера Next.js только в среде Production/KubernetesJavascript

Форум по Javascript
Ответить
Anonymous
 Заголовки ky отсутствуют в действии сервера Next.js только в среде Production/Kubernetes

Сообщение Anonymous »

У меня возникла проблема, когда определенный заголовок (

Код: Выделить всё

Content-Type: application/json
) отсутствует в исходящих запросах при запуске в моей тестовой среде Kubernetes, хотя тот же самый код прекрасно работает в Локальной разработке.
Почему заголовки ky.create удаляются или игнорируются именно в производственной среде Next.js в Kubernetes, в то время как заголовки и перехватчики .extend() продолжают работать? Существует ли известный конфликт между патчем глобальной выборки Next.js и настройками экземпляра ky по умолчанию?
Настройка:
  • Платформа: Next.js (с использованием App Router и действий сервера)
  • Библиотека: ky для выборка
  • Окружающая среда: Рабочая сборка (

    Код: Выделить всё

    NODE_ENV: production
    ), работающий в Kubernetes.
  • Кэширование: Использование nextjs-cache с томом KubernetesemptyDir.
Код: У меня есть централизованная конфигурация клиента с использованием ky.create и асинхронная функция getClient, которая расширяет это с заголовками, специфичными для сеанса.

Код: Выделить всё

'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 присутствуют, но

    Код: Выделить всё

    Content-TypeЗаголовок 
    отсутствует[/b].
Наблюдения:
  • Мы используем nextjs-cache. Я подозреваю, что запрос может быть перехвачен или изменен внутренним исправлением выборки Next.js в рабочей среде.
  • Поскольку он работает локально (режим разработки), но не работает в контейнере производственной сборки, это похоже на проблему промежуточного программного обеспечения или оптимизации, специфичной для среды.
  • Том пустойDir используется для кэширования, но поскольку это POST/PUT (где Content-Type имеет значение), он не должен выдавать устаревший кэшированный ответ.


Подробнее здесь: https://stackoverflow.com/questions/798 ... tes-enviro
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»