HTTPのURL長制限(データ収集)、URLの長さ
HTTPのURL長制限
まず第一に、実際には、http 1.1 プロトコルでは URL の長さに制限はありません。 契約の原文:
HTTP プロトコルは、URI の長さに事前制限を設けません。サーバーは、サービスを提供するリソースの URI を処理できなければなりません (MUST)。また、GET ベースのフォームを提供する場合は、無制限の長さの URI を処理できる必要があります (SHOULD)。そのような URI を生成する可能性がある URI がサーバーで処理できるよりも長い場合、サーバーは 414 (Request-URI Too Long) ステータスを返す必要があります (セクション 10.4.15 を参照)。
リーリー
翻訳:
HTTP プロトコルは、 URI の長さに事前の制限を課していません。サーバーは、提供されるリソースの URI を処理できなければならず、この無効な長さの URI も処理できる必要があります。 GET メソッドに基づいてリクエストを行うと、URI がクライアントに生成されたものとして表示される場合があります。サーバーが長すぎる URI を処理できない場合、サーバーは 414 ステータス コードを返す必要があります (このステータス コードは Request-URI が長すぎることを意味します)。
注
: 255 バイトを超える URI に依存する場合、一部の古いクライアントまたはプロキシ実装ではこれらの長さをサポートしていない可能性があるため、サーバーは注意する必要があります。
詳細については、契約書の 3.2.1 を参照してください
プロトコルでは URL の長さを明示的に制限していませんが、実際の実装では、URL の長さは依然として制限されています。1 つはサーバー側の制限で、もう 1 つはブラウザー側の制限です。
1. サーバー側
サーバー側、主にApache、jboss、nginxなど、ネットで調べた調整方法は以下の通りです: httpリクエストURL長とリクエストメッセージ本文長の調査(1)(サーバー側)
1.1nginx
現在プロジェクトでは nginx が主に使用されているため、その設定パラメーターを強調したいと思います:large_client_header_buffers
このパラメータは、クライアントが要求したヘッダー情報を受け入れるときに nginx サーバーによって割り当てられる最大バッファのサイズを制限します。つまり、nginx サーバーがクライアントのリクエストを一度に受け取ることができるヘッダー情報の最大サイズを制限します。 。このヘッダにはリクエストラインだけでなく、一般情報ヘッダ、リクエストヘッダフィールド、レスポンスヘッダフィールドの合計長も含まれます。これにより、URL の長さも大幅に制限されます。
nginx サーバーのデフォルトの制限は 4K または 8K で、これはサーバーのハードウェア構成に関連しており、現在、ほとんどのメモリは 4K、つまり 4096 バイトです。
2. ブラウザ側
ブラウザには多くの種類があり、URL の長さの制限は次のように異なります。
ブラウザ
最大長(文字数) |
備考 |
|
Internet Explorer
2083 |
この数を超えると送信ボタンは反応しなくなります |
|
Firefox
65,536 |
|
|
クロム
8182 |
|
|
サファリ
80,000 |
|
|
オペラ
190,000 |
|
|
curl (Linux でのコマンド)
8167 |
|
|
これらのデータは主にオンラインデータ検索を通じて取得されており、著者は個人的にそれを検証していません。しかし、開発を行う際には制限があることは議論の余地のない事実です。
私が最初に考えたのは、HTTP 1.1 プロトコルをチェックして制限があるかどうかを確認することでした (このプロトコルは本当に臭くて長いです...)。このプロトコルが URL に長さの制限を課していないことが判明したことには驚きました。原文は以下の通りです
" HTTP プロトコルは、URI の長さに先験的な制限を設けません。サーバーは、提供するリソースの URI を処理できなければなりません (MUST)。また、GET を提供する場合は、無制限の長さの URI を処理できる必要があります (SHOULD)。そのような URI を生成する可能性のあるベースのフォームは、URI がサーバーが処理できる長さよりも長い場合、サーバーは 414 (Request-URI Too Long) ステータスを返す必要があります (セクション 10.4.15 を参照)。
注: 一部の古いクライアントまたはプロキシ 実装では、これらの長さを適切にサポートしていない可能性があるため、サーバーは 255 バイトを超える URI の長さ に依存することに注意する必要があります。
HTTP プロトコルは、URI の長さに事前の制限を課しません。サーバーは、提供するリソースの URI を処理できなければならず、この無効な長さの URL を処理できる必要があります。長さは、GET モードでリクエストするときに生成される
に基づいてクライアントに表示される場合があります。サーバーが長すぎる URI を処理できない場合、サーバーは 414 ステータス コードを返す必要があります (このステータス コードは Request-URI が長すぎることを意味します)。
注 : 255 バイトを超える URI に依存する場合、一部の古いクライアントまたはプロキシ実装ではこれらの長さをサポートしていない可能性があるため、サーバーは注意する必要があります。
そのため、http 標準プロトコルの観点からは、
url の長さを制御することはできません。ヘッダーの長さに制限があるかどうかについては、プロトコルについてさらに検討する必要があります。 url と header の長さの制限は、主にサーバーとクライアントの制限に依存します。
次にサーバー側から始めます:
私は主に apache と nginx について調べました
他のものについてはよく知りません。
Apache の公式ドキュメントでそのような設定オプション LimitRequestLine を見つけました
(http://httpd.apache.org/docs/2.0/mod/core.html#limitrequestline)
定義によれば、このオプションは URL の長さもヘッダーの長さも制限しませんが、http リクエストのリクエストラインの長さを制限します (関連定義: http://www.w3.org/Protocols) /rfc2616/rfc2616-sec5.html#sec5.1)。
つまり: リクエストライン = メソッド SP リクエスト URI SP HTTP バージョン CRLF の長さ。
ただし、GET リクエストと HEAD リクエストはメッセージ エンティティ (メッセージ本文) をサーバーに送信しないため、これにより GET リクエストと HEAD リクエストのパラメータ長が大幅に制限されます。この制限は、URL の長さが設定値を超えないように制限していると言えます。これを超えると、サーバーはエラー ステータス コード 414 (Request-URI Too Large) を返します。
それでは、メッセージ本文全体について、Apache サーバーに制限はありますか?
次に、他の関連パラメータを調べてみると、確かに次のパラメータがありました: LimitRequestBody
(http://httpd.apache.org/docs/2.0/mod/core.html#limitrequestbody)
このパラメータは、http リクエストで受け入れられる最大メッセージ サイズを制限します。デフォルトは無制限ですが、実際にはこの無制限にも制限があり、最大値は 2G を超えることはできません。
これらは、http リクエストにおける Apache サーバーのいくつかの制限です
nginxサーバーの場合も同様のパラメータがあります
large_client_header_buffers
このパラメーターは、nginx サーバーがクライアントから要求されたヘッダー情報を受け入れるときに割り当てられる最大バッファーのサイズ、つまり、nginx サーバーがクライアントのリクエストを一度に受け取ることができる情報の最大サイズを制限します。このヘッダにはリクエストラインだけでなく、一般情報ヘッダ、リクエストヘッダフィールド、レスポンスヘッダフィールドの合計長も含まれます。これにより、URL の長さも大幅に制限されます。
nginx サーバーのデフォルトの制限は 4K または 8K で、これはサーバーのハードウェア構成に関連しており、現在、ほとんどの場合は 4K、つまり 4096 バイトです。
client_header_buffer_size
(
http://wiki.nginx.org/HttpCoreModule#client_header_buffer_size)
このパラメータは、クライアントから送信される http ヘッダー情報のサイズを制限します。この値と、large_client_header_buffers は、http リクエスト ヘッダーのサイズも制限します。いずれかの値を超えると、サーバーはエラー ステータス コード 414 (リクエスト) を返します。 -URI が大きすぎます)。
このパラメータのデフォルト値は1Kです
client_max_body_size
このパラメータは、クライアントから送信される http リクエストのメッセージ エンティティ サイズを制限します。この値を超えると、サーバーはエラー ステータス コード 413 (リクエスト エンティティが大きすぎます) を返します。このパラメータのデフォルト値は 1MB で、これは投稿を通じて送信されるコンテンツの最大制限を制限することと同等です
上記は、http リクエスト URL の長さとリクエスト メッセージ本文の長さに関するサーバー側の制限です。これらは公式ドキュメントに基づいてのみ得られた結果であり、実際にはテストされていません。
http://www.bkjia.com/PHPjc/973824.htmlwww.bkjia.com本当http://www.bkjia.com/PHPjc/973824.html技術記事 HTTP における URL の長さの制限 (データ編集)、URL の長さ HTTP における URL の長さの制限 まず第一に、実際には、プロトコルの原文である http 1.1 プロトコルでは、URL の長さは制限されていません。