Brotli là gì? Cách nén br hoạt động trên web
API Scraping Universal không có scrap lấy nội dung web công khai được phép và có thể render JavaScript khi Brotli phải được quan sát trong một phản hồi thực.
Tóm tắt ngắn
- Brotli có một vai trò giao thức chính xác. Brotli là một định dạng dữ liệu nén không mất dữ liệu kết hợp tham chiếu quay ngược theo kiểu LZ77, mã hóa Huffman, và một từ điển được xác định trước được thiết kế để đại diện cho các mẫu dữ liệu thông thường một cách hiệu quả.
- Brotli phải được đọc ở lớp đúng. Vận chuyển, đại diện, chính sách trình duyệt và ủy quyền ứng dụng vẫn là những mối quan tâm riêng biệt.
- Các trung gian có thể thay đổi những gì mà một ứng dụng quan sát. Cổng, bộ nhớ đệm, mặc định của trình duyệt, và thư viện máy khách có thể thêm xử lý giữa các byte nguồn và dữ liệu đã phân tích.
- Xác thực cần bằng chứng nội dung. Một trạng thái hoặc trường đơn lẻ không chứng minh rằng đại diện công khai mong đợi đã đến.
- Bảo mật phụ thuộc vào phạm vi và xác thực. Cú pháp giao thức không bao giờ cấp quyền truy cập vào tài nguyên hoặc tin tưởng vào giá trị do người gọi cung cấp.
Brotli là gì?
Brotli là một định dạng dữ liệu nén không mất dữ liệu kết hợp các tham chiếu quay ngược theo kiểu LZ77, mã hóa Huffman, và một từ điển được xác định trước được thiết kế để đại diện cho các mẫu dữ liệu thông thường một cách hiệu quả. Trong HTTP, nó được xác định bởi token mã hóa nội dung br. Các khách hàng quảng bá br trong Accept-Encoding, và các máy chủ lựa chọn nó sẽ trả về Content-Encoding: br.
Định nghĩa hữu ích bao gồm cả cơ chế và ranh giới của nó. Brotli ảnh hưởng đến một phần cụ thể của một giao dịch, trong khi các trách nhiệm lân cận vẫn thuộc về HTTP, trình duyệt, phương thức vận chuyển đã chọn, ứng dụng, hoặc mô hình dữ liệu của máy chủ. Giữ các lớp đó tách biệt làm cho các báo cáo lỗi có thể tái lập và ngăn chặn sự thay đổi cấu hình bị nhầm lẫn với quyết định kiểm soát truy cập.
Đối với các nhà phát triển API, câu hỏi đầu tiên là ai tạo ra giá trị hoặc hành vi. Câu hỏi tiếp theo là ai giải thích nó. Câu hỏi cuối cùng là kết quả quan sát nào chứng minh rằng sự giải thích đã hoạt động. Ba câu trả lời đó biến một thuật ngữ trong từ điển thành một hợp đồng giao diện có thể kiểm tra được.
Cách Brotli sản xuất và truyền tải nội dung br
Bộ mã hóa chia đầu vào thành các khối meta và đại diện cho byte nguyên vẹn cùng với các tham chiếu đến các chuỗi lặp lại. Mô hình ngữ cảnh và mã tiền tố giảm chi phí của các mẫu thông thường, trong khi từ điển tĩnh có thể đại diện cho các từ và đoạn quen thuộc một cách gọn gàng. Giải mã đảo ngược các lệnh đó để tái sản xuất các byte ban đầu.
Đàm phán HTTP là tách biệt khỏi thuật toán nén. Một khách hàng liệt kê br trong số các mã hóa được hỗ trợ, và máy chủ hoặc cạnh lựa chọn một biến thể được nén trước hoặc được mã hóa động. Phản hồi giữ nguyên Content-Type gốc và thêm Content-Encoding: br.
Tài sản tĩnh có thể được nén trong suốt một quá trình xây dựng để công việc thời gian yêu cầu là thấp. Các phản hồi động có thể được mã hóa khi chúng được tạo ra, nhưng mức độ nén, kích thước phản hồi, và khả năng của máy chủ cần phải được đo lường. Một đại diện nhỏ hơn không hữu ích nếu độ trễ mã hóa chiếm ưu thế trong ngân sách yêu cầu.
Các trình duyệt và thư viện HTTP hiện đại thường tự động giải mã br. Các bảng điều khiển mạng có thể hiển thị kích thước chuyển giao đã được mã hóa trong khi mã ứng dụng thấy văn bản đã được giải mã. Các công cụ thu thập thô phải yêu cầu danh tính hoặc hỗ trợ giải mã Brotli trước khi phân tích.
Các khái niệm Brotli quan trọng đối với HTTP
Các thuật ngữ sau tách biệt các thành phần thường bị gộp thành một nhãn. Đọc chúng như là các giao diện giữa các tham gia thay vì như là trang trí trong một dấu vết mạng.
br
Token mã hóa nội dung HTTP đã đăng ký cho một đại diện được mã hóa Brotli.
Khối meta
Một đơn vị trong luồng Brotli mang thông tin nén, không nén, hoặc siêu dữ liệu.
Tham chiếu quay ngược
Một cặp độ dài và khoảng cách chỉ đến các byte đã được đại diện trong cửa sổ trượt.
Từ điển tĩnh
Một bộ sưu tập đã được xác định trước của các đoạn dữ liệu phổ biến và biến đổi có sẵn cho định dạng.
Thiết lập chất lượng
Một sự đánh đổi của bộ mã hóa giữa công việc nén và kích thước đầu ra; nó không thay đổi tính không mất dữ liệu.
Vary
Tín hiệu bộ nhớ đệm HTTP tách biệt các biến thể br, gzip và danh tính được chọn thông qua Accept-Encoding.
Tại sao Brotli quan trọng trong thu thập dữ liệu web
Brotli có thể thay đổi những gì byte đến, cách những byte đó được giải thích, hoặc liệu mã trình duyệt có thể quan sát kết quả không. Một quy trình thu thập nên xác định hiệu ứng đó trước khi thay đổi công cụ. Ghi lại URL đã yêu cầu, URL cuối cùng, trạng thái phản hồi, loại đại diện, các trường giao thức liên quan, và một dấu hiệu nội dung mong đợi. Hồ sơ gọn gàng đó phân biệt một trang đúng với thông điệp truy cập, màn hình đồng ý, mục tiêu chuyển hướng, khung ứng dụng rỗng, hoặc mã hóa không tương thích.
HTTP trực tiếp là con đường tiếp nhận đơn giản nhất khi dữ liệu yêu cầu tồn tại trong một phản hồi được render từ máy chủ mở. Một trình duyệt trở nên có liên quan khi nội dung đã được phê duyệt phụ thuộc vào việc thực thi JavaScript, trạng thái do trình duyệt quản lý, điều hướng, hoặc chính sách bảo mật của trình duyệt. Hai con đường không nên bị ép buộc trông giống nhau: các trình duyệt quản lý cookie, nén, chuyển hướng, CORS, và lưu trữ theo quy tắc nền tảng, trong khi một máy khách trực tiếp phơi bày một tập hợp khác các mặc định.
Tính liên tục phiên quan trọng bất cứ khi nào một phản hồi thiết lập trạng thái cho yêu cầu tiếp theo. Giữ một chuỗi được ủy quyền bên trong một ngữ cảnh máy khách hạn chế, bảo tồn địa phương và nguồn gốc mạng cần thiết, và tránh pha trộn trạng thái từ các công việc không liên quan. Một proxy thay đổi nguồn gốc mạng; nó không tái tạo tiêu đề, giải mã các đại diện, thực thi các tập lệnh, hoặc cấp quyền truy cập vào nội dung hạn chế.
Giải mã chỉ bắt đầu sau khi xác thực đại diện. Xác nhận host cuối cùng, danh tính canon nơi có sẵn, loại phương tiện, trạng thái giải mã, và dấu hiệu kinh doanh cần thiết trước khi trích xuất các trường. Thứ tự này ngăn cản một trình phân tích biến một tài liệu lỗi thành các hồ sơ rỗng có vẻ thành công về mặt kỹ thuật.
Các trung gian xứng đáng được chú ý rõ ràng. Một mạng lưới phân phối nội dung có thể chọn một biến thể đã mã hóa, một cổng có thể phản hồi OPTIONS, một bộ nhớ đệm có thể tái sử dụng một phản hồi đã được thỏa thuận, và một máy chủ ứng dụng có thể thiết lập cookies hoặc trường ủy quyền.
API Scraping Toàn cầu Không Mảnh là liên quan khi một nhóm cần lấy nội dung công khai được phép một cách có quản lý, bao gồm các trang được triển khai bằng JavaScript. Hợp đồng mua lại vẫn nên xác định mục tiêu, các trường được phép, đại diện mong đợi, dấu hiệu chấp nhận, và các điều kiện dừng.
Nơi Brotli Thường Được Áp Dụng
Brotli có một vị trí trong kiến trúc khi nó thay đổi hành vi sản phẩm cụ thể, yêu cầu tương thích, hoặc quyết định chẩn đoán. Những trường hợp sử dụng này mô tả công việc trước tiên và tính năng giao thức sau.
Các gói JavaScript tĩnh
Mã hóa tại thời gian xây dựng có thể giảm transfer mà không cần công việc nén tại thời gian yêu cầu.
Bảng kiểu
Các bộ chọn và khai báo lặp lại cung cấp cho bộ mã hóa các mẫu hữu ích.
HTML
Đánh dấu và các đoạn văn bản phổ biến có thể được hưởng lợi từ từ điển của định dạng và mã hóa lặp lại.
JSON
Các khóa lặp lại và văn bản có cấu trúc là các đầu vào phù hợp khi độ trễ và ngân sách CPU cho phép.
SVG
Đánh dấu vector dựa trên văn bản thường nén tốt, khác với nhiều định dạng raster đã nén.
Các biến thể CDN
Một edge có thể chọn br, gzip, hoặc identity từ Accept-Encoding và lưu trữ từng đại diện riêng biệt.
Brotli và gzip trong Giao hàng Web
Brotli thuộc về một lớp của HTTP và không nên bị nhầm lẫn với các lớp liền kề. Một triển khai hợp lý xác định thành phần nào chọn giá trị, thành phần nào có thể thay đổi nó, và bằng chứng nào chứng minh rằng đại diện cuối cùng là chính xác.
| Kích thước | Brotli | Khái niệm liên quan hoặc thay thế |
|---|---|---|
| Mã thông báo HTTP | br | gzip |
| Cơ sở định dạng | LZ77, mã hóa Huffman, mô hình ngữ cảnh, từ điển tĩnh | DEFLATE trong một lớp gzip |
| Tính tương thích | Phổ biến trong các khách hàng web hiện đại | Rộng rãi trên các khách hàng cũ và hiện tại |
| Tiền nén | Hữu ích cho tài sản văn bản tĩnh | Hữu ích cho tài sản văn bản tĩnh |
| Sự thay thế | Thỏa thuận gzip hoặc identity khi br không có | Sử dụng identity khi gzip không có |
Một so sánh chỉ hữu ích nếu nó giữ nguyên ranh giới lớp. Hai cơ chế có thể đồng tồn tại trong một yêu cầu, và việc thay thế một cái không tự động thay thế cái còn lại. Tài liệu hành vi đã chọn theo các đầu vào, đầu ra quan sát được, trạng thái thất bại, và quyền sở hữu.
Những Sai Lầm trong Triển Khai Brotli
- Phục vụ br mà không có Content-Encoding. Các bên nhận sẽ coi byte nén như loại phương tiện gốc và việc phân tích sẽ thất bại.
- Gửi br đến một khách hàng không hỗ trợ. Lựa chọn phải tôn trọng Accept-Encoding và cung cấp một sự thay thế tương thích.
- Sử dụng công việc tối đa cho mỗi thân động. Công sức mã hóa cao hơn có thể làm tăng độ trễ và chi phí CPU mà không có lợi ích kích thước thực tiễn.
- Bỏ qua sự biến đổi của bộ nhớ đệm. Phản hồi br không được tái sử dụng cho một khách hàng chỉ quảng cáo gzip hoặc identity.
- Nén các định dạng nhị phân dày đặc. Các hình ảnh, lưu trữ và video đã nén thường không thu được nhiều lợi ích từ mã hóa khác.
- Giải mã một phản hồi thư viện đã được giải mã. Mặc định của khách hàng có thể che giấu mã hóa nội dung khỏi mã ứng dụng, vì vậy hãy kiểm tra các lớp thô và lộ ra một cách riêng biệt.
Hầu hết các lỗi sẽ dễ chẩn đoán hơn sau khi loại bỏ các giả định về những gì một thư viện hoặc trình duyệt đã tự động làm. Ghi lại một dấu vết tối thiểu, xóa bỏ bí mật và thay đổi một biến có kiểm soát tại một thời điểm. Mục tiêu là có một giải thích ổn định về đại diện đã trả về, không phải một tập hợp các điều chỉnh tiêu đề không liên quan.
Kế hoạch Triển khai và Xác minh Brotli
Chuỗi này hoạt động như một cuộc xem xét thiết kế trước khi ra mắt và như một chẩn đoán sản xuất sau khi có thay đổi hành vi. Nó giữ bằng chứng giao thức liên kết với kết quả ứng dụng.
- Đo lường HTML, CSS, JavaScript, JSON và SVG đại diện trước khi chọn cài đặt bộ mã hóa.
- Tiền nén các tài sản ổn định và giữ các cài đặt nén động trong ngân sách độ trễ và CPU của máy chủ.
- Đàm phán qua Accept-Encoding và giữ lại các phương án fallback gzip hoặc identity.
- Trả lại Content-Encoding: br và bảo tồn Content-Type gốc.
- Đặt Vary và xác nhận các khóa bộ nhớ CDN phân biệt các biến thể br, gzip và identity.
- Kiểm tra một trình duyệt, một thư viện HTTP hiện đại, và một khách hàng thô để tiết lộ sự khác biệt trong giải mã tự động.
- Xác thực nội dung đã giải mã và so sánh độ trễ từ đầu đến cuối, không chỉ là số lượng byte đã nén.
Kết thúc cuộc xem xét bằng cách lưu một mẫu nhỏ được chấp nhận và một mẫu bị từ chối với cùng một quy tắc xóa bỏ. Các thay đổi trong tương lai sau đó có thể được so sánh với danh tính trang đã biết, các trường mong đợi và nội dung đã giải mã thay vì chỉ bộ nhớ hoặc ảnh chụp màn hình.
Bảo mật và Quan sát cho Brotli
Brotli tham gia vào một đường dẫn yêu cầu có thể vượt qua các trình duyệt, cổng, bộ nhớ đệm và máy chủ gốc. Mỗi lần nhảy nên chỉ chấp nhận các giá trị mà nó hiểu, bảo tồn các trường cần phải sống sót, và tránh sao chép thông tin xác thực hoặc dữ liệu cá nhân vào nhật ký. Cú pháp giao thức không phải là ủy quyền.
Các hồ sơ hoạt động nên ghi lại URL đã yêu cầu, URL cuối cùng, trạng thái, loại đại diện, tên trường liên quan, và một dấu hiệu nội dung có giới hạn. Toàn bộ nội dung và giá trị thông tin xác thực hiếm khi cần thiết cho chẩn đoán định kỳ và có thể tạo ra rủi ro lưu trữ không cần thiết.
Hành vi của trình duyệt và hành vi HTTP trực tiếp là các bề mặt kiểm tra khác nhau. CORS, lưu trữ cookie, giải nén tự động và xử lý chuyển hướng có thể được thực hiện bởi trình duyệt hoặc thư viện trước khi mã ứng dụng thấy kết quả. Ghi lại khách hàng và các mặc định của nó khi so sánh các bản chụp.
Các tiêu chuẩn định nghĩa Brotli
thông số kỹ thuật dữ liệu nén Brotli định nghĩa định dạng không mất mát và bộ giải mã. Nguồn chính này sửa chữa từ vựng và ranh giới được sử dụng trong bài viết này, trong khi hành vi triển khai vẫn cần được quan sát trong khách hàng đã chọn và triển khai.
Ngữ nghĩa mã hóa nội dung HTTP định nghĩa mã hóa đại diện và đàm phán. Nguồn chính này sửa chữa từ vựng và ranh giới được sử dụng trong bài viết này, trong khi hành vi triển khai vẫn cần được quan sát trong khách hàng đã chọn và triển khai.
Tham khảo Content-Encoding của MDN ghi tài liệu token br trong các phản hồi HTTP. Nguồn chính này sửa chữa từ vựng và ranh giới được sử dụng trong bài viết này, trong khi hành vi triển khai vẫn cần được quan sát trong khách hàng đã chọn và triển khai.
triển khai Brotli chính thức cung cấp mã nguồn bộ mã hóa và bộ giải mã. Nguồn chính này sửa chữa từ vựng và ranh giới được sử dụng trong bài viết này, trong khi hành vi triển khai vẫn cần được quan sát trong khách hàng đã chọn và triển khai.
Quy tắc Triển khai Brotli
Sử dụng Brotli như một mã hóa đại diện đã thỏa thuận, giữ các phương án fallback gzip hoặc identity, và chọn công việc bộ mã hóa dựa trên kết quả đo được từ đầu đến cuối thay vì tệp đơn lẻ nhỏ nhất.
Đặt quy tắc đó vào một bài kiểm tra chấp nhận. Nêu rõ bên nào gửi tín hiệu, bên nào giải thích nó, bên trung gian nào có thể thay đổi đường đi, và dấu hiệu nội dung nào chứng minh thành công. Điều này làm cho Brotli trở thành một phần của hệ thống có thể quan sát được thay vì chỉ là một nhãn dán sau một thất bại.
Sẵn sàng xác thực một phản hồi web công cộng?
Sử dụng Scrapeless Universal Scraping API để thu hồi nội dung công cộng đã được phê duyệt và kiểm tra hợp đồng đại diện được mô tả trong hướng dẫn này.
Đăng ký ngay hôm nay và nhận $5 tín dụng miễn phí — không yêu cầu thẻ tín dụng.
Yêu cầu tín dụng $5 của bạn →Câu hỏi thường gặp
Nén Brotli có mất mát không?
Có. Giải mã Brotli tái tạo lại các byte đầu vào ban đầu một cách chính xác khi luồng là hợp lệ.
Content-Encoding: br có nghĩa là gì?
Nó có nghĩa là các byte đại diện HTTP đã được mã hóa bằng Brotli. Người nhận giải mã br trước và sau đó giải thích loại phương tiện gốc được chỉ định bởi Content-Type.
Brotli có luôn luôn tốt hơn gzip không?
Không. Brotli có thể tạo ra các đại diện văn bản web nhỏ hơn, nhưng khả năng tương thích, nỗ lực bộ mã hóa, độ trễ, khả năng của máy chủ và hình dạng nội dung xác định lựa chọn triển khai tốt hơn.
Brotli có nên được tạo ra vào thời điểm xây dựng không?
Tiền nén trong thời gian xây dựng là một lựa chọn tốt cho các tài sản tĩnh ổn định vì nó giảm bớt công việc bộ mã hóa từ các yêu cầu. Nội dung động có thể vẫn được mã hóa trong thời gian chạy với các cài đặt đã đo lường.
Tại sao một phản hồi Brotli có thể không thành công trong một trình quét?
Khách hàng có thể không quảng cáo hoặc giải mã br, hoặc nó có thể cố gắng phân tích các byte đã nén như văn bản. Kiểm tra Accept-Encoding, Content-Encoding, hành vi giải mã tự động và dấu hiệu nội dung đã giải mã.