SXG là một cơ chế phân phối giúp xác thực nguồn gốc của tài nguyên một cách độc lập với cách phân phối tài nguyên đó.
Trao đổi có chữ ký (SXG) là một cơ chế phân phối giúp xác thực nguồn gốc của tài nguyên một cách độc lập với cách phân phối tài nguyên đó. Việc triển khai SXG có thể cải thiện chỉ số Nội dung lớn nhất hiển thị (LCP) bằng cách cho phép tìm nạp trước trên nhiều nguồn gốc mà vẫn bảo đảm quyền riêng tư. Ngoài ra, việc tách rời này còn giúp cải thiện nhiều trường hợp sử dụng, chẳng hạn như trải nghiệm Internet khi không có mạng và phân phát từ bộ nhớ đệm của bên thứ ba.
Bài viết này cung cấp thông tin tổng quan toàn diện về SXG: cách hoạt động, trường hợp sử dụng và công cụ.
Khả năng tương thích với trình duyệt
SXG được hỗ trợ bởi các trình duyệt dựa trên Chromium (bắt đầu từ các phiên bản: Chrome 73, Edge 79 và Opera 64).
Tổng quan
Trong trường hợp sử dụng chính, SXG dùng bộ nhớ đệm để tìm nạp trước và phân phát nội dung đã được nguồn gốc ký mã hoá. Điều này giúp tăng tốc độ điều hướng trên nhiều nguồn gốc từ các trang web referer, đồng thời đảm bảo rằng các trang không bị thay đổi và được phân bổ đúng cách cho nguồn gốc của chúng. Mọi thông tin nhận dạng tiềm ẩn đều bị ẩn cho đến khi người dùng chuyển đến một trang web, nhờ đó bảo vệ quyền riêng tư của người dùng. Google Tìm kiếm là một trong những người sử dụng sớm tính năng tìm nạp trước SXG. Đối với những trang web nhận được phần lớn lưu lượng truy cập từ Google Tìm kiếm, SXG có thể là một công cụ quan trọng giúp người dùng tải trang nhanh hơn. Theo thời gian, chúng tôi hy vọng tác động này sẽ mở rộng sang các trang web giới thiệu khác.
Cách hoạt động
Một trang web ký một cặp yêu cầu/phản hồi ("trao đổi HTTP") theo cách cho phép trình duyệt xác minh nguồn gốc và tính toàn vẹn của nội dung một cách độc lập với cách phân phối nội dung. Do đó, trình duyệt có thể hiển thị URL của trang web gốc trong thanh địa chỉ, thay vì URL của máy chủ đã phân phối nội dung.

