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

SXG là một cơ chế phân phối giúp có thể xác thực nguồn gốc của một tài nguyên độc lập với cách tài nguyên đó được phân phối.

Katie Hempenius
Katie Hempenius
Devin Mullins
Devin Mullins

Trao đổi có chữ ký (SXG) là một cơ chế phân phối giúp bạn có thể xác thực nguồn gốc của một tài nguyên một cách độ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 Nội dung lớn nhất hiển thị (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 nhằm bảo đảm quyền riêng tư. Ngoài ra, việc phân tách này còn thúc đẩy 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

Các trình duyệt dựa trên Chromium hỗ trợ SXG (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 một bộ nhớ đệm để tìm nạp trước và phân phát nội dung đã được nguồn gốc có chữ 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 giới thiệu, trong khi vẫn đảm bảo rằng các trang vẫn không bị thay đổi và được gán đúng 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 công cụ sớm áp dụng chức 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 qua Google Tìm kiếm, SXG có thể là một công cụ quan trọng giúp tải trang nhanh hơn cho người dùng. 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 ("trao đổi HTTP") theo cách có thể 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 phân phối nội dung. Do đó, trình duyệt có thể hiển thị URL của trang web gốc vào thanh địa chỉ chứ không phải 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

Trong quá khứ, cách duy nhất để có một để sử dụng một bên thứ ba nhằm phân phối nội dung trong khi vẫn duy trì trang web chia sẻ chứng chỉ SSL của mình với nhà phân phối. Điều này có một số hạn chế về bảo mật; hơn nữa, đây là một khoảng cách rất xa với giúp nội dung thực sự dễ di chuyển.

Định dạng SXG

Một SXG được đóng gói trong một tệp được mã hoá nhị phân có thành phần chính: một trao đổi HTTP và một chữ ký bao gồm giao dịch. Hoạt động trao đổi HTTP bao gồm URL yêu cầu, nội dung thông tin thương lượng 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. Đáp SXG có thể có hiệu lực trong tối đa 7 ngày. Tìm thêm thông tin trên tiêu đề chữ ký trong các giao thức Signed HTTP Exchanges .

Hỗ trợ hoạt động cá nhân hoá phía máy chủ

Một tiện ích SXG chứa tiêu đề Vary: Cookie sẽ chỉ hiển thị cho người dùng chưa có cookie cho URL yêu cầu đã ký. Nếu trang web của bạn trình bày HTML khác cho người dùng đã đăng nhập, 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 chi tiết về hoạt động cá nhân hoá phía máy chủ nhờ Dynamic SXG.

Đóng gói web

SXG là một phần của Web Nhóm đề xuất thông số kỹ thuật đóng gói. Ngoài ra với SXGs, một thành phần chính khác của quy cách Đóng gói 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à Web Bundle là một điểm dễ gây nhầm lẫn phổ biến. SXG và Web Bundle là hai công nghệ riêng biệt không phụ thuộc vào nhau khác – Gói web có thể dùng được với cả trao đổi có chữ ký và chưa ký. Điểm chung mục tiêu mà cả SXG và Web Bundle nâng cao là tạo ra "đóng gói web" định dạng cho phép chia sẻ toàn bộ trang web để xem khi không có mạng.

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

Việc bật cơ chế Trao đổi có chữ ký có thể giúp tăng tốc hiệu suất của trang web và do đó tác động đến Các chỉ số quan trọng về trang web của trang web, trong chỉ số Thời gian hiển thị nội dung lớn nhất (LCP) cụ thể. Google Tìm kiếm là một công ty đầu tiên sử dụng SXG để mang lại cho người dùng trải nghiệm tải trang nhanh hơn đối với 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 vào bộ nhớ đệm các cơ chế SXG khi có sẵn và tìm nạp trước SXG mà người dùng có thể sẽ 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 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 các nguồ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 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ể dẫn đến việc Google Tìm kiếm tải trang gần như ngay lập tức:

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 các trang web tạo ấn tượng đầu tiên 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 trên toàn cầu đã hưởng lợi từ cơ chế Trao đổi có chữ ký. Trong một nghiên cứu điển hình, hãy xem việc triển khai cơ chế Trao đổi có chữ ký đã giúp RebelMouse, một Hệ thống quản lý nội dung (CMS) nổi tiếng, cải thiện dịch vụ hiệu suất và chỉ số kinh doanh:

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

Cloudflare nhận thấy rằng SXG cải thiện TTFB cho 98% số trang web mà họ thử nghiệm và cải thiện LCP cho 85% số trang web, với mức cải thiện trung bình là hơn 20% về số lượt tải trang đủ điều kiện dùng SXG.

Lập chỉ mục

Các bản trình bày SXG và không phải SXG của một trang sẽ không được xếp hạng hoặc lập chỉ mục khác với Google Tìm kiếm. Về cơ bản, SXG là một cơ chế phân phối 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 nội dung AMP và được hiển thị bằng URL chính tắc, thay vì URL AMP.AMP có URL riêng công cụ để tạo SXG.Tìm hiểu cách phân phát AMP thông qua 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 Trao đổ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 liên quan đến SXG trong &quot;Network&quot; bảng điều khiển trong Công cụ cho nhà phát triển
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 &quot;Xem trước&quot; thẻ cho SXG
Thẻ Xem trước trong Công cụ cho nhà phát triển

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 rồi phân phát SXG đó cho những người yêu cầu (thường là trình thu thập dữ liệu).

Các chứng chỉ

Để tạo một cơ chế SXG, bạn cần 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. Các chứng chỉ có thể được lấy tự động từ tổ chức phát hành chứng chỉ của Google bằng cách sử dụng bất kỳ ứng dụng ACME bất kỳ. Máy chủ Web Packager đã tích hợp sẵn ứng dụng ACME tích hợp và sxg-rs sẽ sớm ra mắt.

Công cụ SXG dành riêng cho nền tảng

Những công cụ này hỗ trợ một số bộ phần mềm cơ sở. Nếu bạn đang sử dụng nền tảng được một trong các công cụ sau hỗ trợ, bạn có thể thấy việc thiết lập dễ dàng hơn một công cụ đa năng.

Công cụ SXG dùng cho nhiều mục đích

máy chủ HTTP sxg-rs

Các sxg-rs http_server có vai trò là proxy ngược cho phân phát SXG. Đối với các yêu cầu từ trình thu thập dữ liệu của SXG, http_server sẽ ký phản hồi từ phần phụ trợ và phản hồi bằng SXG. Để lắp đặt hướng dẫn, hãy xem ĐỌC.

Máy chủ Web Packager

Trình đóng gói web Máy chủ, webpkgserver là giải pháp thay thế cho http_server sxg-rs, được viết bằng Go. Cho hướng dẫn về cách thiết lập máy chủ Web Packager, hãy xem Cách thiết lập máy chủ Web Packager bằng cách sử dụng Web Packager.

Giao diện dòng lệnh (CLI) của trình đóng gói web

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ủ của bạn rồi 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 để xây dựng trình tạo SXG của riêng mình:

  • sxg_rs là một thư viện Rust dành cho tạo SXG. Đây là thư viện SXG có nhiều tính năng nhất và được dùng làm cho các công cụ cloudflare_workerfastly_compute.

  • libsxg là thư viện C tối thiểu cho tạo SXG. Công cụ 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 gói web cung cấp dưới dạng tham chiếu cách triển khai tạo SXG. API 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ụ Web Packager nhiều tính năng hơn.

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

Máy chủ nên phân phát SXG khi tiêu đề Chấp nhận cho biết rằng giá trị q của ứng dụng/trao đổi có chữ ký lớn hơn hoặc bằng q-value cho văn bản/html. Trong thực tế, điều này có nghĩa là một 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ể dùng biểu thức chính quy sau đây để so khớp với tiêu đề Accept 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 về 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 (nếu có) 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.

Ưu điểm độc đáo

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 giải pháp khả dụng thay đổi.

Í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ải phân phát thêm các yêu cầu khác. Đ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, những yêu cầu bổ sung không dùng đến có thể bị giảm đáng kể:

  • SXG được lưu vào bộ nhớ đệm và có thể gửi cho người dùng cho đến khi hết hạn. Do đó, nhiều lần tìm nạp trước có thể chỉ được máy chủ bộ nhớ đệm xử lý.
  • SXG có thể được hiển thị cho người dùng cả có và không có cookie trên trang web của bạn. Nhờ đó, sẽ có ít lần tìm nạp lại trang hơn sau khi điều hướng.

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

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

  • SXG có thể được 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 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 hỗ trợ trên nhiều loại kết quả tìm kiếm hơn.

Kết luận

Trao đổi có chữ ký là cơ chế phân phối giúp có thể 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 thức của tài nguyên đó đã gửi. Do đó, bên thứ ba có thể phân phối SXG khi duy trì toàn bộ thông tin ghi nhận sự đóng góp của nhà xuất bản.

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