426 Upgrade Required

クライアントは別のプロトコルに切り替える必要があります。

使いどころ

より新しい TLS や HTTP バージョンを強制する場合。

よくある原因と対処法

426 は、サーバーが現在のプロトコルではリクエストを処理しないことを意味し、受け入れ可能なプロトコルを Upgrade ヘッダーに列挙します。最もよく見かけるのは、ブラウザーのタブや curl から通常の HTTP リクエストで WebSocket エンドポイントを開いたときで、サーバーは Upgrade: websocket を期待していました。リバースプロキシが WebSocket サーバーへの途中で Upgrade ヘッダーと Connection ヘッダーを落とした場合にも発生します。

HTTP から HTTPS への誘導には適していません。ブラウザーは 426 を受け取っても自動ではアップグレードしないので、301 か 308 のリダイレクトと HSTS を使ってください。古いモバイルアプリのバージョンにアップデートを強制するために、ボディにメッセージを入れて 426 を使う API もあります。プロキシが原因なら、nginx では proxy_http_version 1.1 と、両方のヘッダーの転送が必要です。

クライアントエラー (4xx)

4xx はクライアントエラーです。リクエスト自体が誤っている、認証されていない、または存在しないものを指しています。同じリクエストを再試行しても解決しません。

レスポンスでの表示

HTTP/1.1 426 Upgrade Required

返し方

Node.js / Expressres.status(426).end()
Python / Flaskreturn '', 426
nginxreturn 426;

確認方法

curl -s -o /dev/null -w "%{http_code}\n" https://example.com/

HTTP ステータスコードを開く