簡體   English   中英

如何更改響應的標題?

[英]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

(一個單獨的問答解釋了如何更改請求的標頭 。鑒於RequestResponse對象出奇的不同(不同的屬性及其構造函數采用不同的參數),是否適用相同的解決方案?)

這可以通過“手動”克隆響應來完成:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM