Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [Lập trình Web & Backend] Content negotiation đầy đủ

    Content negotiation đầy đủ

    Server hỗ trợ một danh sách media type có thứ tự ưu tiên. Client gửi Accept gồm các mục (có thể kèm q, có thể wildcard */* hoặc type/*). Cần chọn media type server trả về theo quy tắc:

    1. Với mỗi media type server hỗ trợ, tìm q-value cao nhất trong các mục Accept khớp nó (khớp gồm cả wildcard). Mục q=0 nghĩa là từ chối.
    2. Chọn media type server có q-value > 0 cao nhất. Nếu hòa q-value, ưu tiên media type đứng trước trong danh sách server.
    3. Nếu không media type nào có q > 0, in 406 (Not Acceptable).

    Ví dụ

    • Server application/json text/html, Accept text/*;q=0.9, application/json;q=0.5 → server json có q=0.5, html có q=0.9 → chọn text/html
    • Định dạng đầu vào:

      Dòng 1: danh sách media type server hỗ trợ, cách bởi dấu cách. Dòng 2: header Accept (các mục cách bởi dấu phẩy).

    • Ràng buộc đầu vào:

      1 ≤ số media type server ≤ 20. q 0..1.

    • Định dạng đầu ra:

      In media type được chọn, hoặc 406.

    Ví dụ:

    Đầu vào:

    application/json text/html
    text/*;q=0.9, application/json;q=0.5
    

    Đầu ra:

    text/html

    Giải thích:

    json khớp q=0.5, html khớp text/* q=0.9; chọn html vì q cao hơn.

    Đang tải editor...