【发布时间】:2009-06-18 00:06:04
【问题描述】:
您可以传递给 Wininet 函数 HttpOpenRequest 的最大 URL 长度是多少?
【问题讨论】:
您可以传递给 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)
...
【讨论】:
HttpOpenRequest 没有最大长度,但您定位的服务器软件可能会对您的 URL 长度有限制。
Apache(服务器)
我早期尝试测量 Web 浏览器中的最大 URL 长度 遇到服务器 URL 长度限制 大约 4,000 个字符, 之后 Apache 生成一个“413 实体太大”错误。我使用了 找到当前最新的 Apache 构建 在 Red Hat Enterprise Linux 4 中。 仅官方 Apache 文档 提到一个 8,192 字节的限制 请求中的单个字段。
Microsoft Internet 信息服务器(服务器)
默认限制为 16,384 个字符 (是的,微软的网络服务器接受 URL 比 Microsoft 的 Web 更长 浏览器)。这是可配置的。
Perl HTTP::Daemon(服务器)
最多可以使用 8,000 个字节。那些 构建 Web 应用程序服务器 使用 Perl 的 HTTP::Daemon 模块将 遇到 16,384 字节的限制 所有 HTTP 请求的总大小 标题。这不包括 POST方法表单数据,文件上传, 等等,但它确实包含 URL。在 练习这会导致 413 错误 当 URL 明显更长时 超过 8,000 个字符。这个限制 可以很容易地删除。寻找所有 在 Daemon.pm 中出现 16x1024 并用更大的值替换它们。 当然,这确实增加了你的 遭受拒绝服务攻击。
(来自Boutell.com)
【讨论】:
I would suggest less than 2000 characters.,但这个KB article 表明 Internet Explorer 的限制为 2083,这也可能适用于您的情况。
【讨论】: