mirror of
https://github.com/denoland/deno.git
synced 2025-08-03 10:33:54 +00:00
refactor: store header keys lower case internally (#10958)
This is a minor optimization that removes some header key lowercasing that previously happened on access.
This commit is contained in:
parent
b4026dac9c
commit
49ec3d10ad
4 changed files with 21 additions and 37 deletions
|
@ -95,13 +95,7 @@
|
||||||
|
|
||||||
// 7.
|
// 7.
|
||||||
const list = headers[_headerList];
|
const list = headers[_headerList];
|
||||||
const lowercaseName = byteLowerCase(name);
|
name = byteLowerCase(name);
|
||||||
for (let i = 0; i < list.length; i++) {
|
|
||||||
if (byteLowerCase(list[i][0]) === lowercaseName) {
|
|
||||||
name = list[i][0];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
list.push([name, value]);
|
list.push([name, value]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,9 +106,9 @@
|
||||||
*/
|
*/
|
||||||
function getHeader(list, name) {
|
function getHeader(list, name) {
|
||||||
const lowercaseName = byteLowerCase(name);
|
const lowercaseName = byteLowerCase(name);
|
||||||
const entries = list.filter((entry) =>
|
const entries = list
|
||||||
byteLowerCase(entry[0]) === lowercaseName
|
.filter((entry) => entry[0] === lowercaseName)
|
||||||
).map((entry) => entry[1]);
|
.map((entry) => entry[1]);
|
||||||
if (entries.length === 0) {
|
if (entries.length === 0) {
|
||||||
return null;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
|
@ -182,7 +176,7 @@
|
||||||
const headers = {};
|
const headers = {};
|
||||||
const cookies = [];
|
const cookies = [];
|
||||||
for (const entry of list) {
|
for (const entry of list) {
|
||||||
const name = byteLowerCase(entry[0]);
|
const name = entry[0];
|
||||||
const value = entry[1];
|
const value = entry[1];
|
||||||
if (value === null) throw new TypeError("Unreachable");
|
if (value === null) throw new TypeError("Unreachable");
|
||||||
// The following if statement is not spec compliant.
|
// The following if statement is not spec compliant.
|
||||||
|
@ -270,9 +264,9 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
const list = this[_headerList];
|
const list = this[_headerList];
|
||||||
const lowercaseName = byteLowerCase(name);
|
name = byteLowerCase(name);
|
||||||
for (let i = 0; i < list.length; i++) {
|
for (let i = 0; i < list.length; i++) {
|
||||||
if (byteLowerCase(list[i][0]) === lowercaseName) {
|
if (list[i][0] === name) {
|
||||||
list.splice(i, 1);
|
list.splice(i, 1);
|
||||||
i--;
|
i--;
|
||||||
}
|
}
|
||||||
|
@ -314,9 +308,9 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
const list = this[_headerList];
|
const list = this[_headerList];
|
||||||
const lowercaseName = byteLowerCase(name);
|
name = byteLowerCase(name);
|
||||||
for (let i = 0; i < list.length; i++) {
|
for (let i = 0; i < list.length; i++) {
|
||||||
if (byteLowerCase(list[i][0]) === lowercaseName) {
|
if (list[i][0] === name) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -358,10 +352,10 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
const list = this[_headerList];
|
const list = this[_headerList];
|
||||||
const lowercaseName = byteLowerCase(name);
|
name = byteLowerCase(name);
|
||||||
let added = false;
|
let added = false;
|
||||||
for (let i = 0; i < list.length; i++) {
|
for (let i = 0; i < list.length; i++) {
|
||||||
if (byteLowerCase(list[i][0]) === lowercaseName) {
|
if (list[i][0] === name) {
|
||||||
if (!added) {
|
if (!added) {
|
||||||
list[i][1] = value;
|
list[i][1] = value;
|
||||||
added = true;
|
added = true;
|
||||||
|
|
|
@ -152,10 +152,8 @@
|
||||||
let charset = null;
|
let charset = null;
|
||||||
let essence = null;
|
let essence = null;
|
||||||
let mimeType = null;
|
let mimeType = null;
|
||||||
const values = getDecodeSplitHeader(
|
const headerList = headerListFromHeaders(this[_headers]);
|
||||||
headerListFromHeaders(this[_headers]),
|
const values = getDecodeSplitHeader(headerList, "content-type");
|
||||||
"Content-Type",
|
|
||||||
);
|
|
||||||
if (values === null) return null;
|
if (values === null) return null;
|
||||||
for (const value of values) {
|
for (const value of values) {
|
||||||
const temporaryMimeType = mimesniff.parseMimeType(value);
|
const temporaryMimeType = mimesniff.parseMimeType(value);
|
||||||
|
|
|
@ -148,10 +148,8 @@
|
||||||
let charset = null;
|
let charset = null;
|
||||||
let essence = null;
|
let essence = null;
|
||||||
let mimeType = null;
|
let mimeType = null;
|
||||||
const values = getDecodeSplitHeader(
|
const headerList = headerListFromHeaders(this[_headers]);
|
||||||
headerListFromHeaders(this[_headers]),
|
const values = getDecodeSplitHeader(headerList, "content-type");
|
||||||
"Content-Type",
|
|
||||||
);
|
|
||||||
if (values === null) return null;
|
if (values === null) return null;
|
||||||
for (const value of values) {
|
for (const value of values) {
|
||||||
const temporaryMimeType = mimesniff.parseMimeType(value);
|
const temporaryMimeType = mimesniff.parseMimeType(value);
|
||||||
|
@ -220,7 +218,7 @@
|
||||||
}
|
}
|
||||||
const inner = newInnerResponse(status);
|
const inner = newInnerResponse(status);
|
||||||
inner.type = "default";
|
inner.type = "default";
|
||||||
inner.headerList.push(["Location", parsedURL.href]);
|
inner.headerList.push(["location", parsedURL.href]);
|
||||||
const response = webidl.createBranded(Response);
|
const response = webidl.createBranded(Response);
|
||||||
response[_response] = inner;
|
response[_response] = inner;
|
||||||
response[_headers] = headersFromHeaderList(
|
response[_headers] = headersFromHeaderList(
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
((window) => {
|
((window) => {
|
||||||
const core = window.Deno.core;
|
const core = window.Deno.core;
|
||||||
const webidl = window.__bootstrap.webidl;
|
const webidl = window.__bootstrap.webidl;
|
||||||
const { byteLowerCase } = window.__bootstrap.infra;
|
|
||||||
const { errorReadableStream } = window.__bootstrap.streams;
|
const { errorReadableStream } = window.__bootstrap.streams;
|
||||||
const { InnerBody, extractBody } = window.__bootstrap.fetchBody;
|
const { InnerBody, extractBody } = window.__bootstrap.fetchBody;
|
||||||
const {
|
const {
|
||||||
|
@ -290,9 +289,8 @@
|
||||||
* @returns {Promise<InnerResponse>}
|
* @returns {Promise<InnerResponse>}
|
||||||
*/
|
*/
|
||||||
function httpRedirectFetch(request, response, terminator) {
|
function httpRedirectFetch(request, response, terminator) {
|
||||||
const locationHeaders = response.headerList.filter((entry) =>
|
const locationHeaders = response.headerList
|
||||||
byteLowerCase(entry[0]) === "location"
|
.filter((entry) => entry[0] === "location");
|
||||||
);
|
|
||||||
if (locationHeaders.length === 0) {
|
if (locationHeaders.length === 0) {
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
@ -327,11 +325,7 @@
|
||||||
request.method = "GET";
|
request.method = "GET";
|
||||||
request.body = null;
|
request.body = null;
|
||||||
for (let i = 0; i < request.headerList.length; i++) {
|
for (let i = 0; i < request.headerList.length; i++) {
|
||||||
if (
|
if (REQUEST_BODY_HEADER_NAMES.includes(request.headerList[i][0])) {
|
||||||
REQUEST_BODY_HEADER_NAMES.includes(
|
|
||||||
byteLowerCase(request.headerList[i][0]),
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
request.headerList.splice(i, 1);
|
request.headerList.splice(i, 1);
|
||||||
i--;
|
i--;
|
||||||
}
|
}
|
||||||
|
@ -384,8 +378,8 @@
|
||||||
}
|
}
|
||||||
requestObject.signal[abortSignal.add](onabort);
|
requestObject.signal[abortSignal.add](onabort);
|
||||||
|
|
||||||
if (!requestObject.headers.has("Accept")) {
|
if (!requestObject.headers.has("accept")) {
|
||||||
request.headerList.push(["Accept", "*/*"]);
|
request.headerList.push(["accept", "*/*"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 12.
|
// 12.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue