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 tệp crx qua 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 giao diện chỉ thông qua Cửa hàng Chrome trực tuyến, hãy tham khảo phần Cập nhật và lưu trữ cửa hàng trực tuyến.

Gói

Các 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 Trang tổng quan dành cho nhà phát triển Chrome, 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 cần tạo tệp crx trên máy hoặc tải xuống từ Cửa hàng Chrome 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 "Danh sách của bạn" rồi nhấp vào "Thông tin khác". Trong cửa sổ bật lên, hãy nhấp vào đường liên kết main.crx màu xanh dương để 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ữ một tiện ích trên máy vì nội dung của tiện ích sẽ được Cửa hàng Chrome trực tuyến ký. Điều này giúp phát hiện các cuộc tấn công và can thiệp tiềm ẩn.

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

Các thư mục tiện ích sẽ đượ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ỏ trên "Công cụ khác" rồi chọn "Tiện ích".

Trên trang Quản lý tiện ích, hãy 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ế độ 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 nhấp vào Gói tiện ích

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 PACK EXTENSION (Tiện ích mở rộng). Bỏ qua trường Khoá riêng tư đối với gói lần đầu.

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, chứa khoá riêng tư của tiện ích.

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

Đừng làm mất khoá riêng tư! Giữ tệp .pem ở một nơi an toàn và bí mật; bạn cần phải 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 MỞ RỘNG GÓI. Chỉ định đường dẫn đến thư mục tiện ích và vị trí của khoá riêng tư.

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

Trang này sẽ cung cấp đường dẫn cho tiện ích đóng gói đã 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 cờ --pack-extension để 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

Thành phần lưu trữ

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

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

  • Tệp này có loại nội dung application/x-chrome-extension
  • Hậu tố của tệp là .crxcả hai điều sau đều là đú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 thể nhận dạng một tệp có thể cài đặt là do 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 — loại nội dung không có trong danh sách trước. Để khắc phục vấn đề 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 URL, trình phân tích cú pháp sẽ đưa ra yêu cầu cho URL đó để tìm tệp XML tệp kê khai cập nhật.

  • Nội dung được quy trình kiểm tra bản cập nhật trả về là một tài liệu XML tệp kê khai cập nhật liệt kê phiên bản mới nhất của một 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, thì trình duyệt sẽ tải xuống và cài đặt phiên bản mới. Giống như các bản cập nhật thủ công, tệp .crx mới phải được ký bằng cùng một khoá riêng tư như phiên bản đã cài đặt hiện tại.

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à sẽ bỏ qua mọi tiêu đề Set-Cookie trong phản hồi cho các yêu cầu đó.

Cập nhật URL

Các tiện ích được lưu trữ trên các 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 các tiện ích đó.

{
  "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 vay mượn từ định dạng được Omaha, cơ sở hạ tầng cập nhật của Google sử dụng. 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 tệp kê khai cập nhật:

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 đóng gói. Mã của một tiện ích được hiển thị trên Trang quản lý tiện ích.
cơ sở mã
URL loại HTTPS đến tệp .crx.
version
Được ứng dụng sử dụng để xác định xem có nên tải tệp .crx do codebase chỉ định xuống hay không. Giá trị này phải khớp với giá trị của "version" 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 tiện ích bằng cách bao gồm nhiều phần tử <app>.

Kiểm thử

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 nút Cập nhật tiện ích ngay 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 quá trình kiểm tra tất cả tiện ích đã cài đặt.

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

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, chẳng hạn như chỉ cần thả tệp XML tĩnh vào bất kỳ máy chủ web thuần tuý nào (chẳng hạn như Apache) rồi cập nhật tệp XML đó khi các phiên bản tiện ích mới được phát hành.

Các 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. Các tham số này cho biết mã và phiên bản tiện ích trong yêu cầu cập nhật. Việc thê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ã phía máy chủ động thay vì tệp XML tĩnh.

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

?x=EXTENSION_DATA

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

id=EXTENSION_ID&v=EXTENSION_VERSION

Ví dụ: hai 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: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    • Phiên bản: "1.1"
  • Tiện ích 2
    • Mã nhận dạng: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
    • Phiên bản: "0.4"

Yêu cầu cập nhật từng phần mở rộng 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 phần mở rộng trong một yêu cầu cho mỗi URL cập nhật riêng biệt. Trong ví dụ trước, nếu người dùng đã cài đặt cả hai tiện ích, thì hai 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 đến mức URL yêu cầu GET quá dài (hơn 2.000 ký tự), thì quá trình kiểm tra bản cập nhật sẽ đưa ra các yêu cầu GET bổ sung 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 có nhiều API hơn được thêm vào hệ thống tiện ích, phiên bản cập nhật của tiện ích chỉ hoạt động với các phiên bản trình duyệt mới hơn có thể được phát hành. Mặc dù Google Chrome được tự động cập nhật, nhưng 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ản phát hành mới bất kỳ. Để đả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 tại hoặc cao hơn một phiên bản cụ thể, hãy thêm thuộc tính "prodversionmin" vào 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 đảm bảo rằng người dùng 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.