Mã Trạng Thái 506: Variant Also Negotiates Là Gì? Vòng Lặp Định Dạng Vô Hạn

INEZA Felin-Michel

INEZA Felin-Michel

29 tháng 10 2025

Mã Trạng Thái 506: Variant Also Negotiates Là Gì? Vòng Lặp Định Dạng Vô Hạn

Hãy tưởng tượng bạn bước vào một nhà hàng mà thực đơn quá khó hiểu đến nỗi người phục vụ phải tham khảo một thực đơn khác chỉ để hiểu thực đơn đầu tiên, và thực đơn thứ hai lại yêu cầu kiểm tra một thực đơn thứ ba, tạo ra một vòng lặp kiểm tra thực đơn không ngừng. Cuối cùng, người phục vụ bỏ cuộc và nói với bạn, "Tôi bế tắc rồi! Tôi thậm chí không thể tìm ra cách nói cho bạn biết chúng tôi phục vụ món gì."

Đây về cơ bản là những gì xảy ra với một trong những mã trạng thái HTTP khó hiểu và mang tính lý thuyết nhất: 506 Variant Also Negotiates.

Mã này hiếm đến mức hầu hết các nhà phát triển sẽ không bao giờ gặp phải nó trong suốt sự nghiệp của mình. Đây là lỗi cấu hình máy chủ xảy ra sâu trong hệ thống đàm phán nội dung của máy chủ web, tạo ra một nghịch lý logic mà máy chủ không thể giải quyết.

Nếu bạn bị mê hoặc bởi những ngóc ngách sâu thẳm, khó hiểu nhất của các giao thức web, hoặc nếu bạn là quản trị viên hệ thống làm việc với các cấu hình máy chủ web nâng cao, câu chuyện về 506 là một cuộc tìm hiểu kỹ thuật chuyên sâu hấp dẫn.

💡
Nếu bạn đang xây dựng các API và dịch vụ web thực tế (điều thực sự quan trọng hàng ngày), bạn cần một công cụ xử lý các mã trạng thái mà bạn thực sự sẽ gặp phải. Tải Apidog miễn phí; đây là một nền tảng API tất cả trong một giúp bạn kiểm tra và gỡ lỗi các mã trạng thái phổ biến thực sự ảnh hưởng đến ứng dụng của bạn.
button

Bây giờ, hãy cùng làm sáng tỏ bí ẩn về mã trạng thái HTTP 506.

Thiết lập bối cảnh: Đàm phán nội dung và Mã hóa nội dung trong suốt

Để hiểu 506, trước tiên chúng ta cần hiểu hai tính năng HTTP nâng cao: đàm phán nội dungmã hóa nội dung trong suốt.

Đàm phán nội dung: Nói ngôn ngữ của khách hàng

Web phục vụ đối tượng toàn cầu với các sở thích khác nhau. Đàm phán nội dung là quá trình mà máy khách và máy chủ thống nhất về cách biểu diễn tốt nhất của một tài nguyên. Máy khách nêu rõ sở thích của mình bằng cách sử dụng các tiêu đề như:

Máy chủ sau đó chọn biến thể tốt nhất và phục vụ nó. Ví dụ, nếu bạn có một tài nguyên có sẵn bằng cả tiếng Anh và tiếng Pháp, máy chủ sẽ sử dụng đàm phán nội dung để quyết định gửi phiên bản nào.

Mã hóa nội dung trong suốt

Đây là lúc mọi thứ trở nên thú vị. RFC 2295 đã giới thiệu khái niệm "đàm phán nội dung trong suốt", cho phép các cơ chế đàm phán tinh vi hơn. Nó giới thiệu khái niệm về "biến thể" – các cách biểu diễn khác nhau của cùng một tài nguyên.

Một máy chủ có thể trả về danh sách các biến thể có sẵn, và một máy khách thông minh có thể chọn biến thể tốt nhất. Lỗi 506 được định nghĩa cụ thể trong ngữ cảnh RFC 2295 này.

HTTP 506 Variant Also Negotiates thực sự có nghĩa là gì?

Mã trạng thái 506 Variant Also Negotiates chỉ ra rằng máy chủ đã gặp lỗi cấu hình nội bộ: tài nguyên biến thể được chọn bản thân nó được cấu hình để tham gia vào đàm phán nội dung trong suốt, do đó không phải là một điểm cuối thích hợp trong quá trình đàm phán.

Nói một cách đơn giản hơn: Máy chủ đã cố gắng tìm đúng phiên bản của một tệp để gửi cho bạn, nhưng bản thân tệp đó lại có nhiều phiên bản, tạo ra một vòng lặp đàm phán không thể giải quyết.

Định nghĩa chính thức của RFC 2295 nêu rõ:

Mã trạng thái 506 chỉ ra rằng máy chủ có lỗi cấu hình nội bộ: tài nguyên biến thể được chọn được cấu hình để tự tham gia vào đàm phán nội dung trong suốt, và do đó không phải là một điểm cuối thích hợp trong quá trình đàm phán.

Một phản hồi 506 mang tính lý thuyết có thể trông như thế này:

HTTP/1.1 506 Variant Also NegotiatesContent-Type: text/html
<html><head><title>506 Variant Also Negotiates</title></head><body><center><h1>506 Variant Also Negotiates</h1></center><hr><p>The server encountered an internal configuration error while trying to negotiate the best representation of the requested resource.</p></body></html>

Quá trình này, được gọi là đàm phán nội dung, cho phép máy chủ chọn biến thể tốt nhất dựa trên các tiêu đề như Accept-Language, Accept-EncodingAccept-Type.

Tuy nhiên, nếu biến thể (tài nguyên được chọn) bị cấu hình sai để thực hiện đàm phán lại, máy chủ sẽ rơi vào một vòng lặp nghịch lý. Về cơ bản:

Máy chủ nói, "Hãy đàm phán!" và biến thể trả lời, "Chắc chắn, tôi cũng có thể đàm phán!" …và chúng bị kẹt.

Đó là lúc lỗi HTTP 506 Variant Also Negotiates xuất hiện. Nó giống như hai nhà ngoại giao liên tục đàm phán với nhau thay vì ký kết thỏa thuận.

Tại sao điều này lại quan trọng trong phát triển API hiện đại

Bạn có thể nghĩ, “Được rồi, nhưng tôi đang xây dựng API, không phải các trang web đa ngôn ngữ. Tại sao phải quan tâm đến 506?”

Đây là lý do:

Tóm lại, hiểu 506 giúp bạn thiết kế các hệ thống mạnh mẽ hơn—và biến bạn thành một người khắc phục sự cố giỏi hơn.

Kịch bản vòng lặp vô hạn: Lỗi 506 xảy ra như thế nào

Hãy cùng xem qua một ví dụ cụ thể, dù rất lý thuyết, về cách lỗi này có thể xảy ra.

Thiết lập máy chủ bị cấu hình sai

Hãy tưởng tượng một trang web với hệ thống đàm phán nội dung phức tạp. Nó có một tài nguyên /document có sẵn ở nhiều định dạng:

  1. /document.html (phiên bản HTML)
  2. /document.pdf (phiên bản PDF)
  3. /document.json (phản hồi API JSON)

Máy chủ được cấu hình với "danh sách biến thể" ánh xạ /document tới ba tùy chọn này.

Cấu hình có vấn đề

Bây giờ, hãy tưởng tượng rằng quản trị viên máy chủ mắc một lỗi nghiêm trọng. Họ cấu hình biến thể JSON (/document.json) để cũng có tập hợp các biến thể riêng của nó:

Vòng lặp vô hạn

  1. Một máy khách yêu cầu /document với tiêu đề Accept: application/json.
  2. Hệ thống đàm phán nội dung của máy chủ khởi động. Nó xem danh sách biến thể cho /document và thấy rằng /document.json là phù hợp nhất.
  3. Máy chủ sau đó sẽ phục vụ /document.json. Nhưng khoan đã—máy chủ kiểm tra cấu hình cho /document.json và phát hiện ra rằng BẢN THÂN NÓ CŨNG có một danh sách biến thể!
  4. Máy chủ bây giờ cần đàm phán biến thể nào của /document.json để phục vụ. Nó lại bước vào quá trình đàm phán.
  5. Điều này tạo ra một vòng lặp logic. Máy chủ bị kẹt khi cố gắng đàm phán chính tài nguyên đàm phán.

Điểm phá vỡ

Sau khi phát hiện vòng lặp vô hạn này (hoặc đạt đến giới hạn đệ quy), máy chủ bỏ cuộc và trả về lỗi 506 Variant Also Negotiates. Về cơ bản, nó đang nói, "Tôi không thể phục vụ tài nguyên này vì tôi đã bị kẹt trong một vòng lặp vô tận khi cố gắng quyết định phiên bản nào để phục vụ."

Tại sao bạn có thể sẽ không bao giờ thấy lỗi 506

Mã trạng thái 506 có lẽ là một trong những mã trạng thái HTTP hiếm nhất mà bạn có thể gặp phải. Đây là lý do:

  1. Triển khai hạn chế: Hệ thống đàm phán nội dung trong suốt được mô tả trong RFC 2295 chưa bao giờ được triển khai rộng rãi trong các máy chủ web hoặc trình duyệt chính thống. Hầu hết các trang web đều sử dụng đàm phán nội dung đơn giản hơn nhiều.
  2. Yêu cầu cấu hình phức tạp: Để tạo ra lỗi này đòi hỏi một cấu hình máy chủ rất cụ thể, và thẳng thắn mà nói là kém. Hầu hết các quản trị viên sẽ không bao giờ thiết lập máy chủ của họ theo cách này.
  3. Các lựa chọn thay thế hiện đại: Ngày nay, đàm phán nội dung thường được xử lý đơn giản hơn nhiều thông qua các mẫu URL (/api/users.json so với /api/users.xml) hoặc thông qua việc phân tích tiêu đề Accept đơn giản mà không có danh sách biến thể phức tạp.
  4. Ngăn chặn lỗi tốt hơn: Các máy chủ web hiện đại có thể có các biện pháp bảo vệ chống lại các vòng lặp cấu hình như vậy, ngăn chặn lỗi xảy ra ngay từ đầu.

Ví dụ thực tế về lỗi 506

Hãy tưởng tượng bạn điều hành một trang web đa ngôn ngữ với mô-đun đàm phán nội dung của Apache (mod_negotiation) được bật. Bạn có các tệp như:

index.html.en
index.html.fr
index.html.de

Sau đó, do vô tình, bạn cấu hình index.html để cũng thực hiện đàm phán có thể bằng cách đặt trình xử lý hoặc chỉ thị sai trong .htaccess. Khi Apache cố gắng phục vụ tệp chính xác, nó nhận ra:

"Khoan đã… biến thể này cũng muốn đàm phán. Đó là một vòng lặp cấu hình!"

Apache sau đó sẽ báo lỗi 506 Variant Also Negotiates.

Nói một cách đơn giản hơn, máy chủ web của bạn nói, “Tôi không thể chọn một biến thể vì các biến thể của tôi quá thiếu quyết đoán.”

506 so với các lỗi máy chủ 5xx khác

Mặc dù bạn hiếm khi thấy 506, nhưng sẽ hữu ích nếu hiểu nó phù hợp như thế nào với nhóm lỗi 5xx:

506 là độc nhất vì nó mô tả một lỗi logic rất chính xác chứ không phải là một lỗi máy chủ chung.

Kiểm tra đàm phán nội dung (Không có 506) với Apidog

Mặc dù bạn có thể sẽ không cần kiểm tra 506 một cách cụ thể, nhưng kiểm tra đàm phán nội dung là một phần quan trọng trong phát triển API. Apidog là công cụ tuyệt vời cho việc này.

Với Apidog, bạn có thể:

  1. Kiểm tra các tiêu đề Accept khác nhau: Dễ dàng sửa đổi tiêu đề Accept để yêu cầu các loại nội dung khác nhau từ cùng một điểm cuối (ví dụ: application/json so với application/xml).
  2. Xác minh phản hồi Content-Type: Kiểm tra xem máy chủ có phản hồi với tiêu đề Content-Type chính xác khớp với những gì bạn đã yêu cầu hay không.
  3. Kiểm tra đàm phán ngôn ngữ: Sử dụng tiêu đề Accept-Language để kiểm tra cách API của bạn xử lý các yêu cầu ngôn ngữ khác nhau.
  4. Xác thực nén: Kiểm tra cách máy chủ của bạn xử lý các giá trị Accept-Encoding khác nhau và xác minh rằng phản hồi được nén đúng cách.
  5. Tạo các bài kiểm tra API toàn diện: Xây dựng các bộ kiểm tra để đảm bảo API của bạn xử lý đúng tất cả các kịch bản đàm phán nội dung mà bạn hỗ trợ.
