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 các tệp 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 giao diện thông qua Cửa hàng Chrome trực tuyến, hãy tham khảo bài viết Lưu trữ và cập nhật trên Cửa hàng trực tuyến.

Gói

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

Tải tệp .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, thì 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 phần "Trang thông tin 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 tệp xuống.

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

Tệp đã tải xuống có thể được lưu trữ trên một máy chủ cá nhân. Đây là cách an toàn nhất để lưu trữ tiện ích cục bộ 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à hành vi giả mạo 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 biểu tượng chrome://extensions/ trong thanh địa chỉ hoặc nhấp vào trình đơn Chrome, di chuyển con trỏ lê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 đó, hãy chọn nút PHẦN MỞ RỘNG GÓI.

Đánh dấu vào 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 ĐÓNG GÓI TIỆN ÍCH. Bỏ qua trường Khoá riêng tư cho gói lần đầu.

Chỉ định đường dẫn đến tiện ích rồi nhấp vào Đóng 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 mở rộng được đóng gói

Đừng làm mất khoá riêng tư! Hãy giữ tệp .pem ở một nơi bí mật và an toàn; bạn sẽ cần tệp này để 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 PACK EXTENSION (ĐÓNG GÓI TIỆN ÍCH). 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 mở rộng

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 mở rộng

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

Đóng gói 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í của thư mục 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ữ các 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 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 một trong hai điều kiện sau đây được đáp ứng:

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

Nguyên nhân phổ biến nhất khiến bạn không nhận ra 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 (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 URL, ứng dụng sẽ gửi một yêu cầu đến URL đó để tìm tệp kê khai cập nhật tệp XML.

  • Nội dung do một 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à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ư với phiên bản hiện đã 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ùng với các yêu cầu tệp kê khai cập nhật tự động và bỏ qua mọi tiêu đề Set-Cookie trong các phản hồi cho những yêu cầu đó.

URL cập nhật

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 có trường update_url trong tệp manifest.json.

{
  "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 do máy chủ trả về phải là một 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 lấy từ định dạng mà 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 bản cập nhật:

appid
Mã nhận dạng 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ã nhận dạng của tiện ích sẽ xuất hiện trên Trang quản lý tiện ích.
cơ sở mã
URL HTTPS của tệp .crx.
version
Do máy khách 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 kê khai bản cập nhật có thể chứa thông tin về nhiều tiện ích bằng cách thêm nhiều 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 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 kiểm tra tất cả cá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 công việc phía máy chủ trở nên dễ dàng như việc chỉ cần thả một tệp XML tĩnh vào bất kỳ máy chủ web đơn giản 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.

Những 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ã nhận dạng 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 các 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 được mã hoá URL theo định dạng:

id=EXTENSION_ID&v=EXTENSION_VERSION

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

  • Tiện ích 1
    • Mã nhận dạng: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    • 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 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 duy nhất cho mỗi URL cập nhật riêng biệt. Đối với ví dụ trước, nếu người dùng đã cài đặt cả hai tiện ích, thì hai yêu cầu 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 để URL yêu cầu GET quá dài (khoảng hơn 2000 ký tự), thì quy trình kiểm tra bản cập nhật sẽ đưa ra các yêu cầu GET bổ sung khi cần.

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

Khi có thêm nhiều API được thêm vào hệ thống tiện ích, một phiên bản mới của tiện ích chỉ hoạt động 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 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 một bản phát hành mới bất kỳ. Để đảm bảo rằng một bản cập nhật nhất định sẽ chỉ áp dụng cho các phiên bản Google Chrome bằng 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 sẽ đảm bảo rằng người dùng sẽ tự động cập nhật lên phiên bản 2 chỉ khi họ đang chạy Google Chrome 3.0.193.0 trở lên.