---
title: "Modifying Request Headers in Middleware"
description: "Learn to add/update/delete request headers in a middleware."
url: "https://vercel.com/templates/next.js/edge-functions-modify-request-header"
links:
  repository: "https://github.com/vercel/examples/tree/main/edge-middleware/modify-request-header"
  demo: "https://edge-middleware-modify-request-header.vercel.app"
  deploy: "https://vercel.com/new/clone?demo-title=Modifying+Request+Headers+in+Middleware&demo-description=Learn+to+add%2Fupdate%2Fdelete+request+headers+in+a+middleware.&demo-url=https%3A%2F%2Fedge-middleware-modify-request-header.vercel.app&project-name=modify-request-header&repository-name=modify-request-header&repository-url=https%3A%2F%2Fgithub.com%2Fvercel%2Fexamples%2Ftree%2Fmain%2Fedge-middleware%2Fmodify-request-header&demo-image=%2F%2Fimages.ctfassets.net%2Fe5382hct74si%2F1ICimocCMonK2k49FN399u%2Fa0d145707459a5ac197932dcdfa936ee%2Fedge-middleware-modify-request-header.vercel.app_.png"
---

# Modifying Request Headers in Middleware

Learn to add/update/delete request headers in a middleware.

# Add Header Example

Below is the code from [middleware.ts](https://github.com/vercel/examples/tree/main/edge-middleware/modify-request-header/middleware.ts) showing how to add/update/delete headers in a middleware (available since Next.js v13.0.0):

```ts
import { NextResponse } from 'next/server'
import type { NextRequest } from 'next/server'

export default function middleware(request: NextRequest) {
  // Clone the request headers
  // You can modify them with headers API: https://developer.mozilla.org/en-US/docs/Web/API/Headers
  const requestHeaders = new Headers(request.headers)

  // Add new request headers
  requestHeaders.set('x-hello-from-middleware1', 'hello')
  requestHeaders.set('x-hello-from-middleware2', 'world!')

  // Update an existing request header
  requestHeaders.set('user-agent', 'New User Agent overriden by middleware!')

  // Delete an existing request header
  requestHeaders.delete('x-from-client')

  // You can also set request headers in NextResponse.rewrite
  return NextResponse.next({
    request: {
      // New request headers
      headers: requestHeaders,
    },
  })
}
```

## Demo

https://edge-middleware-modify-request-header.vercel.app

## How to Use

You can choose from one of the following two methods to use this repository:

### One-Click Deploy

Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=vercel-examples):

[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/examples/tree/main/edge-middleware/modify-request-header&project-name=modify-request-header&repository-name=modify-request-header)

### Clone and Deploy

Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app) with [pnpm](https://pnpm.io/installation) to bootstrap the example:

```bash
pnpm create next-app --example https://github.com/vercel/examples/tree/main/edge-middleware/modify-request-header modify-request-header
```

Next, run Next.js in development mode:

```bash
pnpm dev
```

Deploy it to the cloud with [Vercel](https://vercel.com/new?utm_source=github&utm_medium=readme&utm_campaign=edge-middleware-eap) ([Documentation](https://nextjs.org/docs/deployment)).

## Related Templates

### [Adding Response Headers in Edge Middleware](https://vercel.com/templates/next.js/edge-functions-add-header)

Learn to add response headers at the edge.

---

## Additional documentation

The [Vercel Knowledge Base](https://vercel.com/kb) contains guides and answers to common questions about Vercel, including deployment, framework configuration, domains, caching, and troubleshooting.
