HTTPError.net

The fastest way to diagnose, understand, and fix any HTTP status code

426 Upgrade Required

Fault: Client
TL;DR

The server refuses the request on the current protocol and names a required one in the Upgrade header (e.g. a newer TLS version).

The client must switch to a different protocol to continue.

What HTTP 426 Upgrade Required Means

The client must switch to a different protocol to continue.

The server refuses the request on the current protocol and names a required one in the Upgrade header (e.g. a newer TLS version).

Common Causes

How to Fix It (For Visitors)

How to Fix It (For Developers/Admins)

Returning a 426 Upgrade Required (Code Examples)

If you build APIs or web apps, here is how to send an HTTP 426 response and how to test for it:

Node.js (Express)

app.get('/resource', (req, res) => {
  res.status(426).json({ error: 'Upgrade Required' });
});

Python (Flask)

@app.route('/resource')
def resource():
    return jsonify(error='Upgrade Required'), 426

PHP

<?php
http_response_code(426);
header('Content-Type: application/json');
echo json_encode(['error' => 'Upgrade Required']);

Check the status with curl

curl -I https://example.com/resource
# Look for: HTTP/1.1 426 Upgrade Required

Frequently Asked Questions

What does HTTP 426 Upgrade Required mean?

The server refuses the request on the current protocol and names a required one in the Upgrade header (e.g. a newer TLS version). In short: The client must switch to a different protocol to continue.

Is 426 Upgrade Required a client or server error?

426 is a 4xx client-error code, so the request itself needs to change. The server is running normally and is rejecting the request as it was sent by the browser, app, or API client.

How do I fix a 426 Upgrade Required error?

Send Upgrade and Connection headers. Adopt the required protocol/TLS version. Update the HTTP client.

Official Specification

The 426 Upgrade Required status code is defined in RFC 9110 Section 15.5.22.

View the IANA HTTP Status Code Registry →