何が起きたのか?
426 は「今のやり方ではもう受け付けません、新しい道具に切り替えてください」というサインです。 教室で言えば、ずっと使ってきた古い黒板から、ホワイトボードに切り替わった日。チョークではなくマーカーで書かないと反応しない——そんな移行期の場面に近いです。
サーバーは「同じ通信先でも、別のプロトコルでなら応えるよ」と言っています。レスポンスの Upgrade ヘッダに、切り替えるべきプロトコル (例: TLS/1.3, HTTP/2) が書かれていることが多く、それを見て対応します。
黒板からのひとこと
学校でも、新しい設備が入ったら使い方が変わります。古い道具で同じことをしようとすると、先生に「もう新しい道具を使ってね」と言われる。設備自体の安全や効率のためで、生徒だけに不便を強いているわけではありません。
426 もそれと同じで、サーバーは安全性 (TLS) や効率 (HTTP/2/3) のために、新しいプロトコルでの再接続を求めています。クライアント側のライブラリやランタイムを更新するのが、いちばん素直な対処です。
解決への歩み
大丈夫、次はこうしてみよう:
- HTTPS に切り替える:HTTP で叩いていたなら https:// で再接続
- HTTP クライアントの設定を見直す:ALPN、HTTP/2 の有効化、TLS バージョンを最新に
- Upgrade ヘッダを読む:サーバーが指定するプロトコルに合わせる
- 対応プロトコルを整理(管理者向け):エラー応答での Upgrade ヘッダ、利用者向けの移行ガイドを整える
実際にはこう見える
$ リクエスト
curl -i https://example.com/some/path ↓ レスポンス
HTTP/1.1 426 Upgrade Required
Content-Type: text/html; charset=utf-8
<!DOCTYPE html>
<html><body><h1>426 Upgrade Required</h1></body></html>