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 độc lập với cách tài nguyên đó được phân phối.
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 độ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 nhiều nguồn gốc bảo đảm quyền riêng tư. Ngoài ra, việc tách rời này giúp 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à việc 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, các trường hợp sử dụng và công cụ của SXG.
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 (kể từ 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 dùng một bộ nhớ đệm để tìm nạp trước và phân phát nội dung được mã hoá theo nguồn gốc. Điều này giúp tăng tốc độ điều hướng chéo 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 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 khi người dùng truy cập vào một trang web để bảo vệ quyền riêng tư của người dùng. Google Tìm kiếm là một đơn vị triển khai sớm tính năng tìm nạp trước SXG. Đối với các 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 tác động này sẽ mở rộng đến những người 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 giúp trình duyệt có thể 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 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ì mô hình phân bổ là chia sẻ chứng chỉ SSL 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, nó còn xa hơn rất nhiều so với việc tạo nội dung thực sự di động.
Định dạng SXG
SXG được đóng gói trong một tệp được mã hoá nhị phân, chứa 2 thành phần chính: trao đổi HTTP và một chữ ký (chữ ký) che phủ hoạt động trao đổi. Hoạt động 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 một SXG. Một SXG có thể có hiệu lực trong 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 của Trao đổi HTTP đã ký.
Hỗ trợ cá nhân hoá phía máy chủ
SXG chứa tiêu đề Vary: Cookie
sẽ chỉ xuất hiện cho người dùng không có cookie cho URL của yêu cầu đã ký. Nếu trang web của bạn hiển thị HTML riêng 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ề hoạt động cá nhân hoá phía máy chủ với Dynamic SXG.
Đóng gói web
SXG là một phần của nhóm đề xuất quy cách Đóng gói web rộng hơn. Bên cạnh SXG, thành phần chính khác của quy cách Gói web là Web Bundle ("trao đổi HTTP theo gói"). Gói web là 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 gây nhầm lẫn phổ biến. SXG và Web Bundle là hai công nghệ riêng biệt và không phụ thuộc vào nhau. Bạn có thể sử dụng Gói web với cả cơ chế trao đổi có chữ ký và không có chữ ký. Một mục tiêu chung được cả SXG và Web Bundle nâng cao là tạo định dạng "đóng gói web" cho phép chia sẻ toàn bộ các trang web để sử dụng ngoại tuyến.
Tăng tốc độ tải trang bằng tính nă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, từ đó ảnh hưởng đến Các chỉ số quan trọng về trang web của trang web, cụ thể là Thời gian hiển thị nội dung lớn nhất (LCP). Là một đơn vị 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 đố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 vào bộ nhớ đệm SXG khi có và tìm nạp trướ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 tốt 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 các 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 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 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 đã quan sát thấy LCP giảm trung bình từ 300 mili giây đến 400 mili giây từ các lượt 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 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 đã được hưởng lợi từ cơ chế Trao đổi có chữ ký. Như một nghiên cứu điển hình, hãy xem cách 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 bật, cải thiện hiệu suất của khách hàng và các chỉ số kinh doanh:
- Độc giả đã 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 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% số trang web, với mức cải thiện trung bình là hơn 20% trong số lượt tải trang đủ điều kiện cho SXG.
Lập chỉ mục
Google Tìm kiếm không xếp hạng hoặc lập chỉ mục theo những cách khác nhau cho cả những nội dung đại diện cho SXG và không phải SXG. Xét cho cùng, SXG là một cơ chế phân phối, chứ không thay đổi nội dung cơ bản.
AMP
Nội dung AMP có thể được phân phối 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ó riêng 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
Để trực tiếp xem một 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 mẫu này. Bạn có thể xác định Trao đổi có chữ 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 "Mạng" trong Công cụ cho nhà phát triển](https://web.dev/static/articles/signed-exchanges/image/screenshot-showing-sxg-r-9a4f9df2440b3.png?authuser=5&hl=vi)
Thẻ Preview (Xem trước) cung cấp thêm thông tin về nội dung của một SXG.
![Ảnh chụp màn hình thẻ "Xem trước" cho một SXG](https://web.dev/static/articles/signed-exchanges/image/screenshot-the-preview-033e1253a3e1.png?authuser=5&hl=vi)
Công cụ
Quá trình 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).
Chứng chỉ
Để tạo một SXG, bạn cần có một chứng chỉ có thể ký SXG, mặc dù có một số công cụ có thể tự động điều chỉnh những nội dung này. Trang này liệt kê những 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ỉ Google bằng bất kỳ ứng dụng ACME nào. Máy chủ Web Packager có ứng dụng ACME tích hợp sẵn 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ợ các nhóm công nghệ cụ thể. Nếu đang sử dụng một nền tảng được một trong các công cụ này hỗ trợ, bạn có thể sẽ thấy việc thiết lập dễ dàng hơn so với một công cụ đa năng.
sxg-rs/cloudflare_worker
chạy trên Cloudflare Workers.sxg-rs/fastly_compute
chạy trên Compute@Edge nhanh.Cơ chế trao đổi có chữ ký tự động là một tính năng của Cloudflare, tự động nhận các chứng chỉ và tạo cơ chế trao đổi có chữ 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 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 hoạt động như một đại diện ngược để phân phát SXG. Đối với các yêu cầu của trình thu thập dữ liệu SXG, http_server
sẽ ký các phản hồi từ phần phụ trợ rồi phản hồi bằng một SXG. Để biết hướng dẫn cài đặt, hãy xem phần README.
Máy chủ Web Packager
Máy chủ Web Packager webpkgserver
là giải pháp thay thế cho http_server sxg-rs, đượ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 đã ký bằng Web Packager.
Web Packager CLI (Trình đóng gói web 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ủ của bạn và phân phát tệp đó theo 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ể 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 để tạo SXG. Đây là thư viện SXG nổi bật nhất và được dùng làm cơ sở cho các công cụcloudflare_worker
vàfastly_compute
.libsxg
là một thư viện C tối thiểu để tạo SXG. Dữ liệu 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 bản đặc tả gói web cung cấp ở dạng triển khai tham chiếu để tạo SXG. Giao diện này được dùng làm cơ sở cho công cụ CLI tham chiếugen-signedexchange
và các công cụ Web Packager nổi bật khác.
Thương lượng nội dung
Máy chủ phải phân phát SXG khi tiêu đề Accept (Chấp nhận) cho biết rằng giá trị q đối với application/Signed-Exchange lớn hơn hoặc bằng giá trị q đối với text/html. Trên thực tế, điều này có nghĩa là máy chủ gốc sẽ phân phát SXG cho các trình thu thập dữ liệu, chứ không phải cho các trình duyệt. Nhiều công cụ 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 để 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 các SXG này hết hạn do Cache-Control: max-age
. Hãy xem tài liệu tham khảo API về bộ nhớ đệm để cập nhật để 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 dữ liệu SXG của những trang mà trang đó liên kết đến (nếu có) bằng cách sử dụng các 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 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 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 cân bằng giữa việc tối ưu hoá các khía cạnh. Các phần sau đây minh hoạ một vài giá trị độc đáo mà SXG cung cấp trong các 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 mở rộng các giải pháp hiện có.
Í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 yêu cầu. Điều này tương ứng với các 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 vào trang hoặc không thể hiển thị các byte đã tìm nạp trước cho người dùng. Đối với SXG, 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 cho người dùng cho đến khi hết hạn. Do đó, nhiều lượt tìm nạp trước chỉ có thể do máy chủ bộ nhớ đệm xử lý.
- Người dùng có và không có cookie trên trang web của bạn có thể nhìn thấy SXG. Do đó, sẽ ít lần hơn khi Google cần tìm nạp lại trang sau khi điều hướng.
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à tính năng tìm nạp trước hiện hỗ trợ:
- Người dùng có cookie trên trang web của bạn có thể nhìn thấy SXG.
- 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 trên Google Tìm kiếm sẽ có 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à một cơ chế phân phối giúp bạn có thể 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 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ì toàn bộ thuộc tính của nhà xuất bản.