Percent-Encoding Là Gì Và Tại Sao Nó Lại Cần Thiết?
Percent-encoding là trụ cột nền tảng của hạ tầng web hiện đại, quy định cách dữ liệu được truyền tải qua internet. Về cốt lõi, internet dựa vào Định danh Tài nguyên Đồng nhất (URI) để định vị tài nguyên. Tuy nhiên, quy chuẩn URI (RFC 3986) giới hạn nghiêm ngặt các ký tự có thể sử dụng an toàn trong một URL. Các ký tự được phép, gọi là 'unreserved characters', chỉ bao gồm các chữ cái và chữ số chữ hoa/chữ thường (A-Z, a-z, 0-9), dấu gạch nối (-), dấu chấm (.), dấu gạch dưới (_) và dấu ngã (~). Mọi ký tự khác đều bị coi là 'không an toàn' hoặc 'được bảo lưu' vì chúng có ý nghĩa cấu trúc đặc biệt trong định dạng URL. Ví dụ, dấu và (&) được dùng để phân tách các tham số truy vấn, dấu bằng (=) dùng để gán giá trị, và dấu xuyết (/) định nghĩa đường dẫn thư mục. Nếu bạn cần truyền ký tự '&' thực sự dưới dạng một phần của dữ liệu chứ không phải là bộ phân tách cấu trúc, nó bắt buộc phải được percent-encode.
Khi một ký tự cần được percent-encode, trước tiên nó sẽ được chuyển đổi thành giá trị byte tương ứng theo chuẩn mã hóa ký tự UTF-8. Mỗi byte sau đó được biểu diễn bằng một số thập lục phân hai chữ số, có dấu phần trăm (%) đứng trước. Ví dụ, một ký tự khoảng trắng tương ứng với giá trị byte 32 ở dạng thập phân, hoặc 20 ở dạng thập lục phân. Do đó, khoảng trắng trở thành '%20'. Ký tự '@' trở thành '%40', và dấu phẩy (,) trở thành '%2C'. Sự chuyển đổi có hệ thống này đảm bảo rằng các máy chủ web, bộ cân bằng tải và trình duyệt có thể diễn giải đồng nhất các ranh giới của URL mà không gây ra bất kỳ sự mơ hồ hay biến dạng dữ liệu nào. Nếu không có percent-encoding, việc truyền một chuỗi truy vấn phức tạp chứa dữ liệu đầu vào tùy ý của người dùng sẽ làm hỏng cấu trúc URL, dẫn đến lỗi 400 Bad Request, liên kết hỏng, hoặc thậm chí các lỗ hổng bảo mật nghiêm trọng như HTTP Parameter Pollution.
Trong lịch sử, các hệ thống khác nhau xử lý URL encoding theo nhiều cách khác nhau, đôi khi dẫn đến những cơn ác mộng về tính tương thích. Ví dụ, dữ liệu biểu mẫu được gửi qua loại nội dung application/x-www-form-urlencoded theo truyền thống sẽ mã hóa khoảng trắng thành dấu cộng (+), trong khi RFC 3986 bắt buộc dùng '%20'. Các ngôn ngữ và framework phát triển web hiện đại thường ẩn đi các chi tiết này, nhưng việc sở hữu một công cụ thủ công để percent-encode các chuỗi mạnh mẽ, tin cậy và Miễn Phí 100% vẫn là nhu cầu thiết yếu để kiểm lỗi (debug), kiểm thử API và xây dựng các deep link phức tạp. Bằng cách hiểu rõ cơ chế hoạt động của percent-encoding, các lập trình viên có thể đảm bảo ứng dụng của họ hoạt động ổn định trước nhiều loại ký tự đầu vào, xử lý hiệu quả mọi thứ từ văn bản ASCII tiêu chuẩn đến các biểu tượng cảm xúc Unicode đa byte phức tạp.