426 Upgrade Required
Penggunaan
Ketika status code 426 Upgrade Required diterima, response menyertakan field header response Upgrade yang menunjukkan protokol yang dibutuhkan.
Pesan ini berkaitan dengan pesan 101 Switching Protocols, yang dikirim sebagai response atas permintaan Protocol-Upgrade dari klien menggunakan header Upgrade.
Dampak SEO
Mesin pencari seperti Google tidak akan mengindeks URL dengan status response 426. URL yang sebelumnya terindeks namun mengembalikan status code ini akan dihapus dari hasil pencarian.
Contoh
Klien meminta sebuah sumber daya melalui HTTP biasa dan server merespons dengan 426 Upgrade Required karena TLS bersifat wajib. Klien beralih ke HTTPS dan permintaannya berhasil.
HTTP/2 dan HTTP/3
HTTP/2 dan HTTP/3 dinegosiasikan melalui ALPN selama TLS handshake, bukan melalui header Upgrade. Mekanisme upgrade HTTP/2 cleartext (h2c) telah dihapus dari spesifikasi. Header Upgrade berlaku untuk peralihan protokol seperti TLS dan WebSocket.
Permintaan awal
GET /tech-news HTTP/1.1
Host: example.com
Response awal
HTTP/1.1 426 Upgrade Required
Upgrade: TLS/1.2
Connection: upgrade
Content-Type: text/html
Content-Length: 140
<html>
<head>
<title>TLS Required</title>
</head>
<body>
<p>This service requires TLS.</p>
</body>
</html>
Permintaan berikutnya melalui HTTPS
GET /tech-news HTTP/1.1
Host: example.com
Response
HTTP/1.1 200 OK
Content-Type: text/html
Cara memperbaiki
Baca header Upgrade pada response untuk mengidentifikasi protokol yang dibutuhkan. Server mencantumkan satu atau beberapa protokol yang dapat diterima, seperti TLS/1.2, HTTP/2, HTTP/3, atau websocket.
Untuk upgrade versi protokol, alihkan klien ke protokol yang ditentukan lalu kirim ulang permintaan. HTTP/2 dan HTTP/3 menggunakan ALPN selama TLS handshake, bukan header Upgrade. Untuk protokol lain seperti WebSocket, sertakan Connection: upgrade beserta header Upgrade yang sesuai. Server merespons dengan 101 Switching Protocols dan koneksi berlanjut di bawah protokol baru.
Untuk koneksi WebSocket melalui nginx, konfigurasikan proxy agar meneruskan header upgrade:
Tanpa direktif tersebut, nginx secara bawaan menggunakan HTTP/1.0 untuk koneksi upstream dan membuang header upgrade, sehingga menghasilkan 426 pada setiap percobaan handshake WebSocket.
Ketika server mewajibkan HTTPS, ubah skema URL permintaan dari http:// menjadi https://. Pastikan TLS 1.2 atau TLS 1.3 diaktifkan pada klien atau lingkungan runtime. Versi TLS yang lebih lama umumnya ditolak.
Perbarui pustaka klien dan SDK apabila belum mendukung protokol yang dibutuhkan. Pustaka HTTP yang usang secara bawaan menggunakan HTTP/1.1 dan tidak memiliki kemampuan negosiasi HTTP/2 maupun HTTP/3.
Hapus header Upgrade yang tidak diperlukan dari permintaan yang memang tidak dimaksudkan untuk peralihan protokol. Sebagian proxy menafsirkan header Upgrade yang tercecer sebagai upaya negosiasi protokol dan mengembalikan 426.
Referensi kode
.NET
HttpStatusCode.UpgradeRequired
Rust
http::StatusCode::UPGRADE_REQUIRED
Rails
:upgrade_required
Go
http.StatusUpgradeRequired
Symfony
Response::HTTP_UPGRADE_REQUIRED
Python3.5+
http.HTTPStatus.UPGRADE_REQUIRED
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_UPGRADE_REQUIRED
Angular
@angular/common/http/HttpStatusCode.UpgradeRequired