Я не думаю, что вы сможете запросить удаленный сервер, чтобы получить его максимум.
Вероятно, вам лучше всего попробовать подход «проверь и посмотреть», когда вы начинаете с разумногозначение и переключаться на чанкинг, уменьшая его на некоторое соотношение каждый раз, когда вы получаете отклонение с 413.
Я бы предположил, что 8 МБ-10 МБ - хороший начальный размер для обычных интернет-серверов.Но в вашем конкретном приложении вы можете знать некоторые дополнительные ограничения относительно типа серверов, к которым оно подключается, и типичного размера данных, которые вы пытаетесь отправить, поэтому вы можете использовать большее значение по умолчанию.
Я не уверен, что рекомендовал бы это, но вот тупой скрипт, который отправляет кучу фиктивных запросов на бинарный поиск, максимальный размер 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 ... lol
$ 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