[英]How to alter the headers of a Response?
是否可以更改由fetch()
返回的Response
對象的標頭?
假設我想通過resFn
轉換響應:
self.addEventListener('fetch', function (event) {
event.respondWith(fetch(event.request).then(resFn));
});
resFn()
應該是什么樣? 一種嘗試:
function resFn(res) {
res = res.clone();
res.headers.set("foo", "bar");
return res;
}
出現TypeError: Failed to execute 'set' on 'Headers': Headers are immutable
。
(一個單獨的問答解釋了如何更改請求的標頭 。鑒於Request
和Response
對象出奇的不同(不同的屬性及其構造函數采用不同的參數),是否適用相同的解決方案?)
這可以通過“手動”克隆響應來完成:
function resFn(res) {
return newResponse(res, function (headers) {
headers.set("foo", "bar");
return headers;
});
}
newResponse()
幫助函數在哪里:
function newResponse(res, headerFn) {
function cloneHeaders() {
var headers = new Headers();
for (var kv of res.headers.entries()) {
headers.append(kv[0], kv[1]);
}
return headers;
}
var headers = headerFn ? headerFn(cloneHeaders()) : res.headers;
return new Promise(function (resolve) {
return res.blob().then(function (blob) {
resolve(new Response(blob, {
status: res.status,
statusText: res.statusText,
headers: headers
}));
});
});
}
請注意, newResponse()
返回Promise<Response>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.