HTTP 426 Upgrade Required

Overview

The HTTP ~426 Upgrade Required~ status code indicates that the client should switch to a different protocol, as the current protocol is considered insufficient by the server.

Purpose

The HTTP 426 response is used to inform the client that it needs to upgrade to a different protocol for communication with the server.

Usage

Client Behavior:

  1. Send Request: The client sends an HTTP request to the server.
  2. Receive Response: The client receives the HTTP 426 status code, indicating that an upgrade to a different protocol is required.
  3. Upgrade Protocol: The client switches to the specified protocol for further communication.

Server Behavior:

  1. Evaluate Protocol: The server determines that the current protocol is insufficient for the requested resource.
  2. Send Response: The server responds with a ~426 Upgrade Required~ status, specifying the required protocol.

Scenarios

  • Protocol Upgrade: Used when the server requires the client to upgrade to a more secure or advanced protocol.

Sequence Diagram

Illustrating the process for an HTTP 426 response:

sequenceDiagram
    participant Client
    participant Server as Web Server

    Note over Client: Step 1: Client sends a request
    Client->>Server: HTTP Request (Step 1)

    Note over Server: Step 2: Server evaluates protocol
    Server->>Client: HTTP/1.1 426 Upgrade Required (Step 2)
    Server->>Client: Upgrade: TLS/1.3 (Step 3)

Curl Request and Response Example

Sending a request that requires an upgrade using Curl:

curl -i http://example.com/resource
# Expected response: HTTP/1.1 426 Upgrade Required
# Upgrade: TLS/1.3

PHP cURL Request and Response Example

PHP script using cURL to handle a 426 Upgrade Required response:

<?php
$ch = curl_init('http://example.com/resource');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == 426) {
    $upgradeProtocol = curl_getinfo($ch, CURLINFO_UPGRADE);
    echo "Upgrade required. Upgrade to: $upgradeProtocol";
}
curl_close($ch);
?>

Python Request and Response Example

Python script to handle a 426 Upgrade Required response:

import requests
response = requests.get('http://example.com/resource')
if response.status_code == 426:
    upgrade_protocol = response.headers['Upgrade']
    print(f"Upgrade required. Upgrade to: {upgrade_protocol}")

Apache Configuration for HTTP 426 Upgrade Required

Configuring Apache to handle scenarios where the server requires a protocol upgrade:

<VirtualHost *:80>
    ServerName example.com
    <Location "/resource">
        # Additional configuration to evaluate protocol
        # ...
        # Return 426 Upgrade Required with Upgrade header
        Header always set Upgrade "TLS/1.3"
        ErrorDocument 426 "HTTP/1.1 426 Upgrade Required"
    </Location>
</VirtualHost>

NGINX Configuration for HTTP 426 Upgrade Required

Setting up NGINX to handle scenarios where the server requires a protocol upgrade:

server {
    listen 80;
    server_name example.com;
    location /resource {
        # Additional configuration to evaluate protocol
        # ...
        # Return 426 Upgrade Required with Upgrade header
        add_header Upgrade "TLS/1.3";
        return 426 "HTTP/1.1 426 Upgrade Required";
    }
}

HTTP 425 Reserved for WebDAV HTTP 428 Precondition Required


 

Free Weekly

Newsletter

Join my weekly newsletter for the latest in tech! You'll get neat coding tricks, trend updates, career advice, SaaS reviews, crypto, bitcoin, and financial tips. All straight to your inbox, designed to keep you ahead.