HTTPQUERY
Bahasa Indonesia

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