Skip to content

Commit 0f65ec9

Browse files
committed
fix #156: support for multiple HTTP response headers with the same name
1 parent 5fa47e9 commit 0f65ec9

File tree

6 files changed

+55
-1
lines changed

6 files changed

+55
-1
lines changed

Diff for: src/iisnode/chttpprotocol.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -498,7 +498,7 @@ HRESULT CHttpProtocol::ParseResponseHeaders(CNodeHttpStoredContext* context)
498498
while (*(data + nameEndOffset) == ' ') // data is already zero-terminated, so this loop has sentinel value
499499
nameEndOffset++;
500500

501-
CheckError(response->SetHeader(data + offset, data + nameEndOffset, valueEndOffset - nameEndOffset, TRUE));
501+
CheckError(response->SetHeader(data + offset, data + nameEndOffset, valueEndOffset - nameEndOffset, FALSE));
502502
}
503503
else if ((valueEndOffset - nameEndOffset) >= 5 && 0 == memcmp((void*)(data + valueEndOffset - 5), "close", 5))
504504
{

Diff for: src/iisnode/iisnode.vcxproj

+3
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,7 @@ copy /y $(ProjectDir)\..\config\* $(ProjectDir)\..\..\build\$(Configuration)\$(P
255255
<None Include="..\..\test\functional\tests\119_servervars.js" />
256256
<None Include="..\..\test\functional\tests\120_dev_errors_exception.js" />
257257
<None Include="..\..\test\functional\tests\121_watchedFiles.js" />
258+
<None Include="..\..\test\functional\tests\122_multipleResponseHeaders.js" />
258259
<None Include="..\..\test\functional\tests\200_samples.bat" />
259260
<None Include="..\..\test\functional\tests\node_modules\iisnodeassert.js" />
260261
<None Include="..\..\test\functional\tests\parts\106_autoupdate_first.js" />
@@ -310,6 +311,8 @@ copy /y $(ProjectDir)\..\config\* $(ProjectDir)\..\..\build\$(Configuration)\$(P
310311
<None Include="..\..\test\functional\www\120_dev_errors_exception\web.config" />
311312
<None Include="..\..\test\functional\www\121_watchedFiles\hello.js" />
312313
<None Include="..\..\test\functional\www\121_watchedFiles\web.config" />
314+
<None Include="..\..\test\functional\www\122_multipleResponseHeaders\hello.js" />
315+
<None Include="..\..\test\functional\www\122_multipleResponseHeaders\web.config" />
313316
<None Include="..\..\test\performance\client.bat" />
314317
<None Include="..\..\test\performance\localRun.bat" />
315318
<None Include="..\..\test\performance\readme.txt" />

Diff for: src/iisnode/iisnode.vcxproj.filters

+12
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,9 @@
132132
<Filter Include="Tests\functional\www\121_watchedFiles">
133133
<UniqueIdentifier>{53a23746-6411-4600-8315-bc8a1b2120da}</UniqueIdentifier>
134134
</Filter>
135+
<Filter Include="Tests\functional\www\122_multipleResponseHeaders">
136+
<UniqueIdentifier>{53b5e674-69d5-4bae-9629-49cd8b7c7c45}</UniqueIdentifier>
137+
</Filter>
135138
</ItemGroup>
136139
<ItemGroup>
137140
<ClCompile Include="main.cpp">
@@ -576,6 +579,15 @@
576579
<None Include="..\..\test\functional\www\121_watchedFiles\web.config">
577580
<Filter>Tests\functional\www\121_watchedFiles</Filter>
578581
</None>
582+
<None Include="..\..\test\functional\www\122_multipleResponseHeaders\hello.js">
583+
<Filter>Tests\functional\www\122_multipleResponseHeaders</Filter>
584+
</None>
585+
<None Include="..\..\test\functional\www\122_multipleResponseHeaders\web.config">
586+
<Filter>Tests\functional\www\122_multipleResponseHeaders</Filter>
587+
</None>
588+
<None Include="..\..\test\functional\tests\122_multipleResponseHeaders.js">
589+
<Filter>Tests\functional\tests</Filter>
590+
</None>
579591
</ItemGroup>
580592
<ItemGroup>
581593
<ResourceCompile Include="iisnode.rc" />

Diff for: test/functional/tests/122_multipleResponseHeaders.js

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/*
2+
A simple GET request receives a hello world response
3+
*/
4+
5+
var net = require('net')
6+
, assert = require('assert');
7+
8+
var timeout = setTimeout(function () {
9+
console.error('Timeout occurred');
10+
assert.ok(false, 'request timed out');
11+
}, 10000);
12+
13+
var host = process.env.IISNODETEST_HOST || 'localhost';
14+
var port = process.env.IISNODETEST_PORT || 31415;
15+
16+
var client = net.connect(port, host, function () {
17+
client.setEncoding('utf8');
18+
client.write('GET /122_multipleResponseHeaders/hello.js HTTP/1.1\r\nHost: ' + host + ':' + port + '\r\n\r\n');
19+
});
20+
21+
client.on('data', function (data) {
22+
clearTimeout(timeout);
23+
assert.ok(data.indexOf('Foo: Val1') > 0, 'First instance of Foo header exists in the response');
24+
assert.ok(data.indexOf('Foo: Val2') > 0, 'Second instance of Foo header exists in the response');
25+
client.end();
26+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
var http = require('http');
2+
3+
http.createServer(function (req, res) {
4+
res.writeHead(200, [['Foo','Val1'], ['Foo','Val2']]);
5+
res.end('Hello, world!');
6+
}).listen(process.env.PORT);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<configuration>
2+
<system.webServer>
3+
<handlers>
4+
<add name="iisnode" path="hello.js" verb="*" modules="iisnode" />
5+
</handlers>
6+
</system.webServer>
7+
</configuration>

0 commit comments

Comments
 (0)