Skip to content
Workers
Visit Workers on GitHub
Set theme to dark (⇧+D)

Modify response

Fetch and modify response properties which are immutable by creating a copy first.

/**
* @param {string} headerNameSrc Header to get the new value from
* @param {string} headerNameDst Header to set based off of value in src
*/
const headerNameSrc = "foo" //"Orig-Header"
const headerNameDst = "Last-Modified"
async function handleRequest(request) {
/**
* Response properties are immutable. To change them, construct a new
* Response and pass modified status or statusText in the ResponseInit
* object. Response headers can be modified through the headers `set` method.
*/
const originalResponse = await fetch(request)
// Change status and statusText, but preserve body and headers
let response = new Response(originalResponse.body, {
status: 500,
statusText: "some message",
headers: originalResponse.headers,
})
// Change response body by adding the foo prop
const originalBody = await originalResponse.json()
const body = JSON.stringify({ foo: "bar", ...originalBody })
response = new Response(body, response)
// Add a header using set method
response.headers.set("foo", "bar")
// Set destination header to the value of the source header
const src = response.headers.get(headerNameSrc)
if (src != null) {
response.headers.set(headerNameDst, src)
console.log(
`Response header "${headerNameDst}" was set to "${response.headers.get(
headerNameDst,
)}"`,
)
}
return response
}
addEventListener("fetch", event => {
event.respondWith(handleRequest(event.request))
})