414 URI Too Longの原因と対策

414 URI Too Longとは

 URIが長すぎる、という場合に起こるステータスコードです。クエリ文字列(URIの?以降の文字列)が長すぎたり、httpサーバーの設定不備によって起こることが多いです。

訪問者側の対策

利用しているブラウザを確認する

 ブラウザが、利用しようとしているサイトでサポートされているか確認してください。

 たとえば、Google ChromeやFirefoxなどは殆どのウェブサイトでサポートされていますが、もしあなたがInternet Explorerなどを使っている場合は、ブラウザを変更してみるのもよいかもしれません。

Internet Explorerは、URLには最大2,083文字までしか利用できません。

 参考:Internet Explorer では URL に最大 2,083 文字が使用可能

サイト運営者に報告する

 先に述べたように、ウェブサイトを普通に使っていて414エラーが発生するケースは、ほとんどの場合、ウェブサイトのバグです。

 しかし、どうしても急ぎでそのウェブサイトを利用しなければならないケースがある場合は、下記を試してみてください。

フォームの文字列を短くする

 フォーム(テキストボックス)などに入力した文字長が長すぎる場合に発生することがあります。これは、フォームの内容をGETリクエストでURLとして送ってしまっていることが問題です。

 これはウェブアプリケーション側の一種のバグなのですが、テキストボックスに入力する内容を短くすることで、アクセスできる可能性が高くなります。

URI(URL)を短くする

 リンクなどを通じてサイトにアクセスしている場合、何らかの理由によってURIが長くなってしまっている可能性があります。

 URIの?以降の文字列はクエリ文字列といい、アプリケーションに指示を伝えるための文字列です。様々な目的に使われているものですが、トラッキング(情報取集)など、直接的にアプリケーションの動作に関わらないものもあります。

 直接的にアプリケーションに関係のない文字列が含まれていると確実に判断できる場合、それらの文字列を削除してアクセスしてみるのは有力な手段です。

 しかし、アプリケーション側で使われている文字列を削除してしまった場合、異常な動作を引き起こす可能性がありますので、通常は推奨できません。

運営者側の対策

 運営者側が取れる対策はいくつかあります。たとえば、nginxやapacheなどのhttpサーバーを利用している場合は、設定を変更することで改善することができます。

 通常、URLにそんなに過大な文字列が載ることはないのですが、dataスキームを使ったり、ハッシュやクエリ文字列でURIにデータを持っている場合もありますから、このようなことが起こる可能性もあります。

Apacheを使っている場合

 LimitRequestLineの値を設定/変更します。デフォルト値は8190。

LimitRequestLine 16380

 参考: Apache.org LimitRequestLine

nginxを使っている場合

 large_client_header_buffersの値を設定/変更します。デフォルト値は8k。

large_client_header_buffers 4 16k; 

 参考: Module ngx_http_core_module

tomcatを使っている場合

 httpサーバー以外に、Javaのtomcatを使っている場合などは、maxHttpHeaderSizeを変更します。デフォルトは4096です。

<Connector maxHttpHeaderSize="16384" ... />

 参考: Apache Tomcat Configuration Reference

適切な値

 IEを無理やりサポートしない限り、デフォルトの8k前後の値が最適でしょう。ただし、32k前後に拡大してもそれほど影響はありません。

 ただし、このサイズは、ソフトウェアによっては(tomcatなど)このサイズ分のメモリをリクエストの最初に確保するため、メモリ使用率に直結します。

 1万の同時アクセスが見込まれる場合、デフォルトでは8kb×10000で80MB程度のメモリを使用するに過ぎないのですが、たとえば800kbのヘッダを許容する場合、8GBのメモリを食いつぶされてしまい、思わぬ障害となる恐れがあります。

 アプリケーションが動作する「最低限の値」を設定することが重要です。

Bad Requestの場合もある

 headerSizeの指定が不適切ですと、URI Too Longのエラーの他、Bad Requestが発生する場合もあります。同様の設定変更で改善可能な場合もありますので、ぜひ試してみてください。

まとめ

 414 URI Too Longは、特に原因を特定しやすいものですが、事前に対策するなどしてユーザーに不便な思いをさせないようにしたいものですね。

コメント