Trước đây, cách duy nhất để một trang web sử dụng bên thứ ba phân phối nội dung trong khi vẫn duy trì thông tin ghi nhận tác giả là trang web đó phải chia sẻ chứng chỉ SSL với nhà phân phối. Cách này có một số nhược điểm về bảo mật; hơn nữa, cách này còn lâu mới giúp nội dung thực sự có thể di chuyển được.
Định dạng SXG
SXG được đóng gói trong một tệp được mã hoá nhị phân có hai thành phần chính: một giao dịch trao đổi HTTP và một chữ ký bao gồm giao dịch trao đổi đó. Quá trình trao đổi HTTP bao gồm URL yêu cầu, thông tin thương lượng nội dung và phản hồi HTTP.
format version: 1b3
request:
method: GET
uri: https://example.org/
headers:
response:
status: 200
headers:
Cache-Control: max-age=604800
Digest: mi-sha256-03=kcwVP6aOwYmA/j9JbUU0GbuiZdnjaBVB/1ag6miNUMY=
Expires: Mon, 24 Aug 2020 16:08:24 GMT
Content-Type: text/html; charset=UTF-8
Content-Encoding: mi-sha256-03
Date: Mon, 17 Aug 2020 16:08:24 GMT
Vary: Accept-Encoding
signature:
label;cert-sha256=<em>ViFgi0WfQ+NotPJf8PBo2T5dEuZ13NdZefPybXq/HhE=</em>;
cert-url="https://test.web.app/ViFgi0WfQ-NotPJf8PBo2T5dEuZ13NdZefPybXq_HhE";
date=1597680503;expires=1598285303;integrity="digest/mi-sha256-03";sig=<em>MEUCIQD5VqojZ1ujXXQaBt1CPKgJxuJTvFlIGLgkyNkC6d7LdAIgQUQ8lC4eaoxBjcVNKLrbS9kRMoCHKG67MweqNXy6wJg=</em>;
validity-url="https://example.org/webpkg/validity"
header integrity: sha256-Gl9bFHnNvHppKsv+bFEZwlYbbJ4vyf4MnaMMvTitTGQ=</p>
<p>The exchange has a valid signature.
payload [1256 bytes]:</p>
<pre class="prettyprint"><code><title>SXG example</title>
<meta charset="utf-8">
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<style type="text/css">
body {
background-color: #f0f0f2;
margin: 0;
padding: 0;
}
</style>
</code></pre>
<div>
<h1>Hello</h1>
</div>
<p>Tham số expires trong chữ ký cho biết ngày hết hạn của SXG. SXG có thể có hiệu lực trong tối đa 7 ngày. Tìm thêm thông tin về tiêu đề chữ ký trong Thông số kỹ thuật của cơ chế trao đổi HTTP có chữ ký.
Hỗ trợ cá nhân hoá phía máy chủ
SXG chứa tiêu đề Vary: Cookie sẽ chỉ hiển thị cho những người dùng không có cookie cho URL yêu cầu đã ký. Nếu trang web của bạn hiển thị HTML khác cho người dùng đã đăng nhập, thì bạn có thể sử dụng tính năng này để tận dụng SXG mà không làm thay đổi trải nghiệm đó. Xem thông tin chi tiết về tính năng cá nhân hoá phía máy chủ bằng SXG động.
Đóng gói web
SXG là một phần của nhóm đề xuất quy cách Đóng gói trang web rộng hơn. Ngoài SXG, thành phần chính khác của quy cách Đóng gói trang web là Gói web ("trao đổi HTTP theo gói"). Gói web là một tập hợp các tài nguyên HTTP và siêu dữ liệu cần thiết để diễn giải gói.
Mối quan hệ giữa SXG và Gói web là một điểm gây nhầm lẫn phổ biến. SXG và Gói web là hai công nghệ riêng biệt không phụ thuộc vào nhau. Bạn có thể sử dụng Gói web với cả trao đổi đã ký và chưa ký. Mục tiêu chung mà cả SXG và Gói web đều hướng đến là tạo ra một định dạng "đóng gói web" cho phép chia sẻ toàn bộ trang web để sử dụng khi không có mạng.
Tăng tốc độ tải trang bằng cơ chế Trao đổi có chữ ký
Việc bật tính năng Signed Exchanges có thể giúp tăng tốc hiệu suất trang web, từ đó tác động đến Core Web Vitals của trang web, đặc biệt là Nội dung lớn nhất hiển thị (LCP). Là một trong những nền tảng đầu tiên áp dụng công nghệ này, Google Tìm kiếm sử dụng SXG để mang đến cho người dùng trải nghiệm tải trang nhanh hơn đối với những trang được tải từ trang kết quả tìm kiếm.
Google Tìm kiếm thu thập dữ liệu và lưu SXG vào bộ nhớ đệm khi có thể, đồng thời tìm nạp trước SXG mà người dùng có khả năng sẽ truy cập, chẳng hạn như trang tương ứng với kết quả tìm kiếm đầu tiên.
SXG hoạt động hiệu quả nhất khi kết hợp với các phương pháp tối ưu hoá hiệu suất khác, chẳng hạn như sử dụng CDN và giảm tài nguyên phụ chặn hiển thị. Sau khi triển khai, hãy làm theo các đề xuất này để tối đa hoá lợi ích của LCP từ việc tìm nạp trước SXG. Trong nhiều trường hợp, việc tối ưu hoá như vậy có thể giúp tải trang gần như ngay lập tức từ Google Tìm kiếm:
Tác động của cơ chế trao đổi có chữ ký
Từ các thử nghiệm trước đây, chúng tôi nhận thấy LCP giảm trung bình từ 300 mili giây đến 400 mili giây nhờ các lần tìm nạp trước có bật SXG. Điều này giúp các trang web tạo ấn tượng ban đầu tốt hơn với người dùng và thường có tác động tích cực đến các chỉ số kinh doanh.
Một số thương hiệu và trang web toàn cầu đã hưởng lợi từ tính năng Signed Exchanges. Để làm ví dụ thực tế, hãy xem cách triển khai Signed Exchange đã giúp RebelMouse (một Hệ thống quản lý nội dung (CMS) nổi bật) cải thiện hiệu suất và chỉ số kinh doanh của khách hàng như thế nào:
- Narcity cải thiện LCP thêm 41%
- Paper Magazine nhận thấy số phiên trên mỗi người dùng tăng 27%
- MLT Blog giảm 21% thời gian tải trang
Cloudflare nhận thấy rằng SXG cải thiện TTFB cho 98% trang web mà họ thử nghiệm và cải thiện LCP cho 85% trang web, với mức cải thiện trung bình hơn 20% trong số lượt tải trang đủ điều kiện sử dụng SXG.
Lập chỉ mục
Google Tìm kiếm không xếp hạng hoặc lập chỉ mục khác nhau cho phiên bản SXG và phiên bản không phải SXG của một trang. SXG rốt cuộc là một cơ chế phân phối, không thay đổi nội dung cơ bản.
AMP
Nội dung tạo bằng AMP có thể được phân phối bằng SXG. SXG cho phép tìm nạp trước nội dung tạo bằng AMP và hiển thị nội dung đó bằng URL chính tắc thay vì URL AMP.AMP có bộ công cụ riêng để tạo SXG.Tìm hiểu cách phân phát AMP bằng cơ chế trao đổi có chữ ký trên amp.dev.
Gỡ lỗi SXG bằng Chrome DevTools
Để xem trực tiếp SXG, hãy sử dụng trình duyệt Chromium, mở Công cụ cho nhà phát triển, mở bảng điều khiển Mạng rồi truy cập vào trang tìm kiếm mẫu này. Bạn có thể xác định Signed Exchange bằng cách tìm signed-exchange trong cột Type (Loại).
Thẻ Xem trước cung cấp thêm thông tin về nội dung của một SXG.
Công cụ
Việc triển khai SXG bao gồm việc tạo SXG tương ứng với một URL nhất định, sau đó phân phát SXG đó cho người yêu cầu (thường là trình thu thập dữ liệu).
Các chứng chỉ
Để tạo SXG, bạn cần có một chứng chỉ có thể ký SXG, mặc dù một số công cụ sẽ tự động lấy các chứng chỉ này. Trang này liệt kê các tổ chức phát hành chứng chỉ có thể cấp loại chứng chỉ này. Bạn có thể tự động lấy chứng chỉ từ tổ chức phát hành chứng chỉ của Google bằng bất kỳ ứng dụng ACME nào. Máy chủ Web Packager có một ứng dụng ACME tích hợp sẵn và sxg-rs cũng sẽ sớm có ứng dụng này.
Công cụ SXG dành riêng cho nền tảng
Các công cụ này hỗ trợ các ngăn xếp công nghệ cụ thể. Nếu đang sử dụng một nền tảng được một trong những công cụ này hỗ trợ, bạn có thể dễ dàng thiết lập hơn so với một công cụ đa năng.
sxg-rs/cloudflare_workerchạy trên Cloudflare Workers.sxg-rs/fastly_computechạy trên Fastly Compute@Edge.Automatic Signed Exchanges (Trao đổi đã ký tự động) là một tính năng của Cloudflare giúp tự động lấy chứng chỉ và tạo Trao đổi đã ký.
Mô-đun NGINX SXG tạo và phân phát SXG cho các trang web sử dụng nginx. Bạn có thể xem hướng dẫn thiết lập tại đây.
Bộ lọc SXG của Envoy tạo và phân phát SXG cho các trang web sử dụng Envoy.
Công cụ SXG đa năng
máy chủ HTTP sxg-rs
sxg-rs http_server đóng vai trò là một proxy ngược để phân phát SXG. Đối với các yêu cầu từ trình thu thập dữ liệu SXG, http_server sẽ ký các phản hồi từ phần phụ trợ và phản hồi bằng một SXG. Để biết hướng dẫn cài đặt, hãy xem tệp README.
Máy chủ Web Packager
Máy chủ Web Packager, webpkgserver, là một giải pháp thay thế cho sxg-rs http_server, được viết bằng Go. Để biết hướng dẫn về cách thiết lập máy chủ Web Packager, hãy xem bài viết Cách thiết lập trao đổi có chữ ký bằng Web Packager.
Web Packager CLI
Web Packager CLI tạo một SXG tương ứng với một URL nhất định.
webpackager \
--private\_key=private.key \
--cert\_url=https://example.com/certificate.cbor \
--url=https://example.com
Sau khi tạo tệp SXG, hãy tải tệp đó lên máy chủ và phân phát tệp bằng loại MIME application/signed-exchange;v=b3. Ngoài ra, bạn cần phân phát chứng chỉ SXG dưới dạng application/cert-chain+cbor.
Thư viện SXG
Bạn có thể dùng các thư viện này để tạo trình tạo SXG của riêng mình:
sxg_rslà một thư viện Rust để tạo SXG. Đây là thư viện SXG có nhiều tính năng nhất và được dùng làm cơ sở cho các công cụcloudflare_workervàfastly_compute.libsxglà một thư viện C tối thiểu để tạo SXG. Thư viện này được dùng làm cơ sở cho mô-đun NGINX SXG và Bộ lọc Envoy SXG.go/signed-exchangelà một thư viện Go tối thiểu do thông số kỹ thuật của webpackage cung cấp dưới dạng triển khai tham chiếu của việc tạo SXG. Thư viện này được dùng làm cơ sở cho công cụ CLI tham chiếu,gen-signedexchangevà các công cụ Web Packager có nhiều tính năng hơn.
Thương lượng nội dung
Máy chủ nên phân phát SXG khi tiêu đề Chấp nhận cho biết giá trị q cho application/signed-exchange lớn hơn hoặc bằng giá trị q cho text/html. Trong thực tế, điều này có nghĩa là máy chủ gốc sẽ phân phát SXG cho trình thu thập dữ liệu chứ không phải trình duyệt. Nhiều công cụ nêu trên thực hiện việc này theo mặc định, nhưng đối với các công cụ khác, bạn có thể sử dụng biểu thức chính quy sau để so khớp tiêu đề Chấp nhận của các yêu cầu cần được phân phát dưới dạng SXG:
http
Accept: /(^|,)\s\*application\/signed-exchange\s\*;\s\*v=[[:alnum:]\_-]+\s\*(,|$)/
Đề xuất này bao gồm các ví dụ về Apache và nginx.
API cập nhật bộ nhớ đệm
Bộ nhớ đệm SXG của Google có một API mà chủ sở hữu trang web có thể dùng để xoá SXG khỏi bộ nhớ đệm trước khi SXG hết hạn do Cache-Control: max-age. Hãy xem tài liệu tham khảo API cập nhật bộ nhớ đệm để biết thông tin chi tiết.
Liên kết đến SXG
Mọi trang web đều có thể lưu vào bộ nhớ đệm, phân phát và tìm nạp trước SXG của các trang mà trang web đó liên kết đến (nếu có) bằng cách sử dụng thẻ và :
html
<a href="https://example.com/article.html.sxg">
<link rel="prefetch" as="document" href="https://example.com/article.html.sxg">
Bài viết này minh hoạ cách sử dụng nginx để phân phối SXG.
Lợi thế riêng biệt
SXG là một trong nhiều công nghệ có thể dùng để bật tính năng tìm nạp trước trên nhiều nguồn gốc. Khi quyết định sử dụng công nghệ nào, bạn có thể cần phải đánh đổi giữa việc tối ưu hoá các khía cạnh khác nhau. Các phần sau đây minh hoạ một số giá trị độc đáo mà SXG cung cấp trong không gian của các giải pháp có thể có. Những yếu tố này có thể thay đổi theo thời gian khi các giải pháp hiện có phát triển.
Ít yêu cầu phân phát hơn
Với tính năng tìm nạp trước trên nhiều trang web, máy chủ của bạn có thể cần phân phát thêm yêu cầu. Điều này tương ứng với trường hợp trang được tìm nạp trước, nhưng người dùng không truy cập vào trang hoặc không thể hiển thị byte được tìm nạp trước cho người dùng. Đối với SXG, bạn có thể giảm đáng kể các yêu cầu bổ sung không được sử dụng này:
- SXG được lưu vào bộ nhớ đệm và có thể được gửi đến người dùng cho đến khi hết hạn. Do đó, máy chủ bộ nhớ đệm có thể xử lý nhiều hoạt động tìm nạp trước.
- SXG có thể hiển thị cho người dùng có và không có cookie trên trang web của bạn. Do đó, số lần cần tìm nạp lại trang sau khi điều hướng sẽ ít hơn.
Cải thiện tốc độ trang
Bạn có thể thấy tốc độ trang được cải thiện hơn nữa nhờ các nền tảng và chức năng tìm nạp trước mà tính năng này hiện hỗ trợ:
- SXG có thể hiển thị cho người dùng có cookie cho trang web của bạn.
- SXG cũng tìm nạp trước các tài nguyên phụ cho trang của bạn, chẳng hạn như JavaScript, CSS, phông chữ và hình ảnh, khi được chỉ định bằng tiêu đề
Link. - Trong tương lai gần, tính năng tìm nạp trước SXG từ Google Tìm kiếm sẽ được cung cấp cho nhiều loại kết quả tìm kiếm hơn.
Kết luận
Signed Exchange là một cơ chế phân phối giúp xác minh nguồn gốc và tính hợp lệ của tài nguyên một cách độc lập với cách phân phối tài nguyên. Do đó, SXG có thể được bên thứ ba phân phối trong khi vẫn duy trì đầy đủ thông tin ghi nhận tác giả của nhà xuất bản.