diff --git a/src/lib/__snapshots__/create-config.test.ts.snap b/src/lib/__snapshots__/create-config.test.ts.snap index c4558a4d27bf..4085c204fe79 100644 --- a/src/lib/__snapshots__/create-config.test.ts.snap +++ b/src/lib/__snapshots__/create-config.test.ts.snap @@ -102,6 +102,7 @@ exports[`should create default config 1`] = ` "responseTimeWithAppNameKillSwitch": false, "scheduledConfigurationChanges": false, "strictSchemaValidation": false, + "stripClientHeadersOn304": false, }, "externalResolver": { "getVariant": [Function], diff --git a/src/lib/features/client-feature-toggles/client-feature-toggle.controller.ts b/src/lib/features/client-feature-toggles/client-feature-toggle.controller.ts index 4a040590c50e..a0830c28ff57 100644 --- a/src/lib/features/client-feature-toggles/client-feature-toggle.controller.ts +++ b/src/lib/features/client-feature-toggles/client-feature-toggle.controller.ts @@ -248,6 +248,11 @@ export default class FeatureController extends Controller { if (etag === userVersion) { res.status(304); + if (this.flagResolver.isEnabled('stripClientHeadersOn304')) { + res.getHeaderNames().forEach((header) => + res.removeHeader(header), + ); + } res.end(); return; } else { diff --git a/src/lib/routes/client-api/metrics.ts b/src/lib/routes/client-api/metrics.ts index 191419819c03..509cf6fb5175 100644 --- a/src/lib/routes/client-api/metrics.ts +++ b/src/lib/routes/client-api/metrics.ts @@ -1,6 +1,6 @@ import { Response } from 'express'; import Controller from '../controller'; -import { IUnleashConfig, IUnleashServices } from '../../types'; +import { IFlagResolver, IUnleashConfig, IUnleashServices } from '../../types'; import ClientInstanceService from '../../services/client-metrics/instance-service'; import { Logger } from '../../logger'; import { IAuthRequest } from '../unleash-types'; @@ -24,6 +24,8 @@ export default class ClientMetricsController extends Controller { metricsV2: ClientMetricsServiceV2; + flagResolver: IFlagResolver; + constructor( { clientInstanceService, @@ -44,6 +46,7 @@ export default class ClientMetricsController extends Controller { this.clientInstanceService = clientInstanceService; this.openApiService = openApiService; this.metricsV2 = clientMetricsServiceV2; + this.flagResolver = config.flagResolver; this.route({ method: 'post', @@ -90,6 +93,11 @@ export default class ClientMetricsController extends Controller { ); await this.metricsV2.registerClientMetrics(data, clientIp); + if (this.flagResolver.isEnabled('stripClientHeadersOn304')) { + res.getHeaderNames().forEach((header) => + res.removeHeader(header), + ); + } res.status(202).end(); } catch (e) { res.status(400).end(); diff --git a/src/lib/types/experimental.ts b/src/lib/types/experimental.ts index 5e5fc76300dd..a7701de814a0 100644 --- a/src/lib/types/experimental.ts +++ b/src/lib/types/experimental.ts @@ -29,7 +29,8 @@ export type IFlagKey = | 'featureSearchAPI' | 'featureSearchFrontend' | 'scheduledConfigurationChanges' - | 'detectSegmentUsageInChangeRequests'; + | 'detectSegmentUsageInChangeRequests' + | 'stripClientHeadersOn304'; export type IFlags = Partial<{ [key in IFlagKey]: boolean | Variant }>; @@ -130,6 +131,11 @@ const flags: IFlags = { .UNLEASH_EXPERIMENTAL_DETECT_SEGMENT_USAGE_IN_CHANGE_REQUESTS, false, ), + stripClientHeadersOn304: parseEnvVarBoolean( + process.env + .UNLEASH_EXPERIMENTAL_DETECT_SEGMENT_USAGE_IN_CHANGE_REQUESTS, + false, + ), }; export const defaultExperimentalOptions: IExperimentalOptions = { diff --git a/src/server-dev.ts b/src/server-dev.ts index 1f490c6d2f2d..b1e9520bccb3 100644 --- a/src/server-dev.ts +++ b/src/server-dev.ts @@ -40,6 +40,7 @@ process.nextTick(async () => { privateProjects: true, featureSearchAPI: true, featureSearchFrontend: false, + stripClientHeadersOn304: true, }, }, authentication: {