Máy tự lưu trữ cho Linux

Linux là nền tảng duy nhất mà người dùng Chrome có thể cài đặt các tiện ích được lưu trữ bên ngoài Cửa hàng Chrome trực tuyến. Bài viết này mô tả cách đóng gói, lưu trữ và cập nhật crx từ một máy chủ web đa năng. Nếu bạn chỉ phân phối một tiện ích hoặc chủ đề thông qua Cửa hàng Chrome trực tuyến, hãy tham khảo dịch vụ Lưu trữ cửa hàng trực tuyến và đang cập nhật.

Gói

Tiện ích và giao diện được phân phát dưới dạng tệp .crx. Khi tải lên thông qua Nhà phát triển Chrome Trang tổng quan, trang tổng quan sẽ tự động tạo tệp crx. Nếu được xuất bản trên máy chủ cá nhân, bạn sẽ cần tạo tệp crx trên máy hoặc tải xuống từ Chrome Cửa hàng trực tuyến.

Tải .crx xuống từ Cửa hàng Chrome trực tuyến

Nếu một tiện ích được lưu trữ trên Cửa hàng Chrome trực tuyến, bạn có thể tải tệp .crx xuống từ Trang tổng quan dành cho nhà phát triển. Tìm tiện ích trong "Trang thông tin của bạn" rồi nhấp vào "Thông tin khác". Trong trong cửa sổ bật lên, hãy nhấp vào đường liên kết màu xanh dương main.crx để tải xuống.

Tải .crx xuống từ Trang tổng quan dành cho nhà phát triển

Bạn có thể lưu trữ tệp đã tải xuống trên máy chủ cá nhân. Đây là cách an toàn nhất để lưu trữ cục bộ vì nội dung của tiện ích sẽ được Cửa hàng Chrome trực tuyến ký. Chiến dịch này giúp phát hiện các cuộc tấn công và hành vi can thiệp tiềm ẩn.

Tạo tệp .crx cục bộ

Các thư mục tiện ích được chuyển đổi thành tệp .crx tại Trang quản lý tiện ích. Chuyển đến chrome://extensions/ trong thanh địa chỉ hoặc nhấp vào trình đơn Chrome, giữ con trỏ phía trên "Công cụ khác" sau đó chọn "Tiện ích mở rộng".

Trên trang quản lý tiện ích, bật Chế độ nhà phát triển bằng cách nhấp vào nút bật/tắt bên cạnh Chế độ dành cho nhà phát triển. Sau đó, chọn nút MỞ RỘNG GÓI.

Chọn Chế độ nhà phát triển rồi chọn Tiện ích gói nhấp chuột

Chỉ định đường dẫn đến thư mục của tiện ích trong trường Thư mục gốc của tiện ích, sau đó nhấp vào Nút MỞ RỘNG GÓI. Bỏ qua trường Khoá riêng tư đối với gói cài đặt lần đầu tiên.

Chỉ định đường dẫn tiện ích rồi nhấp vào gói tiện ích

Chrome sẽ tạo hai tệp, một tệp .crx và một tệp .pem, trong đó có khoá riêng tư.

Tệp tiện ích được đóng gói

Đừng để mất khoá riêng tư! Lưu tệp .pem ở một nơi bí mật và an toàn; sẽ là bạn cần cập nhật tiện ích đó.

Cập nhật gói .crx

Cập nhật tệp .crx của một tiện ích bằng cách tăng số phiên bản trong manifest.json.

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

Quay lại trang Quản lý tiện ích rồi nhấp vào nút Tiện ích mở rộng gói. Chỉ định đường dẫn đến thư mục tiện ích và vị trí của khoá cá nhân.

Cập nhật tệp tiện ích

Trang sẽ cung cấp đường dẫn cho tiện ích đóng gói được cập nhật.

Cập nhật tệp tiện ích

Đóng gói thông qua dòng lệnh

Đóng gói các tiện ích trong dòng lệnh bằng cách gọi chrome.exe. Sử dụng --pack-extension gắn cờ để chỉ định vị trí thư mục của tiện ích và cờ --pack-extension-key để chỉ định vị trí của tệp khoá riêng tư của tiện ích.

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

Máy chủ

Máy chủ lưu trữ tệp .crx phải sử dụng tiêu đề HTTP thích hợp để cho phép người dùng cài đặt bằng cách nhấp vào liên kết.

Google Chrome coi tệp là có thể cài đặt nếu một trong các điều kiện sau xảy ra:

  • Tệp này có loại nội dung là application/x-chrome-extension
  • Hậu tố tệp là .crxcả hai điều sau đều đúng:
    • Tệp không được phân phát với tiêu đề HTTP X-Content-Type-Options: nosniff
    • Tệp được phân phát với một trong các loại nội dung sau:
    • chuỗi trống
    • "text/plain"
    • "application/octet-stream"
    • "unknown/unknown"
    • "application/unknown"
    • "\*/\*"

Lý do phổ biến nhất khiến không nhận ra tệp có thể cài đặt là máy chủ gửi tiêu đề X-Content-Type-Options: nosniff. Lý do phổ biến thứ hai là máy chủ gửi một loại nội dung không xác định—một nội dung không có trong danh sách trước đó. Để khắc phục vấn đề về tiêu đề HTTP, hãy thay đổi cấu hình của máy chủ hoặc thử lưu trữ tệp .crx tại một máy chủ khác.

Cập nhật

