質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Q&A

解決済

3回答

20150閲覧

GETクエリが長すぎてエラーになります

t33

総合スコア33

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

0グッド

0クリップ

投稿2016/11/23 14:15

編集2016/11/23 15:36

###質問内容
ページ遷移をする際に「GETクエリ」が長すぎてスクリーンショットのようなエラーが出てしまいます。
この現象を解決したく質問致しました。本当に困っています。何卒よろしくお願い致します。
(GETクエリを消すようなものがあればいいのですが・・・)
###スクリーンショット
イメージ説明

【Request header】
イメージ説明
イメージ説明
###備考
・「index.php」に初めに飛んできた際に「GETクエリ」が必ずくっついています。
・環境はXAMPPのローカルサーバーを使用しています。
・「index.php」に初めに飛んできた際に「GETクエリ」から得た情報はすでに変数に格納しているので、「index.php」からページ遷移するときには「GETクエリ」の情報は必要ありません。
・試しに「GETクエリ」を消した状態でページ遷移を行いましたが問題なくページ遷移出来ました。
(GETクエリが長いとスクリーンショットのような問題が出ていると思われます。)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

どうもこんにちは。
URLの長さの制限についてRFCでは規定されていないので、データ量の制限はないはずです。
ですが、WebサーバーのなかにはデフォルトでGETリクエストのデータ量を制限しているものがあるので、それが今回のエラーの原因かもしれませんね。
いずれにせよ、大きいサイズのGETリクエストを送信するとブラウザがクラッシュする可能性大なので、あまりおすすめできません。

投稿2016/11/23 14:49

編集2016/11/23 14:50
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t33

2016/11/23 16:21

caeさんこんにちは。ご返信ありがとうございます。 「XAMPP」を使っているのですが、index.phpに大量のGETクエリを送信したところデフォルト値を超えてエラーになって送信出来なかった経緯があるので「httpd.conf」の「LimitRequestLine」 の値を変更してあります。 (index.phpは動くのですが、そこから更にページ遷移する際にスクリーンショットのようなエラーが出ています。。)
退会済みユーザー

退会済みユーザー

2016/11/23 16:40

スクリーンショットを見る限りでは、HTTPリクエストヘッダのサイズ制限に引っかかっているかもしれません。LimitRequestFieldSizeの値を大きくするとどうでしょうか?
t33

2016/11/23 16:56

お教え頂いた内容で無事動作しました!!! GETで送信出来ないと詰んでしまい困っていた為本当に助かりました。。 ありがとうございます!!!
guest

0

Chrome のデベロッパーツールで、「Network」→「Status」を調べてください。

エラーコードが「414」であれば、URIの ? いかが長いぞと言うエラーですが、恐らく今回の場合は違うでしょう。

イメージ説明

Size of request header

と出ているのですから、Request header を確認します。

イメージ説明

Request header の中には、Cookieの情報も含まれています。Cookieに保存できる容量にも制限はありますし、サーバーが受け付ける容量にも制限があります。不要な情報が消されずに残っていたりしませんか?不要なCookieが残っているのはアプリケーションの責任ですので、アプリケーションで対処してください。

Size of request header exceeds server limit

「Server limit」と言う文字列が含まれていることを考えれば、このメッセージがサーバーで返していることが推測されますよね。このことから、「IEでのみ発生する現象」と言う可能性は低いと考えられます。


「data=>... 」のところがはっきりと分からなかったのですがどういうことでしょうか。

イメージ説明

refer にセットされている部分に data= と言う文字列が見えます。

投稿2016/11/23 14:59

編集2016/11/23 16:21
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t33

2016/11/23 15:36

・Chromeのキャッシュは消してみたのですが、同じエラーが出ています。 ・Chrome ブラウザのタグに「400 Bad Request」と記載されていました。(関係なかったらごめんなさい) ・お教え頂きました「Request header」のスクリーンショットをアップ致しました。
退会済みユーザー

退会済みユーザー

2016/11/23 15:38

ショットを見る限り、referer が異常に長いですね。エラーメッセージの最後に referer って出ていることからこれが原因でしょう。
t33

