HTTP GETリクエストの最大長


487

HTTP GETリクエストの最大長は?

この長さを超えるGETリクエストを受信した場合にサーバーが返すことができる/すべきであると定義された応答エラーはありますか?

これはWebサービスAPIのコンテキストにありますが、ブラウザーの制限を確認することも興味深いです。



7
@KillianDS URLの最大長とはまったく関係ありません。問題は、URLに送信されるリクエストの最大長についてです。
ローンヌ侯爵、2015年

2
@EJP GETの「データ」コンテンツは、URIにすぎません。
KillianDS 2015年

@JimAhoあなたのコメントも最初のコメントの複製です.....
Jun711

回答:


463

制限は、使用されるサーバーとクライアントの両方に依存します(該当する場合は、サーバーまたはクライアントが使用しているプロキシも)。

ほとんどのWebサーバーには8192バイト(8 KB)の制限があります。これは通常、サーバー構成のどこかで構成可能です。クライアント側の問題に関しては、HTTP 1.1仕様はこれについてさえ警告しています。以下は、3.2.1章の抜粋です。

注:サーバーは、255バイトを超えるURIの長さに依存することに注意する必要があります。これは、一部の古いクライアントまたはプロキシの実装がこれらの長さを適切にサポートしていない場合があるためです。

Internet ExplorerおよびSafariでの制限は約2 KB、Operaでは約4 KB、Firefoxでは約8 KBです。したがって、8 KBが可能な最大長であり、2 KBはサーバー側で信頼できるより手頃な長さであり、255バイトがURL全体が入ると想定するのに最も安全な長さであると想定できます。

ブラウザまたはサーバーのいずれかで制限を超えた場合、ほとんどは警告なしに制限外の文字を切り捨てます。ただし、一部のサーバーはHTTP 414エラーを送信する場合があります。大きなデータを送信する必要がある場合は、GETではなくPOSTを使用することをお勧めします。その制限ははるかに高いですが、クライアントよりも使用するサーバーに依存します。通常、平均的なWebサーバーでは最大約2 GBが許可されています。これは、サーバー設定のどこかでも構成できます。平均的なサーバーは、POSTの制限を超えると、サーバー固有のエラー/例外を表示します。通常はHTTP 500エラーです。


6
ブラウザの制限という点で質問に答えます。たとえば、HttpClientがRESTサーバーとの対話に使用されている場合、GETとPOSTの間に問題のあるリクエストサイズの違いがあるかどうかを知っていますか?
aioobe 2013

3
確かに、POSTは本文を使用してデータを送信します。HTTP仕様では、投稿に特定のサイズ制限を課していません。
イグナシオA.ポレッティ2013

1
HTTP仕様では、GETおよびDELETEリクエストに本文を入れることが完全に許可されています。私はそれをJavaでテストしましたが、うまくいきます。残念ながら、ここでもまた、一部のプロキシは全体をカットできます。
Nicolas Zozol 2014

12
Get and Postメソッドは非常に特定の意味を持つため、POSTを使用してGETを実行することは、ハンマーを使用して卵を割るのと同じです。
-nohros

18
@nohrosこれは理想的には真実ですが、GETにはPOST / PUTにはない制限もあります。たとえば、一連のIDを含む非常に長いクエリを実行するとします。何百ものIDを選択すると、許容されるURLサイズの制限に違反する可能性がありますが、そのクエリをPOSTに入れると、概念的にそれほど意味がなくてもそれを回避できます。個人的には、HTTPでGETリクエストがPUTやPOSTのようなボディを持つことを許可します。
devios1 2015

143

ここで2つの別々の質問をしています。

HTTP GETリクエストの最大長は?

すでに述べたように、HTTP自体は要求の長さにハードコーディングされた制限を課しません。ただし、ブラウザには2 KB〜8 KBの範囲の制限があります(非常に古いブラウザを数えると、255バイト)。

この長さを超えるGETリクエストを受信した場合にサーバーが返すことができる/すべきであると定義された応答エラーはありますか?

それは誰も答えていないものです。

HTTP 1.1は414 Request-URI Too Long、サーバー定義の制限に達した場合のステータスコードを定義します。RFC 2616の詳細を確認できます。

クライアント定義の制限の場合、サーバーが要求をまったく受信しないため、サーバーが何かを返すことに意味はありません。


23

ブラウザの制限は次のとおりです。

Browser           Address bar    document.location
                                 or anchor tag
---------------------------------------------------
Chrome                32779           >64k
Android                8192           >64k
Firefox                >64k           >64k
Safari                 >64k           >64k
Internet Explorer 11   2047           5120
Edge 16                2047          10240

もっと欲しい?Stack Overflowでこの質問を参照してください。



3

技術的には、URLの長さが2000文字を超えると、HTTP GETで問題が発生することがわかりました。その場合は、HTTP POSTを使用するか、URLを分割することをお勧めします。


2

すでに述べたように、HTTP自体は要求の長さにハードコーディングされた制限を課しません。ただし、ブラウザには、GETメソッドで許可されている2048文字までの制限があります。


-6

Chromeブラウザを使用してリクエストを取得する

はい。GETリクエストに制限はありません。

Chromeブラウザとcurlコマンドの両方を使用して、クエリ文字列の一部として最大4000文字を送信できます。

期待される200 OK応答を返したTomcat 8.xサーバーを使用しています。

これは、Google Chrome HTTPリクエストのスクリーンショットです(セキュリティ上の理由により、試したエンドポイントを非表示にしています)。

応答

Chromeブラウザを使用して取得する

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.