button

Loại kiểm tra này đảm bảo API của bạn mạnh mẽ và có thể phục vụ đúng nội dung cho đúng máy khách mọi lúc. Chẩn đoán tự động là vô giá khi bạn đang vận hành các trang web hoặc API quốc tế có bản địa hóa.

Nếu bạn thực sự gặp lỗi 506

Với sự hiếm hoi của nó, nếu bạn thực sự gặp lỗi 506 hợp lệ, đây là ý nghĩa của nó:

Đối với người dùng cuối:

Đối với quản trị viên hệ thống/nhà phát triển:

Các phương pháp hay nhất để xử lý 506 trong môi trường sản xuất

506 và đặc tả HTTP

Một đoạn lạc đề nhỏ dành cho những người thích tìm hiểu sâu.

Trạng thái 506 Variant Also Negotiates lần đầu tiên được giới thiệu trong RFC 2295, mô tả Đàm phán nội dung trong suốt (TCN).

Đây là những gì đặc tả nói:

“Mã trạng thái này chỉ ra một lỗi cấu hình máy chủ nội bộ trong đó tài nguyên biến thể được chọn được cấu hình để tự tham gia vào đàm phán nội dung trong suốt, và do đó không phải là một điểm cuối thích hợp trong quá trình đàm phán.”

Tóm lại: đó là một cấu hình sai phía máy chủ.

Khách hàng không thể sửa lỗi này. Chỉ quản trị viên máy chủ hoặc nhà phát triển mới có thể.

Cách ngăn chặn các lỗi 506 trong tương lai

Với Apidog, bạn có thể tự động hóa các bài kiểm tra API định kỳ. Đặt các xác nhận để gắn cờ bất kỳ phản hồi nào trả về trạng thái ≥ 500, bao gồm cả 506.

Di sản của RFC 2295

RFC 2295 và mã trạng thái 506 đại diện cho một kịch bản "điều gì sẽ xảy ra nếu" thú vị cho web. Hệ thống đàm phán nội dung trong suốt được thiết kế để tạo ra một web linh hoạt hơn, tinh vi hơn, nơi máy khách và máy chủ có thể đàm phán một cách thông minh để có được cách biểu diễn nội dung tốt nhất có thể.

Tuy nhiên, trên thực tế, hệ thống này đã chứng tỏ quá phức tạp để được áp dụng rộng rãi. Web đã phát triển theo một hướng khác, với đàm phán nội dung đơn giản hơn trở thành tiêu chuẩn.

Mã trạng thái 506 vẫn tồn tại như một hiện vật lịch sử của đặc tả đầy tham vọng nhưng cuối cùng lại mang tính chuyên biệt này.

Kết luận: Một sự tò mò mang tính lý thuyết

Mã trạng thái HTTP 506 Variant Also Negotiates là một phần thú vị trong lịch sử giao thức web, đóng vai trò như một lời nhắc nhở về sự phức tạp tiềm ẩn đằng sau những gì dường như là các yêu cầu web đơn giản. Nó đại diện cho một lỗi logic cụ thể trong một hệ thống đàm phán nội dung tinh vi chưa bao giờ đạt được sự chấp nhận rộng rãi.

Đối với phát triển web thực tế, bạn sẽ dành thời gian để xử lý các mã trạng thái phổ biến hơn nhiều như 200, 404, 500503. Nhưng việc hiểu các mã như 506 mang lại cho bạn sự đánh giá sâu sắc hơn về chiều sâu và sự phức tạp của đặc tả HTTP.

Mặc dù bạn có thể sẽ không bao giờ cần xử lý lỗi 506 trong môi trường sản xuất, nhưng các khái niệm đằng sau nó – đàm phán nội dung và cấu hình máy chủ phù hợp – vẫn rất quan trọng. Và để kiểm tra đàm phán nội dung thực sự quan trọng trong web ngày nay, một công cụ như Apidog cung cấp các tính năng thực tế mà bạn cần để đảm bảo API của bạn phục vụ đúng nội dung cho đúng máy khách mọi lúc.

button

Thực hành thiết kế API trong Apidog

Khám phá cách dễ dàng hơn để xây dựng và sử dụng API