feat: add bypassCustomProtocolHandlers option to net.request (#48882)
* feat: add bypassCustomProtocolHandlers option to net.request Co-authored-by: Kai <udbmnm@163.com> * style: fix lint errors in api-protocol-spec Co-authored-by: Kai <udbmnm@163.com> --------- Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com> Co-authored-by: Kai <udbmnm@163.com>
This commit is contained in:
parent
bb930b887b
commit
b5f19ce974
3 changed files with 24 additions and 1 deletions
|
|
@ -25,6 +25,11 @@ following properties:
|
||||||
with which the request is associated. Defaults to the empty string. The
|
with which the request is associated. Defaults to the empty string. The
|
||||||
`session` option supersedes `partition`. Thus if a `session` is explicitly
|
`session` option supersedes `partition`. Thus if a `session` is explicitly
|
||||||
specified, `partition` is ignored.
|
specified, `partition` is ignored.
|
||||||
|
* `bypassCustomProtocolHandlers` boolean (optional) - When set to `true`,
|
||||||
|
custom protocol handlers registered for the request's URL scheme will not be
|
||||||
|
called. This allows forwarding an intercepted request to the built-in
|
||||||
|
handler. [webRequest](web-request.md) handlers will still be triggered
|
||||||
|
when bypassing custom protocols. Defaults to `false`.
|
||||||
* `credentials` string (optional) - Can be `include`, `omit` or
|
* `credentials` string (optional) - Can be `include`, `omit` or
|
||||||
`same-origin`. Whether to send
|
`same-origin`. Whether to send
|
||||||
[credentials](https://fetch.spec.whatwg.org/#credentials) with this
|
[credentials](https://fetch.spec.whatwg.org/#credentials) with this
|
||||||
|
|
|
||||||
|
|
@ -289,7 +289,8 @@ function parseOptions (optionsIn: ClientRequestConstructorOptions | string): Nod
|
||||||
referrerPolicy: options.referrerPolicy,
|
referrerPolicy: options.referrerPolicy,
|
||||||
cache: options.cache,
|
cache: options.cache,
|
||||||
allowNonHttpProtocols: Object.hasOwn(options, kAllowNonHttpProtocols),
|
allowNonHttpProtocols: Object.hasOwn(options, kAllowNonHttpProtocols),
|
||||||
priority: options.priority
|
priority: options.priority,
|
||||||
|
bypassCustomProtocolHandlers: options.bypassCustomProtocolHandlers
|
||||||
};
|
};
|
||||||
if ('priorityIncremental' in options) {
|
if ('priorityIncremental' in options) {
|
||||||
urlLoaderOptions.priorityIncremental = options.priorityIncremental;
|
urlLoaderOptions.priorityIncremental = options.priorityIncremental;
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ import * as webStream from 'node:stream/web';
|
||||||
import { setTimeout } from 'node:timers/promises';
|
import { setTimeout } from 'node:timers/promises';
|
||||||
import * as url from 'node:url';
|
import * as url from 'node:url';
|
||||||
|
|
||||||
|
import { collectStreamBody, getResponse } from './lib/net-helpers';
|
||||||
import { listen, defer, ifit } from './lib/spec-helpers';
|
import { listen, defer, ifit } from './lib/spec-helpers';
|
||||||
import { WebmGenerator } from './lib/video-helpers';
|
import { WebmGenerator } from './lib/video-helpers';
|
||||||
import { closeAllWindows, closeWindow } from './lib/window-helpers';
|
import { closeAllWindows, closeWindow } from './lib/window-helpers';
|
||||||
|
|
@ -1578,6 +1579,22 @@ describe('protocol module', () => {
|
||||||
expect(await net.fetch(url, { bypassCustomProtocolHandlers: true }).then(r => r.text())).to.equal('default');
|
expect(await net.fetch(url, { bypassCustomProtocolHandlers: true }).then(r => r.text())).to.equal('default');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('can bypass intercepted protocol handlers with net.request', async () => {
|
||||||
|
protocol.handle('http', () => new Response('custom'));
|
||||||
|
defer(() => { protocol.unhandle('http'); });
|
||||||
|
const server = http.createServer((req, res) => {
|
||||||
|
res.end('default');
|
||||||
|
});
|
||||||
|
defer(() => server.close());
|
||||||
|
const { url } = await listen(server);
|
||||||
|
// Make a request using net.request with bypassCustomProtocolHandlers: true
|
||||||
|
const request = net.request({ method: 'GET', url, bypassCustomProtocolHandlers: true });
|
||||||
|
const response = await getResponse(request);
|
||||||
|
const body = await collectStreamBody(response);
|
||||||
|
expect(response.statusCode).to.equal(200);
|
||||||
|
expect(body).to.equal('default');
|
||||||
|
});
|
||||||
|
|
||||||
it('bypassing custom protocol handlers also bypasses new protocols', async () => {
|
it('bypassing custom protocol handlers also bypasses new protocols', async () => {
|
||||||
protocol.handle('app', () => new Response('custom'));
|
protocol.handle('app', () => new Response('custom'));
|
||||||
defer(() => { protocol.unhandle('app'); });
|
defer(() => { protocol.unhandle('app'); });
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue