MCPcopy Create free account
hub / github.com/nodejs/node / mainFetch

Function mainFetch

deps/undici/undici.js:13679–13776  ·  view source on GitHub ↗
(fetchParams, recursive)

Source from the content-addressed store, hash-verified

13677 }
13678 __name(fetching, "fetching");
13679 async function mainFetch(fetchParams, recursive) {
13680 try {
13681 const request = fetchParams.request;
13682 let response = null;
13683 if (request.localURLsOnly && !urlIsLocal(requestCurrentURL(request))) {
13684 response = makeNetworkError("local URLs only");
13685 }
13686 tryUpgradeRequestToAPotentiallyTrustworthyURL(request);
13687 if (requestBadPort(request) === "blocked") {
13688 response = makeNetworkError("bad port");
13689 }
13690 if (request.referrerPolicy === "") {
13691 request.referrerPolicy = request.policyContainer.referrerPolicy;
13692 }
13693 if (request.referrer !== "no-referrer") {
13694 request.referrer = determineRequestsReferrer(request);
13695 }
13696 if (response === null) {
13697 const currentURL = requestCurrentURL(request);
13698 if (
13699 // - request?s current URL?s origin is same origin with request?s origin,
13700 // and request?s response tainting is "basic"
13701 sameOrigin(currentURL, request.url) && request.responseTainting === "basic" || // request?s current URL?s scheme is "data"
13702 currentURL.protocol === "data:" || // - request?s mode is "navigate" or "websocket"
13703 (request.mode === "navigate" || request.mode === "websocket")
13704 ) {
13705 request.responseTainting = "basic";
13706 response = await schemeFetch(fetchParams);
13707 } else if (request.mode === "same-origin") {
13708 response = makeNetworkError('request mode cannot be "same-origin"');
13709 } else if (request.mode === "no-cors") {
13710 if (request.redirect !== "follow") {
13711 response = makeNetworkError(
13712 'redirect mode cannot be "follow" for "no-cors" request'
13713 );
13714 } else {
13715 request.responseTainting = "opaque";
13716 response = await schemeFetch(fetchParams);
13717 }
13718 } else if (!urlIsHttpHttpsScheme(requestCurrentURL(request))) {
13719 response = makeNetworkError("URL scheme must be a HTTP(S) scheme");
13720 } else {
13721 request.responseTainting = "cors";
13722 response = await httpFetch(fetchParams);
13723 }
13724 }
13725 if (recursive) {
13726 return response;
13727 }
13728 if (response.status !== 0 && !response.internalResponse) {
13729 if (request.responseTainting === "cors") {
13730 }
13731 if (request.responseTainting === "basic") {
13732 response = filterResponse(response, "basic");
13733 } else if (request.responseTainting === "cors") {
13734 response = filterResponse(response, "cors");
13735 } else if (request.responseTainting === "opaque") {
13736 response = filterResponse(response, "opaque");

Callers 2

fetchingFunction · 0.70
httpRedirectFetchFunction · 0.70

Calls 15

__nameFunction · 0.85
processBodyErrorFunction · 0.85
includesMethod · 0.80
urlIsLocalFunction · 0.70
requestCurrentURLFunction · 0.70
makeNetworkErrorFunction · 0.70
requestBadPortFunction · 0.70
sameOriginFunction · 0.70
schemeFetchFunction · 0.70
urlIsHttpHttpsSchemeFunction · 0.70

Tested by

no test coverage detected