クライアントは別のプロトコルに切り替える必要があります。
使いどころ
より新しい 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 / Express | res.status(426).end() |
|---|---|
| Python / Flask | return '', 426 |
| nginx | return 426; |
確認方法
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/