Самостоятельный хостинг для Linux

Linux — единственная платформа, на которой пользователи Chrome могут устанавливать расширения, размещенные за пределами Интернет-магазина Chrome . В этой статье описывается, как упаковывать, размещать и обновлять файлы crx с веб-сервера общего назначения. Если вы распространяете расширение или тему исключительно через Интернет-магазин Chrome , проконсультируйтесь по вопросам хостинга и обновления в Интернет-магазине .

Упаковка

Расширения и темы предоставляются в виде файлов .crx . При загрузке через панель управления разработчика Chrome она автоматически создает файл crx . Если файл crx опубликован на личном сервере, его необходимо будет создать локально или загрузить из Интернет-магазина Chrome.

Загрузите .crx из Интернет-магазина Chrome.

Если расширение размещено в Интернет-магазине Chrome, файл .crx можно загрузить с панели управления разработчика. Найдите расширение в разделе «Ваши объявления» и нажмите «Подробнее». Во всплывающем окне щелкните синюю ссылку main.crx , чтобы загрузить его.

Загрузите .crx с панели разработчика.

Загруженный файл может быть размещен на личном сервере. Это наиболее безопасный способ локального размещения расширения, поскольку содержимое расширения будет подписано Интернет-магазином Chrome. Это помогает обнаружить потенциальные атаки и несанкционированный доступ.

Создать .crx локально

Каталоги расширений преобразуются в файлы .crx на странице управления расширениями. Перейдите по chrome://extensions/ в омнибоксе или откройте меню Chrome, наведите указатель на «Дополнительные инструменты», затем выберите «Расширения».

На странице управления расширениями включите режим разработчика, щелкнув тумблер рядом с режимом разработчика . Затем выберите кнопку РАСШИРЕНИЕ ПАКЕТА .

Режим разработчика установлен, затем нажмите «Расширение пакета».

Укажите путь к папке расширения в поле Корневой каталог расширения, затем нажмите кнопку УПАКОВАТЬ РАСШИРЕНИЕ . Игнорируйте поле «Частный ключ» для первого пакета.

Укажите путь расширения, затем нажмите «Упаковать расширение».

Chrome создаст два файла: файл .crx и файл .pem , содержащий закрытый ключ расширения.

Упакованные файлы расширений

Не потеряйте приватный ключ! Храните файл .pem в секретном и безопасном месте; это будет необходимо для обновления расширения.

Обновление пакета .crx

Обновите файл .crx расширения, увеличив номер версии в manifest.json .

{
  ...
  "version": "1.5",
  ...
  }
}
{
  ...
  "version": "1.6",
  ...
  }
}

Вернитесь на страницу управления расширениями и нажмите кнопку УПАКОВАТЬ РАСШИРЕНИЕ . Укажите путь к каталогу расширений и расположение закрытого ключа.

Обновление файлов расширения

На странице будет указан путь к обновленному упакованному расширению.

Обновление файлов расширения

Пакет через командную строку

Упакуйте расширения в командной строке, вызвав chrome.exe . Используйте флаг --pack-extension , чтобы указать расположение папки расширения, и флаг --pack-extension-key чтобы указать расположение файла закрытого ключа расширения.

chrome.exe --pack-extension=C:\myext --pack-extension-key=C:\myext.pem

Хозяин

Сервер, на котором размещены файлы .crx , должен использовать соответствующие заголовки HTTP, чтобы пользователи могли установить расширение, щелкнув ссылку.

Google Chrome считает файл пригодным для установки, если выполняется одно из следующих условий:

  • Файл имеет тип содержимого application/x-chrome-extension
  • Суффикс файла — .crx , и оба следующих условия верны:
    • Файл не обслуживается с HTTP-заголовком X-Content-Type-Options: nosniff
    • Файл обслуживается с одним из следующих типов контента:
    • пустая строка
    • "text/plain"
    • "application/octet-stream"
    • "unknown/unknown"
    • "application/unknown"
    • "\*/\*"

Наиболее распространенной причиной невозможности распознавания устанавливаемого файла является то, что сервер отправляет заголовок X-Content-Type-Options: nosniff . Вторая наиболее распространенная причина заключается в том, что сервер отправляет неизвестный тип контента, которого нет в предыдущем списке. Чтобы устранить проблему с заголовком HTTP, измените конфигурацию сервера или попробуйте разместить файл .crx на другом сервере.

Обновлять

Каждые несколько часов браузер проверяет установленные расширения на наличие URL-адреса обновления. Для каждого из них он отправляет запрос на этот URL-адрес в поисках XML-файла манифеста обновления.

  • Содержимое, возвращаемое проверкой обновлений, представляет собой XML-документ манифеста обновления , в котором указана последняя версия расширения.

