您可以传递给 Wininet 函数 HttpOpenRequest 的最大 URL 长度是多少?
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)
...
Run Code Online (Sandbox Code Playgroud)
HttpOpenRequest 没有最大长度,但您的目标服务器软件可能会对您的 URL 长度有限制。
阿帕奇(服务器)
我早期尝试测量 Web 浏览器中的最大 URL 长度,但遇到了大约 4,000 个字符的服务器 URL 长度限制,之后 Apache 生成了“413 Entity Too Large”错误。我使用了 Red Hat Enterprise Linux 4 中最新的 Apache 版本。Apache 官方文档仅提到请求中单个字段的 8,192 字节限制。
微软互联网信息服务器(服务器)
默认限制为 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)