feat: allow setting the Origin header and Sec-Fetch-* headers in net.request() (#26135)
This commit is contained in:
parent
b8372fdc29
commit
e1cc78f275
5 changed files with 251 additions and 13 deletions
|
@ -475,6 +475,26 @@ describe('net module', () => {
|
|||
await collectStreamBody(response);
|
||||
});
|
||||
|
||||
it('should not change the case of header name', async () => {
|
||||
const customHeaderName = 'X-Header-Name';
|
||||
const customHeaderValue = 'value';
|
||||
const serverUrl = await respondOnce.toSingleURL((request, response) => {
|
||||
expect(request.headers[customHeaderName.toLowerCase()]).to.equal(customHeaderValue.toString());
|
||||
expect(request.rawHeaders.includes(customHeaderName)).to.equal(true);
|
||||
response.statusCode = 200;
|
||||
response.statusMessage = 'OK';
|
||||
response.end();
|
||||
});
|
||||
|
||||
const urlRequest = net.request(serverUrl);
|
||||
urlRequest.setHeader(customHeaderName, customHeaderValue);
|
||||
expect(urlRequest.getHeader(customHeaderName)).to.equal(customHeaderValue);
|
||||
urlRequest.write('');
|
||||
const response = await getResponse(urlRequest);
|
||||
expect(response.statusCode).to.equal(200);
|
||||
await collectStreamBody(response);
|
||||
});
|
||||
|
||||
it('should not be able to set a custom HTTP request header after first write', async () => {
|
||||
const customHeaderName = 'Some-Custom-Header-Name';
|
||||
const customHeaderValue = 'Some-Customer-Header-Value';
|
||||
|
@ -777,6 +797,140 @@ describe('net module', () => {
|
|||
it('should not store cookies');
|
||||
});
|
||||
|
||||
it('should set sec-fetch-site to same-origin for request from same origin', async () => {
|
||||
const serverUrl = await respondOnce.toSingleURL((request, response) => {
|
||||
expect(request.headers['sec-fetch-site']).to.equal('same-origin');
|
||||
response.statusCode = 200;
|
||||
response.statusMessage = 'OK';
|
||||
response.end();
|
||||
});
|
||||
const urlRequest = net.request({
|
||||
url: serverUrl,
|
||||
origin: serverUrl
|
||||
});
|
||||
await collectStreamBody(await getResponse(urlRequest));
|
||||
});
|
||||
|
||||
it('should set sec-fetch-site to same-origin for request with the same origin header', async () => {
|
||||
const serverUrl = await respondOnce.toSingleURL((request, response) => {
|
||||
expect(request.headers['sec-fetch-site']).to.equal('same-origin');
|
||||
response.statusCode = 200;
|
||||
response.statusMessage = 'OK';
|
||||
response.end();
|
||||
});
|
||||
const urlRequest = net.request({
|
||||
url: serverUrl
|
||||
});
|
||||
urlRequest.setHeader('Origin', serverUrl);
|
||||
await collectStreamBody(await getResponse(urlRequest));
|
||||
});
|
||||
|
||||
it('should set sec-fetch-site to cross-site for request from other origin', async () => {
|
||||
const serverUrl = await respondOnce.toSingleURL((request, response) => {
|
||||
expect(request.headers['sec-fetch-site']).to.equal('cross-site');
|
||||
response.statusCode = 200;
|
||||
response.statusMessage = 'OK';
|
||||
response.end();
|
||||
});
|
||||
const urlRequest = net.request({
|
||||
url: serverUrl,
|
||||
origin: 'https://not-exists.com'
|
||||
});
|
||||
await collectStreamBody(await getResponse(urlRequest));
|
||||
});
|
||||
|
||||
it('should not send sec-fetch-user header by default', async () => {
|
||||
const serverUrl = await respondOnce.toSingleURL((request, response) => {
|
||||
expect(request.headers).not.to.have.property('sec-fetch-user');
|
||||
response.statusCode = 200;
|
||||
response.statusMessage = 'OK';
|
||||
response.end();
|
||||
});
|
||||
const urlRequest = net.request({
|
||||
url: serverUrl
|
||||
});
|
||||
await collectStreamBody(await getResponse(urlRequest));
|
||||
});
|
||||
|
||||
it('should set sec-fetch-user to ?1 if requested', async () => {
|
||||
const serverUrl = await respondOnce.toSingleURL((request, response) => {
|
||||
expect(request.headers['sec-fetch-user']).to.equal('?1');
|
||||
response.statusCode = 200;
|
||||
response.statusMessage = 'OK';
|
||||
response.end();
|
||||
});
|
||||
const urlRequest = net.request({
|
||||
url: serverUrl
|
||||
});
|
||||
urlRequest.setHeader('sec-fetch-user', '?1');
|
||||
await collectStreamBody(await getResponse(urlRequest));
|
||||
});
|
||||
|
||||
it('should set sec-fetch-mode to no-cors by default', async () => {
|
||||
const serverUrl = await respondOnce.toSingleURL((request, response) => {
|
||||
expect(request.headers['sec-fetch-mode']).to.equal('no-cors');
|
||||
response.statusCode = 200;
|
||||
response.statusMessage = 'OK';
|
||||
response.end();
|
||||
});
|
||||
const urlRequest = net.request({
|
||||
url: serverUrl
|
||||
});
|
||||
await collectStreamBody(await getResponse(urlRequest));
|
||||
});
|
||||
|
||||
['navigate', 'cors', 'no-cors', 'same-origin'].forEach((mode) => {
|
||||
it(`should set sec-fetch-mode to ${mode} if requested`, async () => {
|
||||
const serverUrl = await respondOnce.toSingleURL((request, response) => {
|
||||
expect(request.headers['sec-fetch-mode']).to.equal(mode);
|
||||
response.statusCode = 200;
|
||||
response.statusMessage = 'OK';
|
||||
response.end();
|
||||
});
|
||||
const urlRequest = net.request({
|
||||
url: serverUrl,
|
||||
origin: serverUrl
|
||||
});
|
||||
urlRequest.setHeader('sec-fetch-mode', mode);
|
||||
await collectStreamBody(await getResponse(urlRequest));
|
||||
});
|
||||
});
|
||||
|
||||
it('should set sec-fetch-dest to empty by default', async () => {
|
||||
const serverUrl = await respondOnce.toSingleURL((request, response) => {
|
||||
expect(request.headers['sec-fetch-dest']).to.equal('empty');
|
||||
response.statusCode = 200;
|
||||
response.statusMessage = 'OK';
|
||||
response.end();
|
||||
});
|
||||
const urlRequest = net.request({
|
||||
url: serverUrl
|
||||
});
|
||||
await collectStreamBody(await getResponse(urlRequest));
|
||||
});
|
||||
|
||||
[
|
||||
'empty', 'audio', 'audioworklet', 'document', 'embed', 'font',
|
||||
'frame', 'iframe', 'image', 'manifest', 'object', 'paintworklet',
|
||||
'report', 'script', 'serviceworker', 'style', 'track', 'video',
|
||||
'worker', 'xslt'
|
||||
].forEach((dest) => {
|
||||
it(`should set sec-fetch-dest to ${dest} if requested`, async () => {
|
||||
const serverUrl = await respondOnce.toSingleURL((request, response) => {
|
||||
expect(request.headers['sec-fetch-dest']).to.equal(dest);
|
||||
response.statusCode = 200;
|
||||
response.statusMessage = 'OK';
|
||||
response.end();
|
||||
});
|
||||
const urlRequest = net.request({
|
||||
url: serverUrl,
|
||||
origin: serverUrl
|
||||
});
|
||||
urlRequest.setHeader('sec-fetch-dest', dest);
|
||||
await collectStreamBody(await getResponse(urlRequest));
|
||||
});
|
||||
});
|
||||
|
||||
it('should be able to abort an HTTP request before first write', async () => {
|
||||
const serverUrl = await respondOnce.toSingleURL((request, response) => {
|
||||
response.end();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue