Cơ chế trao đổi có chữ ký (họ)

SXG là một cơ chế phân phối cho phé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 tài nguyên đó được phân phối.

Katie Hempenius
Katie Hempenius
Devin Mullins
Devin Mullins

Giao dịch ký (SXG) là một cơ chế phân phối cho phép xác thực nguồn gốc của tài nguyên độc lập với cách tài nguyên đó được phân phối. Việc triển khai SXG có thể cải thiện Thời gian hiển thị nội dung lớn nhất (LCP) bằng cách bật tính năng tìm nạp trước trên nhiều nguồn gốc bảo đảm quyền riêng tư. Ngoài ra, việc tách biệt này sẽ cải thiện nhiều trường hợp sử dụng, chẳng hạn như trải nghiệm Internet ngoại tuyến 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 thức 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 các trình duyệt dựa trên Chromium hỗ trợ (bắt đầu từ các phiên bản: Chrome 73, Edge 79 và Opera 64).

Tổng quan

Là trường hợp sử dụng chính, SXG sử dụng bộ nhớ đệm để tìm nạp trước và phân phát nội dung đã được gốc ký bằng phương thức 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 giới thiệu, đồng thời đảm bảo rằng các trang vẫn 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 có thể nhận dạng đều được ẩn cho đến sau 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 công cụ sớm sử dụng 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 sự thay đổi này sẽ mở rộng sang các đường liên kết 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 ("giao dịch 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 độc lập với cách nội dung được phân phối. 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.

Sơ đồ giải thích cách hoạt động của cơ chế trao đổi có chữ ký. Trình duyệt giao tiếp với bộ nhớ đệm giao tiếp với trang web đích

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ì mô hình phân bổ là trang web đó phải chia sẻ chứng chỉ SSL với nhà phân phối. Cách này có các hạn chế về bảo mật; hơn nữa, cách này còn xa vời với việc làm cho nội dung thực sự có thể di chuyển.

Định dạng SXG

SXG được đóng gói trong tệp được mã hoá nhị phân có hai thành phần chính: một giao dịch HTTP và một chữ ký bao gồm giao dịch đó. 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.

Sau đây là một ví dụ về một tệp SXG được giải mã.

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=&quot;https://test.web.app/ViFgi0WfQ-NotPJf8PBo2T5dEuZ13NdZefPybXq_HhE&quot;;
    date=1597680503;expires=1598285303;integrity=&quot;digest/mi-sha256-03&quot;;sig=<em>MEUCIQD5VqojZ1ujXXQaBt1CPKgJxuJTvFlIGLgkyNkC6d7LdAIgQUQ8lC4eaoxBjcVNKLrbS9kRMoCHKG67MweqNXy6wJg=</em>;
    validity-url=&quot;https://example.org/webpkg/validity&quot;
header integrity: sha256-Gl9bFHnNvHppKsv+bFEZwlYbbJ4vyf4MnaMMvTitTGQ=</p>

<p>The exchange has a valid signature.
payload [1256 bytes]:</p>
<pre class="prettyprint"><code>&lt;title&gt;SXG example&lt;/title&gt;
&lt;meta charset=&#34;utf-8&#34;&gt;
&lt;meta http-equiv=&#34;Content-type&#34; content=&#34;text/html; charset=utf-8&#34;&gt;
&lt;style type=&#34;text/css&#34;&gt;
body {
    background-color: #f0f0f2;
    margin: 0;
    padding: 0;
}
&lt;/style&gt;
</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. Một SXG có thể có hiệu lực tối đa 7 ngày. Hãy tìm thêm thông tin về tiêu đề chữ ký trong phần thông số kỹ thuật về Trao đổi HTTP đã ký.

Hỗ trợ tính năng 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ị các HTML khác nhau 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 các SXG mà không cần thay đổi trải nghiệm đó. Xem thông tin chi tiết về nội dung cá nhân hoá phía máy chủ bằng cơ chế SXG động.

Đóng gói web

SXG là một phần của nhóm đề xuất thông số kỹ thuật Đóng gói web rộng hơn. Ngoài SXG, thành phần chính khác của quy cách Đóng gói web là Web Bundle ("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 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ả các nền tảng trao đổi có chữ ký và không có chữ ký. Một mục tiêu chung mà cả SXG và Gói web đều hướng đến là tạo một định dạng "đóng gói web" cho phép chia sẻ toàn bộ trang web để sử dụng ngoại tuyến.

Tăng tốc độ tải trang bằng cơ chế trao đổi có chữ ký

Việc bật tính năng Trao đổi đã ký có thể giúp tăng tốc độ trang web, từ đó tác động đến các Chỉ số quan trọng về trang web của trang web, đặc biệt là Thời gian hiển thị nội dung lớn nhất (LCP). Là một trong những bên sử dụng sớm, 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 cho các 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 các SXG vào bộ nhớ đệm khi có thể, đồng thời tìm nạp trước các SXG mà người dùng có thể truy cập, ví dụ: 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 tính năng 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 kết xuất. Sau khi triển khai, hãy làm theo các đề xuất này để tối đa hoá lợi ích 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 trang tải gần như tức thì 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 quan sát thấy LCP trung bình giảm từ 300 mili giây đến 400 mili giây sau khi tìm nạp trước có hỗ trợ SXG. Điều này giúp trang web tạo ấn tượng tốt hơn cho 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 Trao đổi đã ký. Dưới đây là một nghiên cứu điển hình về cách triển khai tính năng Trao đổi đã ký giúp RebelMouse, một Hệ thống quản lý nội dung (CMS) nổi tiếng, cải thiện hiệu suất và các chỉ số kinh doanh của khách hàng:

  • 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%
  • Blog MLT giảm thời gian tải trang xuống 21%

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% về tốc độ tải trang đủ điều kiện SXG.

Lập chỉ mục

Google Tìm kiếm không phân biệt thứ hạng hoặc cách lập chỉ mục giữa nội dung SXG và nội dung không phải SXG của một trang. Cuối cùng, SXG là một cơ chế phân phối – không thay đổi nội dung cơ bản.

AMP

Bạn có thể phân phối nội dung AMP bằng SXG. SXG cho phép tìm nạp trước và hiển thị nội dung AMP bằng URL chính tắc thay vì URL AMP. AMP có 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 Công cụ của Chrome cho nhà phát triển

Để xem trực tiếp SXG, hãy 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 ví dụ này. Bạn có thể xác định Giao dịch hoán đổi đã ký bằng cách tìm signed-exchange trong cột Loại.

Ảnh chụp màn hình cho thấy một yêu cầu SXG trong bảng điều khiển &quot;Mạng&quot; trong DevTools
Bảng điều khiển Mạng trong Công cụ cho nhà phát triển

Thẻ Preview (Xem trước) cung cấp thêm thông tin về nội dung của SXG.

Ảnh chụp màn hình thẻ &quot;Preview&quot; (Xem trước) cho SXG
Thẻ Xem trước trong DevTools

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 các trình yêu cầu (thường là trình thu thập thông tin).

Các chứng chỉ

Để tạo một cơ chế SXG, bạn cần có một chứng chỉ có thể ký SXG, mặc dù một số công cụ tự động có được những công cụ 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ủ đóng gói web có một ứng dụng ACME tích hợp sẵn và sxg-rs sẽ sớm có.

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 hỗ trợ bởi một trong những công cụ này, bạn có thể thấy việc thiết lập dễ dàng hơn so với một công cụ dùng cho nhiều mục đích.

Công cụ SXG đa năng

máy chủ HTTP sxg-rs

sxg-rs http_server đóng vai trò là proxy đảo 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ủ đóng gói web

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 cơ chế trao đổi có chữ ký bằng Web Packager.

Web Packager CLI

CLI Trình đóng gói web 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ủ của bạn và phân phát tệp bằng loại MIME application/signed-exchange;v=b3. Ngoài ra, bạn sẽ 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ể sử dụng các thư viện này để tạo trình tạo SXG của riêng mình:

  • sxg_rs là 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_workerfastly_compute.

  • libsxg là một thư viện C tối thiểu để tạo SXG. Tệp này được dùng làm cơ sở cho mô-đun NGINX SXG và Bộ lọc SXG của Envoy.

  • go/signed-exchange là một thư viện Go tối thiểu do thông số kỹ thuật webpackage cung cấp dưới dạng triển khai tham chiếu để tạo SXG. Tệp này được dùng làm cơ sở cho công cụ CLI tham chiếu, gen-signedexchange và các công cụ Trình đóng gói web có nhiều tính năng hơn.

Thương lượng nội dung

Máy chủ phải phân phát SXG khi tiêu đề Accept 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 thông tin, nhưng không phân phát cho 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ể dùng biểu thức chính quy sau đây để so khớp với tiêu đề Accept (Chấp nhận) của các yêu cầu sẽ đượ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.

Cập nhật API 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 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 với 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à nó liên kết đến bằng cách sử dụng các thẻ : 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ệ khả thi để cho phép 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 nhiều giải pháp khả thi. Các yếu tố này có thể thay đổi theo thời gian khi không gian của 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ải 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 các yêu cầu. Điều này tương ứng với trường hợp một trang được tìm nạp trước nhưng người dùng không truy cập 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 dùng đến sau đâ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 đó, nhiều yêu cầu tìm nạp trước có thể chỉ do máy chủ bộ nhớ đệm xử lý.
  • 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ẽ có ít lần cần tìm nạp lại trang sau khi điều hướng hơn.

Cải thiện tốc độ trang

Bạn có thể thấy tốc độ trang được cải thiện thêm nhờ các nền tảng và chức năng tải trước mà tính năng này hiện hỗ trợ:

  • SXG có thể hiển thị cho những người dùng có cookie cho trang web của bạn.
  • SXG cũng tải trước các tài nguyên phụ cho các 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

Giao dịch hoán đổi đã ký là một cơ chế phân phối cho phép xác minh nguồn gốc và tính hợp lệ của một tài nguyên độc lập với cách tài nguyên đó được phân phối. Do đó, các bên thứ ba có thể phân phối SXG trong khi vẫn duy trì mô hình phân bổ đầy đủ cho nhà xuất bản.

Tài liệu đọc thêm