Ожидает ли multipart/x-mixed-replace клиентских запросов?
Я пытаюсь выяснить, возможно ли замедлить работу сервера при отправке ответов multipart/xmixed-replace. Я хочу, чтобы мой клиент пытался ограничить скорость потока в формате JPEG. Я нашел много документации о том, что сервер отправляет в ответе HTTP, но ничего о том, что отправляет клиент.
Что клиент отправляет, если что-нибудь, после каждой части в ответе multipart/x-mixed-replace? Если он ничего не отправляет, сервер просто продолжает копить части?
3 ответа
На самом деле, я думаю, что составная часть - это красная сельдь, потому что концепция составной части состоит в том, чтобы просто разграничить типы контента в одном и том же теле сообщения. Таким образом, с точки зрения сервера (с точки зрения скорости, с которой отправляется контент), он на самом деле не отличается от отправки одного большого куска данных.
Итак, мне интересно, если вы можете заголовок Range, чтобы запросить только определенный диапазон - по одной "части" за раз.
Начните считать байты с конца заголовков ответа. Когда вы дойдете до конца первой части, запишите количество прочитанных байтов и закройте соединение. Отправьте запрос на тот же документ, но укажите начальный диапазон в байтах в конце фрагмента. Снова, прочитайте ответ, когда вы достигнете конца части, добавите текущие байты ответа к предыдущему, закроете соединение и повторите ad nauseam...
Не пробовал, но похоже, что он будет работать при условии, что сервер поддерживает заголовки диапазона, и при условии, что вы сможете сделать некоторые исправления на стороне клиента.
Может быть проще написать клиентский прокси, который ограничивает скорость, отбрасывая пакеты...
Попробуйте использовать плагин LiveHTTPHeaders для Mozilla. Я пошел в Gmail (который использует AJAX) и следил за разговором между клиентом и сервером в течение нескольких минут. Кажется, это может помочь вам.
На уровне HTTP я не думаю, что клиент отправляет что-либо. Сервер предполагает, что до тех пор, пока соединение открыто, он может продолжать отправлять ответ.
Я не думаю, что существует простое решение проблемы на уровне HTTP, потому что в обмене клиент-сервер отсутствует концепция "подтверждения".
Очевидно, существуют решения этой проблемы на уровне TCP /IP.
Мне интересно, может ли клиент сделать что-то по-другому, когда он на самом деле получает заголовки ответа сервера и распознает, что ответ является многочастным - может ли он тогда прервать соединение и открыть новый, не поддерживающий жизнь, и просто получить части по одной...