URL がサーバーで扱える長さを超えています。
使いどころ
巨大なクエリ文字列。データを POST のボディに移してください。
よくある原因と対処法
リクエスト URL が上限を超えています。典型的なきっかけは、フィルターや ID のリストから組み立てた巨大なクエリ文字列、URL 内の base64 データ、1 周ごとにパラメーターを追加するリダイレクトループ(returnUrl の中に入れ子になった returnUrl)、積み重なったトラッキングパラメーターです。nginx はリクエスト行が large_client_header_buffers(デフォルトは 8k)に収まらないと 414 を返し、Apache の LimitRequestLine は 8190 バイトです。
ブラウザー、CDN、アナリティクス、ログツールのどれでも安全なように、URL は約 2,000 文字以内に抑えましょう。Cloudflare は URL を 16 KB に制限しています。対処法は、データを POST のボディに移すか、フィルターを検索エンドポイントに POST して、URL に入れられる短い ID を返してもらうことです。サーバーの制限を引き上げることもできますが、経路上のプロキシにはそれぞれ独自の制限があります。
クライアントエラー (4xx)
4xx はクライアントエラーです。リクエスト自体が誤っている、認証されていない、または存在しないものを指しています。同じリクエストを再試行しても解決しません。
レスポンスでの表示
HTTP/1.1 414 URI Too Long返し方
| Node.js / Express | res.status(414).end() |
|---|---|
| Python / Flask | return '', 414 |
| nginx | return 414; |
確認方法
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/