net: Don't ignore the referer header in net.request (#23386)

This commit is contained in:
LuoJinghua 2020-05-21 01:28:38 +08:00 committed by GitHub
parent 0a481242f0
commit 9d851b8791
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 35 additions and 0 deletions

View file

@ -386,6 +386,7 @@ class ClientRequest extends Writable implements Electron.ClientRequest {
} }
return ret; return ret;
}; };
this._urlLoaderOptions.referrer = this._urlLoaderOptions.extraHeaders.referer || '';
const opts = { ...this._urlLoaderOptions, extraHeaders: stringifyValues(this._urlLoaderOptions.extraHeaders) }; const opts = { ...this._urlLoaderOptions, extraHeaders: stringifyValues(this._urlLoaderOptions.extraHeaders) };
this._urlLoader = createURLLoader(opts); this._urlLoader = createURLLoader(opts);
this._urlLoader.on('response-started', (event, finalUrl, responseHead) => { this._urlLoader.on('response-started', (event, finalUrl, responseHead) => {

View file

@ -352,6 +352,7 @@ gin::Handle<SimpleURLLoaderWrapper> SimpleURLLoaderWrapper::Create(
request->force_ignore_site_for_cookies = true; request->force_ignore_site_for_cookies = true;
opts.Get("method", &request->method); opts.Get("method", &request->method);
opts.Get("url", &request->url); opts.Get("url", &request->url);
opts.Get("referrer", &request->referrer);
std::map<std::string, std::string> extra_headers; std::map<std::string, std::string> extra_headers;
if (opts.Get("extraHeaders", &extra_headers)) { if (opts.Get("extraHeaders", &extra_headers)) {
for (const auto& it : extra_headers) { for (const auto& it : extra_headers) {

View file

@ -1253,6 +1253,38 @@ describe('net module', () => {
setTimeout(resolve, 50); setTimeout(resolve, 50);
}); });
}); });
it('should remove the referer header when no referrer url specified', async () => {
const serverUrl = await respondOnce.toSingleURL((request, response) => {
expect(request.headers.referer).to.equal(undefined);
response.statusCode = 200;
response.statusMessage = 'OK';
response.end();
});
const urlRequest = net.request(serverUrl);
urlRequest.end();
const response = await getResponse(urlRequest);
expect(response.statusCode).to.equal(200);
await collectStreamBody(response);
});
it('should set the referer header when a referrer url specified', async () => {
const referrerURL = 'https://www.electronjs.org/';
const serverUrl = await respondOnce.toSingleURL((request, response) => {
expect(request.headers.referer).to.equal(referrerURL);
response.statusCode = 200;
response.statusMessage = 'OK';
response.end();
});
const urlRequest = net.request(serverUrl);
urlRequest.setHeader('referer', referrerURL);
urlRequest.end();
const response = await getResponse(urlRequest);
expect(response.statusCode).to.equal(200);
await collectStreamBody(response);
});
}); });
describe('IncomingMessage API', () => { describe('IncomingMessage API', () => {

View file

@ -58,6 +58,7 @@ declare namespace NodeJS {
body: Uint8Array | BodyFunc; body: Uint8Array | BodyFunc;
session?: Electron.Session; session?: Electron.Session;
partition?: string; partition?: string;
referrer?: string;
} }
type ResponseHead = { type ResponseHead = {
statusCode: number; statusCode: number;