How can i store event.response or event.response.header into KV?

How can i store event.response.header into KV?
Currently with

await EDGE_CACHE.put(l.hostname+l.pathname,event.response); or 
await EDGE_CACHE.put(l.hostname+l.pathname,event.response.header);

it says

 TypeError: KV put() accepts only strings, ArrayBuffers, ArrayBufferViews, and ReadableStreams as values.
    at handleRequest

so what’s the optimum way to convert event.response or event.response.header into… one of the above? ArrayBuffers, ArrayBufferViews, and ReadableStreams

the most efficient / fastest way. which type? arraybuffers, arraybufferviews or readablestreams?

Getting this problem below. How do I put and get values for both event.response.headers and event.response.body?

Please help. Thanks in advance.

worker.js:6 Uncaught (in promise) TypeError: KV put() accepts only strings, ArrayBuffers, ArrayBufferViews, and ReadableStreams as values.
at handleRequest (VM3 worker.js:6)

async function handleRequest(request) {
  const response = await fetch(url)
  const results = await gatherResponse(response)
  //let cloneResponse = results.clone()

  EDGE_CACHE.put("h",results.headers)
  EDGE_CACHE.put("b",results.Body)
  

let body123 = EDGE_CACHE.get("b")

  return new Response(body123,results)
  //return new Response(results.body,results)
}
addEventListener('fetch', event => {
  return event.respondWith(handleRequest(event.request))
})
/**
 * gatherResponse awaits and returns a response body as a string.
 * Use await gatherResponse(..) in an async function to get the response body
 * @param {Response} response
 */
async function gatherResponse(response) {
  const { headers } = response
  const contentType = headers.get('content-type')
  if (contentType.includes('application/json')) {
    console.log("z");
    return await response.json()
  } else if (contentType.includes('application/text')) {
    console.log("a")
    return await response.text()
  } else if (contentType.includes('text/html')) {
    console.log("b")
    //return await response.text()
    return await response
  } else {
    console.log("c");
    return await response.text()
  }
}
/**
 * Example someHost at url is set up to respond with HTML
 * Replace url with the host you wish to send requests to
 *  */
//const someHost = 'https://workers-tooling.cf/demos'
const someHost = 'https://community.cloudflare.com'
const url = someHost + '/t/anyone-using-fauna-with-workers/175419'

I would imagine that turning the header into a string would be the right option here, but I haven’t tried it myself.

How can i convert http header request to byte stream and store in KV? and later retrieve?

resp.header()

How can i store and retrieve the same for http resp.body() too?

how do i convert response and request headers to arraybuffers?

i would like to convert them for storage inside kv. how do i do that?