Wininet関数HttpOpenRequestに渡すことができる最大URL長はどれくらいですか?
3 に答える
WinInet.hにはいくつかの最大長定数があります。
...
//
// maximum field lengths (arbitrary)
//
#define INTERNET_MAX_HOST_NAME_LENGTH 256
#define INTERNET_MAX_USER_NAME_LENGTH 128
#define INTERNET_MAX_PASSWORD_LENGTH 128
#define INTERNET_MAX_PORT_NUMBER_LENGTH 5 // INTERNET_PORT is unsigned short
#define INTERNET_MAX_PORT_NUMBER_VALUE 65535 // maximum unsigned short value
#define INTERNET_MAX_PATH_LENGTH 2048
#define INTERNET_MAX_SCHEME_LENGTH 32 // longest protocol name length
#define INTERNET_MAX_URL_LENGTH (INTERNET_MAX_SCHEME_LENGTH \
+ sizeof("://") \
+ INTERNET_MAX_PATH_LENGTH)
...
HttpOpenRequestには最大長はありませんが、ターゲットとするサーバーソフトウェアにはURLの長さに制限がある可能性があります。
Apache(サーバー)
私の初期の試みでは、サーバーのURLの長さが約4,000文字に制限されたWebブラウザーで最大URLの長さを測定しようとしましたが、その後、Apacheは「413EntityTooLarge」エラーを生成しました。Red Hat Enterprise Linux 4にある最新のApacheビルドを使用しました。公式のApacheドキュメントには、リクエストの個々のフィールドに対する8,192バイトの制限のみが記載されています。
Microsoftインターネットインフォメーションサーバー(サーバー)
デフォルトの制限は16,384文字です(はい、MicrosoftのWebサーバーはMicrosoftのWebブラウザよりも長いURLを受け入れます)。これは構成可能です。
Perl HTTP ::デーモン(サーバー)
最大8,000バイトが機能します。PerlのHTTP::Daemonモジュールを使用してWebアプリケーションサーバーを構築する場合、すべてのHTTP要求ヘッダーの合計サイズに16,384バイトの制限が発生します。これには、POSTメソッドのフォームデータやファイルのアップロードなどは含まれませんが、URLは含まれます。実際には、URLが8,000文字よりも大幅に長い場合、これにより413エラーが発生しました。この制限は簡単に取り除くことができます。Daemon.pmで16x1024のすべての出現箇所を探し、それらをより大きな値に置き換えます。もちろん、これによりサービス拒否攻撃への露出が増加します。
(Boutell.comから)
2000文字未満をお勧めします。、しかし、このKB記事は、Internet Explorerには2083の制限があることを示唆しています。これは、あなたのケースにも当てはまる可能性があります。