Cứ vài giờ một lần, trình duyệt sẽ kiểm tra các tiện ích đã cài đặt để tìm URL cập nhật. Đối với mỗi yếu tố, điều này tạo ra một yêu cầu URL đó đang tìm tệp XML của tệp kê khai cập nhật.

  • Nội dung mà quá trình kiểm tra bản cập nhật trả về là tài liệu XML tệp kê khai cập nhật liệt kê phiên bản của tiện ích.

Nếu tệp kê khai cập nhật đề cập đến một phiên bản mới hơn phiên bản được cài đặt, trình duyệt tải xuống và cài đặt phiên bản mới. Giống như với các bản cập nhật thủ công, bạn phải ký tệp .crx mới có cùng khoá riêng tư với phiên bản hiện được cài đặt.

Lưu ý: Để duy trì quyền riêng tư của người dùng, Google Chrome không gửi bất kỳ tiêu đề Cookie nào có yêu cầu tệp kê khai tự động cập nhật và bỏ qua mọi tiêu đề Set-Cookie trong các phản hồi cho các yêu cầu đó.

Cập nhật URL

Những tiện ích được lưu trữ trên máy chủ bên ngoài Cửa hàng Chrome trực tuyến phải bao gồm trường update_url trong tệp manifest.json của họ.

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

Cập nhật tệp kê khai

Tệp kê khai cập nhật được máy chủ trả về phải là tài liệu 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>

Định dạng XML này được mượn từ định dạng mà Omaha – cơ sở hạ tầng cập nhật của Google đang sử dụng. Chiến lược phát hành đĩa đơn hệ thống tiện ích sử dụng các thuộc tính sau cho các phần tử <app><updatecheck> của cập nhật tệp kê khai:

appid
Mã tiện ích được tạo dựa trên hàm băm của khoá công khai, như mô tả trong phần gói. Mã của tiện ích sẽ xuất hiện trên Trang quản lý tiện ích.
cơ sở mã
URL loại HTTPS dẫn đến tệp .crx.
version
Ứng dụng dùng để xác định xem có nên tải tệp .crx do codebase chỉ định xuống hay không. Phiên bản này phải khớp với giá trị của "phiên bản" trong tệp manifest.json của tệp .crx.

Tệp XML của tệp kê khai cập nhật có thể chứa thông tin về nhiều phần mở rộng bằng cách đưa vào Phần tử <app>.

Thử nghiệm

Tần suất kiểm tra bản cập nhật mặc định là vài giờ, nhưng bạn có thể buộc cập nhật bằng cách sử dụng cửa sổ Cập nhật các tiện ích ngay bây giờ trên Trang quản lý tiện ích.

Cập nhật tiện ích ngay

Thao tác này sẽ bắt đầu kiểm tra tất cả tiện ích đã cài đặt.

Cách sử dụng nâng cao: yêu cầu tham số

Cơ chế tự động cập nhật cơ bản được thiết kế để giúp phía máy chủ hoạt động dễ dàng như chỉ thả tệp XML tĩnh lên bất kỳ máy chủ web thuần tuý nào, chẳng hạn như Apache và cập nhật tệp XML đó dưới dạng tệp mới các phiên bản tiện ích được phát hành.

Nhà phát triển lưu trữ nhiều tiện ích có thể kiểm tra các tham số yêu cầu, cho biết mã tiện ích và phiên bản trong yêu cầu cập nhật. Việc bao gồm các tham số này cho phép tiện ích cập nhật từ cùng một URL chạy mã động phía máy chủ thay vì tệp XML tĩnh.

Định dạng của các thông số yêu cầu là:

?x=EXTENSION_DATA

Trong đó EXTENSION_DATA là một chuỗi được mã hoá URL có định dạng:

id=EXTENSION_ID&v=EXTENSION_VERSION

Ví dụ: 2 tiện ích trỏ đến cùng một URL cập nhật (https://test.com/extension_updates.php):

  • Tiện ích 1
    • Mã nhận dạng: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
    • Phiên bản: "1.1"
  • Tiện ích 2
    • Mã nhận dạng: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
    • Phiên bản: "0.4"

Yêu cầu cập nhật từng tiện ích riêng lẻ sẽ là,

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

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

Bạn có thể liệt kê nhiều tiện ích trong một yêu cầu cho mỗi URL cập nhật riêng biệt. Cho trước đây ví dụ: nếu người dùng đã cài đặt cả hai tiện ích, thì 2 yêu cầu này sẽ được hợp nhất thành một yêu cầu duy nhất:

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

Nếu số lượng tiện ích đã cài đặt sử dụng cùng một URL cập nhật đủ lớn để đáp ứng một yêu cầu GET URL quá dài (trên 2.000 ký tự) nên quá trình kiểm tra bản cập nhật sẽ đưa ra các yêu cầu GET bổ sung dưới dạng nếu cần.

Cách sử dụng nâng cao: phiên bản trình duyệt tối thiểu

Khi thêm nhiều API hơn vào hệ thống tiện ích, phiên bản tiện ích được cập nhật sẽ hoạt động chỉ với các phiên bản mới hơn của trình duyệt có thể được phát hành. Mặc dù Google Chrome vẫn được tự động cập nhật, có thể mất vài ngày trước khi phần lớn cơ sở người dùng cập nhật lên bất kỳ bản phát hành mới nào. Người nhận đảm bảo rằng một bản cập nhật cụ thể sẽ chỉ áp dụng cho các phiên bản Google Chrome ở mức hoặc cao hơn phiên bản, hãy thêm "prodversionmin" cho phần tử <app> trong phản hồi cập nhật.

<?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>

Điều này sẽ đảm bảo rằng người dùng sẽ chỉ tự động cập nhật lên phiên bản 2 khi họ đang chạy Google Chrome 3.0.193.0 trở lên.