[解決済み] HTTP GETのクエリ文字列の長さの制限に対処しつつ、RESTfulにするにはどうすればよいですか?
質問
で述べたように http://www.boutell.com/newfaq/misc/urllength.html で述べたように、HTTP クエリ文字列は長さに制限があります。クライアント(Firefox、IE、...)、サーバ(Apache、IIS、...)、ネットワーク機器(アプリケーションファイアウォール、...)によって制限される可能性があります。
今日、私は検索フォームでこの問題に直面しました。私たちは多くのフィールドを持つ検索フォームを開発し、このフォームは GET リクエストとしてサーバーに送信されるので、私は結果ページをブックマークすることができます。
フィールドが多いので、クエリ文字列は 1100 バイトになり、1024 バイトを超える HTTP GET リクエストをドロップするファイアウォールを使用しています。システム管理者は、制限がないように、代わりに POST を使用するよう勧めています。
確かにPOSTは有効ですが、私は本当にPOSTではなくGETとして検索を感じています。ですから、クエリ文字列が長すぎないようにフィールド名を見直して、できない場合は現実的に考えて、POSTを使用することになると思います。
しかし、RESTfulサービスの設計に欠陥があるのでしょうか?GET リクエストの長さに制限がある場合、RESTful Web サービスに大きなオブジェクトを送信するにはどうすればよいのでしょうか。例えば、ファイルに基づいて計算を行うプログラムを持っていて、このようなRESTfulなウェブサービスを提供したいとします。
http://compute.com?content=<base64 file>
. クエリ文字列の長さは無制限ではないので、これはうまくいきません。
ちょっと困惑しています...。
どのように解決するのですか?
あなたの記述に基づくと、IMHOはあなたがPOSTを使用する必要があります。POST はデータをサーバーに置くためのもので、場合によっては回答を得ることもできます。あなたのケースでは、検索を行い(サーバーにクエリを送信)、その検索結果を取得します(クエリの結果を取得)。
GETの定義では、すでに存在するリソースを取得するために使用しなければならないとされています。POSTの定義では、POSTは新しいリソースを作成することです。これはまさに、サーバー上にリソースを作成し、それを取得することです! 検索結果を保存しなくても、サーバー上にオブジェクトを作成し、それを取得したことになります。PeterMmm が言ったように、POST (クエリ結果を作成して保存する) でこれを行い、GET でクエリを取得することもできますが、POST だけを行って結果を取得する方がより現実的でしょう。
これが役に立つといいのですが! :)
関連
-
[解決済み] リバースルーティングとは何ですか?
-
[解決済み] X-Forwarded-Forヘッダーが表示されないブラウザの理由
-
[解決済み] ブラウザによって異なるURLの最大長とは?
-
[解決済み] HTTP GET(リクエストボディ付き
-
[解決済み] ブラウザのCookieドメインはどのように機能するのですか?
-
[解決済み】AngularでHTTPリクエストにURL引数(クエリ文字列)を渡すには?
-
[解決済み】http:// のリンクを全て // に変更することは可能ですか?
-
[解決済み】マイクロサービスのオーケストレーション
-
[解決済み] 304 Not Modified」は具体的にどのように機能するのですか?
-
[解決済み] Cache-Control: privateとは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ExpressJSのX-Powered-Byを削除する方法 [重複]。
-
[解決済み] IISファイルのダウンロードがハングアップ/タイムアウトする - sc-win32-status = 64
-
[解決済み] Google ChromeでSPDYを無効にする方法
-
[解決済み] HTTPヘッダーの大文字と小文字は区別されますか?
-
[解決済み] POSTとGETの違いは何ですか?[重複しています]。
-
[解決済み】ファイルから取得した投稿データでcURLにリクエストを送信する。
-
[解決済み】REST APIでPATCHとPUTのどちらを使うべきですか?
-
[解決済み】ダイジェスト認証とベーシック認証の違いは何ですか?
-
[解決済み】「HTTPはステートレスプロトコルである」と言われているのはなぜですか?
-
[解決済み】HTTP 301と308のステータスコードの違いは何ですか?