Если в манифесте обновления упоминается более поздняя версия, чем установленная, браузер загружает и устанавливает новую версию. Как и при обновлении вручную, новый файл .crx должен быть подписан тем же закрытым ключом, что и текущая установленная версия.

Примечание. В целях обеспечения конфиденциальности пользователей Google Chrome не отправляет заголовки файлов cookie с запросами манифеста автоматического обновления и игнорирует любые заголовки Set-Cookie в ответах на эти запросы.

Обновить URL

Расширения, размещенные на серверах за пределами Интернет-магазина Chrome, должны включать поле update_url в файл manifest.json .

{
  "name": "My extension",
  ...
  "update_url": "https://myhost.com/mytestextension/updates.xml",
  ...
}

Обновить манифест

Манифест обновления, возвращаемый сервером, должен быть XML-документом.

<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
  <app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
    <updatecheck codebase='https://myhost.com/mytestextension/mte_v2.crx' version='2.0' />
  </app>
</gupdate>

Этот формат XML заимствован из формата, используемого Omaha — инфраструктурой обновлений Google. Система расширений использует следующие атрибуты для элементов <app> и <updatecheck> манифеста обновления:

аппид
Идентификатор расширения генерируется на основе хеша открытого ключа, как описано в разделе «Упаковка» . Идентификатор расширения отображается на странице управления расширениями.
кодовая база
URL-адрес HTTPS для файла .crx .
версия
Используется клиентом, чтобы определить, следует ли загружать файл .crx , указанный в codebase . Оно должно соответствовать значению «версия» в файле manifest.json файла .crx .

XML-файл манифеста обновления может содержать информацию о нескольких расширениях, включая несколько элементов <app> .

Тестирование

Частота проверки обновлений по умолчанию составляет несколько часов, но обновление можно принудительно установить с помощью кнопки «Обновить расширения сейчас» на странице управления расширениями.

Обновить расширения сейчас

Это запустит проверку всех установленных расширений.

Расширенное использование: параметры запроса

Базовый механизм автоматического обновления предназначен для того, чтобы сделать работу на стороне сервера такой же простой, как просто перетаскивание статического XML-файла на любой обычный веб-сервер, например Apache, и обновление этого XML-файла по мере выпуска новых версий расширений.

Разработчики, размещающие несколько расширений, могут проверять параметры запроса, которые указывают идентификатор и версию расширения в запросе на обновление. Включение этих параметров позволяет расширениям обновляться с одного и того же URL-адреса, используя динамический серверный код вместо статического XML-файла.

Формат параметров запроса:

?x=EXTENSION_DATA

Где EXTENSION_DATA — это строка в формате URL-адреса:

id=EXTENSION_ID&v=EXTENSION_VERSION

Например, два расширения указывают на один и тот же URL-адрес обновления ( https://test.com/extension_updates.php ):

  • Расширение 1
    • ID: "ааааааааааааааааааааааа"
    • Версия: "1.1"
  • Расширение 2
    • ID: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
    • Версия: «0.4»

Запрос на обновление каждого отдельного расширения будет таким:

https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1

и

https://test.com/extension_updates.php?x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4

Несколько расширений могут быть перечислены в одном запросе для каждого уникального URL-адреса обновления. В предыдущем примере, если у пользователя установлены оба расширения, два запроса объединяются в один:

https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1&x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4

Если количество установленных расширений, использующих один и тот же URL-адрес обновления, настолько велико, что URL-адрес запроса GET слишком длинный (более 2000 символов или около того), при проверке обновлений при необходимости выдаются дополнительные запросы GET.

Расширенное использование: минимальная версия браузера

По мере добавления новых API в систему расширений может быть выпущена обновленная версия расширения, которая будет работать только с более новыми версиями браузера. Хотя сам Google Chrome обновляется автоматически, может пройти несколько дней, прежде чем большая часть пользовательской базы обновится до любой новой версии. Чтобы гарантировать, что данное обновление будет применяться только к версиям Google Chrome определенной версии или выше, добавьте атрибут prodversionmin к элементу <app> в ответе на обновление.

<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
  <app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
    <updatecheck codebase='http://myhost.com/mytestextension/mte_v2.crx' version='2.0' prodversionmin='3.0.193.0'/>
  </app>
</gupdate>

Это гарантирует, что пользователи будут автоматически обновляться до версии 2, только если они используют Google Chrome 3.0.193.0 или более поздней версии.