Nhật ký công việc cho nhiệm vụ "Sửa lỗi giải mã URL trong haih-agent"
Làm rõ về việc giải mã URI
Sau khi kiểm tra, hóa ra decodeURI(asPath) không giải quyết được tất cả các trường hợp cần thiết.
Ví dụ cụ thể:
/projects/%40prisma-cms/sendmail
được kỳ vọng là:
/projects/@prisma-cms/sendmail
Nhưng decodeURI() lại giữ nguyên %40, bởi vì @ thuộc về các ký tự URI được bảo lưu và toàn bộ URI không được giải mã hoàn toàn.
Đối với URI của các thực thể, việc xử lý đường dẫn theo từng phân đoạn (segment) sẽ chính xác hơn:
- Đầu tiên, tách pathname theo
/, giữ nguyên cấu trúc định tuyến. - Cho từng phân đoạn đi qua
decodeURIComponent()một cách riêng biệt. - Ráp lại đường dẫn.
Bằng cách này, chúng ta nhận được kết quả giải mã mong muốn %40 -> @, mà không gặp rủi ro là một ký tự %2F được mã hóa bên trong một slug đơn lẻ sẽ sớm biến thành dấu / cấu trúc và làm thay đổi số lượng phân đoạn tuyến đường.
Nói cách khác, logic đích phải nhận biết phân đoạn (segment-aware), ví dụ về mặt khái niệm:
const uri = pathname
.split('/')
.map(segment => decodeURIComponent(segment))
.join('/')
Điều này cũng tương xứng với cách triển khai hiện tại của slugifyUri(), vốn đã hoạt động theo từng phân đoạn.
decodeURI(asPath) hiện tại có thể được coi là một bản sửa lỗi tạm thời: nó giải quyết các trường hợp như %22, nhưng không xử lý %40 và các ký tự được bảo lưu khác nếu chúng là một phần của slug/URI thực thể.
Lỗi URIError riêng biệt không được xem xét ở đây như một vấn đề của nhiệm vụ này: các lỗi kỹ thuật liên quan đến URL bị lỗi định dạng (malformed URL) phải được xử lý riêng.
Nhiệm vụ: Sửa lỗi giải mã URL trong haih-agent
Thêm tính năng giải mã URL/route params chính xác trong haih-agent để các ký tự đặc biệt được mã hóa phần trăm (percent-encoded) không dẫn đến lỗi 404 giả.