我认为您无法通过查询远程服务器来直接获取它的最大值。
您最好的选择可能是尝试“检查并查看”方法,从一个合理的值开始,然后通过在每次被 413 拒绝时按一定比例减少它来切换到分块。
我猜 8mb-10mb 是一般互联网服务器的一个很好的起始大小。但是在您的特定应用程序中,您可能会知道一些额外的限制,即它要连接的服务器类型以及您尝试发送的数据的典型大小,因此您可以使用更大的默认值。
我不确定我是否会推荐它,但这是一个愚蠢的脚本,它向 google.com 的最大大小为 4096 字节的二进制搜索发送一堆虚拟请求。
var http = require('http');
var querystring = require('querystring');
function compute_size(domain) {
var max_size = 10240;
var min_size = 0;
function send_req(size) {
var post_data = '*'.repeat(size)
var post_options = {
host: domain,
port: '80',
path: '/',
method: 'POST',
headers: {
'Content-Length': size
}
};
var req = http.request(post_options, function(res) {
console.log('Try for size ' + size + ': ' + res.statusCode);
var fn;
if (res.statusCode == 413) {
max_size = size;
fn = Math.floor;
} else {
min_size = size;
fn = Math.ceil;
}
var next_size = fn((max_size - min_size)/2+min_size);
if (next_size == max_size || next_size == min_size) {
console.log('Found max: ', min_size);
} else {
send_req(next_size);
}
});
req.write(post_data);
req.end();
}
send_req(max_size);
}
compute_size('google.com');
这是 google.com 的输出,减去 4096 的最大值...哈哈
$ node post.js
Try for size 10240: 413
Try for size 5120: 413
Try for size 2560: 405
Try for size 3840: 405
Try for size 4480: 413
Try for size 4160: 413
Try for size 4000: 405
Try for size 4080: 405
Try for size 4120: 413
Try for size 4100: 413
Try for size 4090: 405
Try for size 4095: 405
Try for size 4098: 413
Try for size 4096: 405
Try for size 4097: 413
Found max: 4096