Skip to content
This repository was archived by the owner on Nov 1, 2018. It is now read-only.

Commit d28468c

Browse files
authored
Override IIS headers in inproc (#1409)
1 parent b08b237 commit d28468c

File tree

3 files changed

+23
-16
lines changed

3 files changed

+23
-16
lines changed

src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.cs

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -318,29 +318,23 @@ public unsafe void SetResponseHeaders()
318318
{
319319
var headerValues = headerPair.Value;
320320
var knownHeaderIndex = HttpApiTypes.HTTP_RESPONSE_HEADER_ID.IndexOfKnownHeader(headerPair.Key);
321-
if (knownHeaderIndex == -1)
321+
for (var i = 0; i < headerValues.Count; i++)
322322
{
323-
var headerNameBytes = Encoding.UTF8.GetBytes(headerPair.Key);
324-
for (var i = 0; i < headerValues.Count; i++)
323+
var isFirst = i == 0;
324+
var headerValueBytes = Encoding.UTF8.GetBytes(headerValues[i]);
325+
fixed (byte* pHeaderValue = headerValueBytes)
325326
{
326-
var headerValueBytes = Encoding.UTF8.GetBytes(headerValues[i]);
327-
fixed (byte* pHeaderName = headerNameBytes)
327+
if (knownHeaderIndex == -1)
328328
{
329-
fixed (byte* pHeaderValue = headerValueBytes)
329+
var headerNameBytes = Encoding.UTF8.GetBytes(headerPair.Key);
330+
fixed (byte* pHeaderName = headerNameBytes)
330331
{
331-
NativeMethods.HttpResponseSetUnknownHeader(_pInProcessHandler, pHeaderName, pHeaderValue, (ushort)headerValueBytes.Length, fReplace: false);
332+
NativeMethods.HttpResponseSetUnknownHeader(_pInProcessHandler, pHeaderName, pHeaderValue, (ushort)headerValueBytes.Length, fReplace: isFirst);
332333
}
333334
}
334-
}
335-
}
336-
else
337-
{
338-
for (var i = 0; i < headerValues.Count; i++)
339-
{
340-
var headerValueBytes = Encoding.UTF8.GetBytes(headerValues[i]);
341-
fixed (byte* pHeaderValue = headerValueBytes)
335+
else
342336
{
343-
NativeMethods.HttpResponseSetKnownHeader(_pInProcessHandler, knownHeaderIndex, pHeaderValue, (ushort)headerValueBytes.Length, fReplace: false);
337+
NativeMethods.HttpResponseSetKnownHeader(_pInProcessHandler, knownHeaderIndex, pHeaderValue, (ushort)headerValueBytes.Length, fReplace: isFirst);
344338
}
345339
}
346340
}

test/Common.FunctionalTests/Inprocess/ResponseHeaderTests.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,5 +74,12 @@ public async Task CustomErrorCodeWorks(int code, string reason, string expectedR
7474
// ReadAsStringAsync returns empty string for empty results
7575
Assert.Equal(body ?? string.Empty, await response.Content.ReadAsStringAsync());
7676
}
77+
78+
[ConditionalFact]
79+
public async Task ServerHeaderIsOverriden()
80+
{
81+
var response = await _fixture.Client.GetAsync("OverrideServer");
82+
Assert.Equal("MyServer/7.8", response.Headers.Server.Single().Product.ToString());
83+
}
7784
}
7885
}

test/WebSites/shared/SharedStartup/Startup.shared.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,5 +82,11 @@ public async Task ApplicationInitialization(HttpContext context)
8282
}
8383
await context.Response.WriteAsync(_applicationInitializationCalled.ToString());
8484
}
85+
86+
public Task OverrideServer(HttpContext context)
87+
{
88+
context.Response.Headers["Server"] = "MyServer/7.8";
89+
return Task.CompletedTask;
90+
}
8591
}
8692
}

0 commit comments

Comments
 (0)