您可以传递给 Wininet 函数 HttpOpenRequest 的最大 URL 长度是多少?

Jas*_*son 3 url wininet

您可以传递给 Wininet 函数 HttpOpenRequest 的最大 URL 长度是多少?

Eug*_*ene 5

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)


Rob*_*ino 2

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