2016/11/23 15:53 編集

やはりここですか・・・。 GETクエリが長い理由なのですが、 「monacaアプリ」から「ローカルサーバー」のindex.phpに飛ぶ際に、 「monacaアプリ」の一部のデータを「GETクエリ」で送信しています。 「GETクエリ」自体は長いですが正常に送られており、「index.php」を表示する際には問題ないのですが、更に「index.php」から別ページに飛ぶ際にこの現象が発生しています。 (「index.php」に初めに飛んできたときには必要な情報はすでに変数に格納しているので使いません。「GETクエリを消す」、あるいは「回避」できるような策があればよいのですが・・・)
退会済みユーザー

退会済みユーザー

2016/11/23 15:56

どこかで、data=>... のように定義されていることは明らかですから、そこを突き止めて対処すればいいのでは?
t33

2016/11/23 16:15

望みがありそうでよかったです。 ごめんなさい。「data=>... 」のところがはっきりと分からなかったのですがどういうことでしょうか。
t33

2016/11/23 16:31

dataの部分ですが「monacaアプリ」から「ローカルサーバー」に飛ぶ際に「InAppBrowser」を使っているのですがそこで以下のように指定して「index.php」にGETクエリを付けて飛ばしています。 cordova.InAppBrowser.open( 'http://localhost/index.php?data=' + encodeURIComponent( json_obj )) 上記のdataが該当箇所になります。「json_obj」にGETクエリで送信しているデータが格納されている変数になります。
退会済みユーザー

退会済みユーザー

2016/11/23 16:33

必要があってそうしているのか削除すべきものなのかは、私が判断することではありませんので、ご自身で判断してください。
t33

2016/11/23 16:44 編集

GETクエリで送信している情報は必要なものになります。(data=は必要ないのですが、data以降のデータは必要です) GETクエリを後から消すといったことは出来ないのでしょうか。。
退会済みユーザー

退会済みユーザー

2016/11/23 16:45

sーバーに送信した時点でエラーになるのですから、消す場合はサーバーに送信する前に行うことになりますね。 GETにわざわざつけなければ実現できない何らかの機能で使っているのでしょうから、前提が成立しないと言うことでしょう。POSTで送信するとか、SESSIONを使うとか他の方法を使うのが王道でしょう。
t33

2016/11/23 16:50 編集

POSTとローカルストレージの方法は試したのですが、monacaとローカルストレージの仕様から使えませんでした。 (なのでデータ量が多くなる為使いたくなかったのですがGETを選択しています。) ちなみになのですが、サーバーに送信した時点のことですが「index.php」を初めて表示しているとき(GETクエリを始めて受け取ったとき)は問題なく動いています。(index.phpからページ遷移するときに初めてエラーが出ています。)
退会済みユーザー

退会済みユーザー

2016/11/23 16:59 編集

> サーバーに送信した時点のことですが「index.php」を初めて表示しているとき(GETクエリを始めて受け取ったとき)は問題なく動いています  正常な時とそうでない時のリクエストヘッダを見比べれば、いいじゃないですかね。その時リファラーの値がどうなっているかを確認しましょう。その時はエラー時と異なる値になっているはずですよ。 > index.phpからページ遷移するときに初めてエラーが出ています。 そのタイミングでリファラーがセットされていると言うことですよね。他のアプローチを模索して見る以外に方法はないんじゃないですか? サーバーの設定を変える方法は確かにありますが、GETで受け取った文字列を eval() とか通していそうで、セキュッリティ的に問題がありそうです。
t33

2016/11/23 17:00

caeさんに教えて頂いた内容で無事動きました。 本当に困っていた為、教えて頂き、又ご協力頂き Kosuke_Shibuyaさん本当にありがとうございました!
guest

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t33

2016/11/23 14:34

お教え頂いた文字数制限なのですが、自分でも同じようなサイトを見たのですが、 「IE」だけの話なのかと思っていたのでIEを使わない前提なら問題ないのかなと思っていました。 (間違っていたらすみません。)
退会済みユーザー

退会済みユーザー

2016/11/23 15:02

レガシーブラウザが255バイト制限を取っていたころのかな
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問