您可以传递给 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 长度有限制。
阿帕奇(服务器)
我早期尝试在 Web 浏览器中测量最大 URL 长度时遇到了大约 4,000 个字符的服务器 URL 长度限制,之后 Apache 产生“413 Entity Too Large”错误。我使用了 Red Hat Enterprise Linux 4 中最新的 Apache 版本。官方的 Apache 文档只提到了请求中单个字段的 8,192 字节限制。
Microsoft Internet 信息服务器(服务器)
默认限制为 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 个字符。,但是这篇知识库文章建议 Internet Explorer 的限制为 2083,这也可能适用于您的情况。