2013-08-13 4 views
3

Я работаю над проектом, который я намеревался сделать для себя академическим упражнением. В основном я пытаюсь добавить пользовательский тип сжатия между сервером IIS и веб-браузером, но погряз в аспектах браузера. В основном необходимо, чтобы иметь возможность изменять поток байтов на сервере до его отправки клиенту и на стороне браузера клиента, иметь возможность изменять полученный поток байтов ответа перед другим обычным разбором DOM и таким образом иметь место. На стороне сервера это оказалось довольно тривиально, но я не понимаю, как это сделать в Chrome или Firefox. Если у кого-то есть представление о хроме, пожалуйста, поделитесь, но сейчас я сосредоточусь на Firefox. Мое понимание заключается в том, что ранее Firefox имел довольно низкий уровень доступа к расширениям, но что они ужесточили ограничения, немного продвигаясь с их дополнительным sdk для Firefox. Я не хочу беспокоиться о том, чтобы изучить старые методы, если они будут удалены, поэтому кто-нибудь окончательно знает, может ли add-on sdk изменять поток байтов именно таким образом? Если да, есть ли у вас пример такого использования?Позволяет ли sdk расширения Firefox напрямую изменять поток байтов ответа HTTP?

(Я знаю, что мне нужно иметь компрессию переговоров с Accept-Encoding заголовок)

ответ

2

Я не хочу беспокоить обучения старые методы, если они запланированы, чтобы быть удалены

В настоящее время нет планов или в будущем удалить устаревшую надстройку. По крайней мере, это то, что люди SDK надстройки и сотрудники менеджера продлений неоднократно говорили мне.

На ваш вопрос: дополнительный SDK не предоставляет явный API для таких вещей, но вы всегда можете пойти еще более низкоуровневым, даже в SDK (через модуль chrome и/или window/utils) ,

Чтобы реализовать дополнительные методы сжатия, вам необходимо реализовать интерфейс nsIStreamConverter и правильно зарегистрировать свой компонент под контрактом @mozilla.org/streamconv;[email protected]?from=<yourcompression>&to=uncompressed. Затем Firefox должен иметь возможность декодировать yourcompression.

  • Для получения дополнительных сведений о том, как реализовать и зарегистрировать компоненты XPCOM в javascript или C++, см. https://developer.mozilla.org/.
  • Использование SDK или реализация вашего дополнительного перезапуска потребует, чтобы вы зарегистрировали компонент самостоятельно, вместо того чтобы полагаться на chrome.manifest. Есть еще несколько дополнений, которые уже делают это, например. Adblock Plus.
  • Компоненты Binary (C++) следует избегать, потому что вам, очевидно, нужно будет скомпилировать ваш компонент для каждой поддерживаемой платформы, и вам придется перекомпилировать его для каждой версии Gecko. Если вам нужно пойти в двоичном формате, компонент javascript-заглушки + js-ctypes может быть лучше.
  • См. Исходный код mozilla о том, как implement nsIStreamConverter в первую очередь.

Возможно, вам также потребуется изменить предпочтение network.http.accept-encoding, чтобы на самом деле можно было согласовать сжатие с сервером.