Cloudflare Docs
Workers
Visit Workers on GitHub
Set theme to dark (⇧+D)

Modify request property

Create a modified request with edited properties based off of an incoming request.
/**
 * Example someHost is set up to return raw JSON
 * @param {string} someUrl the URL to send the request to, since we are setting hostname too only path is applied
 * @param {string} someHost the host the request will resolve too
 */
const someHost = 'example.com';
const someUrl = 'https://foo.example.com/api.js';

async function handleRequest(request) {
  /**
   * The best practice is to only assign new RequestInit properties
   * on the request object using either a method or the constructor
   */
  const newRequestInit = {
    // Change method
    method: 'POST',
    // Change body
    body: JSON.stringify({ bar: 'foo' }),
    // Change the redirect mode.
    redirect: 'follow',
    // Change headers, note this method will erase existing headers
    headers: {
      'Content-Type': 'application/json',
    },
    // Change a Cloudflare feature on the outbound response
    cf: { apps: false },
  };

  // Change just the host
  const url = new URL(someUrl);

  url.hostname = someHost;

  // Best practice is to always use the original request to construct the new request
  // to clone all the attributes. Applying the URL also requires a constructor
  // since once a Request has been constructed, its URL is immutable.
  const newRequest = new Request(url.toString(), new Request(request, newRequestInit));

  // Set headers using method
  newRequest.headers.set('X-Example', 'bar');
  newRequest.headers.set('Content-Type', 'application/json');
  try {
    return await fetch(newRequest);
  } catch (e) {
    return new Response(JSON.stringify({ error: e.message }), { status: 500 });
  }
}

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request));
});