Bạn đã bao giờ truy cập một trang web và đột nhiên bị chặn lại bởi một thông báo lỗi khó hiểu mang tên “406 Not Acceptable“? Đây là một trải nghiệm gây khó chịu, khiến bạn không thể xem được nội dung mình mong muốn. Lỗi HTTP 406 Not Acceptable thường xuất hiện một cách bất ngờ, làm gián đoạn quá trình giao tiếp giữa trình duyệt của bạn và máy chủ của website. Vấn đề này là một lỗi phổ biến, chủ yếu liên quan đến sự không tương thích trong cấu hình header Accept giữa yêu cầu của trình duyệt và khả năng phản hồi của server. Bài viết này sẽ đi sâu vào việc giải thích chi tiết lỗi 406 là gì, nguyên nhân sâu xa đằng sau nó, cách kiểm tra chính xác và cung cấp các phương pháp xử lý hiệu quả để website của bạn luôn hoạt động trơn tru.
Lỗi 406 HTTP Not Acceptable là gì?
Lỗi 406 Not Acceptable là một mã trạng thái HTTP, cho biết rằng máy chủ không thể tạo ra một phản hồi phù hợp với danh sách các giá trị được định nghĩa trong header Accept của yêu cầu từ phía client (trình duyệt). Nói một cách đơn giản, trình duyệt của bạn đã yêu cầu nội dung ở một định dạng cụ thể, nhưng máy chủ lại không thể hoặc không được phép cung cấp nội dung theo định dạng đó.
Định nghĩa lỗi 406
Mã trạng thái HTTP 406 thuộc nhóm mã lỗi 4xx, ám chỉ các lỗi xuất phát từ phía client. Tuy nhiên, trong thực tế, lỗi 406 thường do cấu hình sai trên máy chủ gây ra, khiến nó không thể đáp ứng một yêu cầu hợp lệ. Khi client gửi một yêu cầu đến server, nó sẽ đính kèm các “header” để cung cấp thêm thông tin, trong đó có header Accept. Header này liệt kê các kiểu nội dung (MIME type) mà client có thể hiểu được, ví dụ như text/html, application/json, hoặc image/jpeg. Server sẽ xem xét danh sách này và chọn một định dạng phù hợp để trả về. Nếu server không thể tạo ra nội dung ở bất kỳ định dạng nào được yêu cầu, nó sẽ trả về lỗi 406.
Cách hoạt động của header Accept trong HTTP

Header Accept đóng vai trò như một người phiên dịch trong cuộc giao tiếp giữa trình duyệt và máy chủ. Nó cho server biết “ngôn ngữ” hoặc “định dạng” mà trình duyệt có thể hiểu. Ví dụ, khi bạn truy cập một trang web, trình duyệt thường gửi header Accept với nhiều giá trị như: Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8.
Điều này có nghĩa là trình duyệt ưu tiên nhận nội dung dưới dạng HTML, nhưng cũng có thể chấp nhận XML hoặc các định dạng hình ảnh khác. Server nhận được yêu cầu này sẽ cố gắng tạo ra phản hồi khớp với một trong các lựa chọn đó. Lỗi 406 xảy ra khi có sự “bất đồng ngôn ngữ” nghiêm trọng: server xem xét toàn bộ danh sách định dạng mà trình duyệt yêu cầu nhưng không tìm thấy bất kỳ định dạng nào mà nó có thể cung cấp. Tương tác này thất bại, và server buộc phải thông báo rằng yêu cầu “không thể chấp nhận được”. Tìm hiểu thêm về web server là gì để hiểu vai trò quan trọng trong xử lý các lỗi HTTP như này.
Nguyên nhân gây ra lỗi 406 trên website
Lỗi 406 Not Acceptable không tự nhiên xuất hiện. Nó là kết quả của một sự không tương thích cụ thể giữa yêu cầu của client và cấu hình của server. Hiểu rõ các nguyên nhân cốt lõi sẽ giúp bạn chẩn đoán và khắc phục vấn đề nhanh chóng hơn.
Header Accept không tương thích với nội dung trả về

Đây là nguyên nhân trực tiếp và phổ biến nhất. Máy chủ không thể cung cấp một phiên bản của tài nguyên được yêu cầu theo định dạng mà trình duyệt đã chỉ định trong header Accept. Hãy tưởng tượng bạn yêu cầu một tài liệu dưới dạng file PDF (application/pdf), nhưng máy chủ chỉ có phiên bản Word (application/msword) của tài liệu đó. Vì không thể đáp ứng chính xác yêu cầu, máy chủ sẽ trả về lỗi 406.
Tình huống này thường xảy ra với các API (Giao diện lập trình ứng dụng). Ví dụ, một API có thể được thiết kế để chỉ trả về dữ liệu dưới định dạng JSON (application/json). Nếu một ứng dụng client gửi yêu cầu với header Accept: application/xml, server sẽ từ chối yêu cầu vì nó không thể tạo ra phản hồi XML, dẫn đến lỗi 406.
Cấu hình sai trên server hoặc ứng dụng web
Ngoài sự không tương thích về định dạng, các lỗi cấu hình trên máy chủ hoặc trong mã nguồn ứng dụng cũng là một thủ phạm phổ biến.
- Lỗi kiểm soát nội dung từ server: Một số máy chủ web được cấu hình quá chặt chẽ về các loại nội dung được phép trả về. Các quy tắc bảo mật hoặc thiết lập giới hạn có thể ngăn cản server gửi đi các định dạng nội dung hợp lệ.
- mod_security: Đây là một module tường lửa ứng dụng web (WAF) cho máy chủ Apache. Đôi khi, các quy tắc của
mod_securitycó thể quá nghiêm ngặt và xác định nhầm một yêu cầu hợp lệ là độc hại. Khi một quy tắc bị kích hoạt, nó có thể chặn yêu cầu và trả về lỗi 406. Đây là một trong những nguyên nhân hàng đầu gây ra lỗi này trên các môi trường hosting chia sẻ. - mod_rewrite: Các quy tắc viết lại URL trong file
.htaccessnếu được cấu hình sai cũng có thể dẫn đến lỗi 406, đặc biệt khi chúng can thiệp vào cách máy chủ xử lý các loại nội dung. - API hoặc mã nguồn ứng dụng: Lỗi logic trong mã nguồn của ứng dụng web (viết bằng PHP, Node.js, Python,…) có thể khiến nó không xử lý đúng header
Accept, dẫn đến việc từ chối các yêu cầu hợp lệ.
Cách nhận biết và kiểm tra lỗi 406
Việc xác định lỗi 406 là bước đầu tiên để khắc phục nó. May mắn là có nhiều dấu hiệu và công cụ giúp bạn chẩn đoán vấn đề một cách chính xác.
Dấu hiệu nhận biết lỗi 406 trên trình duyệt và server

Dấu hiệu rõ ràng nhất đối với người dùng cuối là một trang lỗi hiển thị trực tiếp trên trình duyệt. Thông báo này có thể khác nhau đôi chút tùy theo server và trình duyệt, nhưng thường chứa các cụm từ như:
- “406 Not Acceptable”
- “HTTP 406”
- “The requested resource is only capable of generating content not acceptable according to the Accept headers sent in the request.”
Đối với các nhà phát triển web, công cụ Developer Tools (nhấn F12 trên hầu hết các trình duyệt) là một người bạn đồng hành không thể thiếu. Bằng cách mở tab “Network” (Mạng), sau đó tải lại trang bị lỗi, bạn có thể thấy yêu cầu mạng đã thất bại. Nhấp vào yêu cầu đó, bạn sẽ thấy trạng thái “Status” là 406. Bạn cũng có thể kiểm tra các tab “Headers” để xem chính xác header Accept nào đã được gửi đi và header phản hồi từ server.
Phương pháp sử dụng công cụ kiểm tra lỗi
Để đi sâu hơn vào việc chẩn đoán, bạn có thể sử dụng các công cụ chuyên dụng để mô phỏng và phân tích các yêu cầu HTTP.
- Sử dụng cURL hoặc Postman: Đây là những công cụ mạnh mẽ cho phép bạn gửi các yêu cầu HTTP tùy chỉnh. Với
cURL, bạn có thể thực hiện một lệnh đơn giản trong terminal để kiểm tra phản hồi của server. Ví dụ, để xem header phản hồi, bạn có thể dùng lệnh:curl -I https://yourwebsite.com. Để kiểm tra với một headerAcceptcụ thể, bạn có thể dùng:curl -H "Accept: application/json" https://yourwebsite.com. Postman cung cấp một giao diện đồ họa thân thiện hơn để thực hiện các tác vụ tương tự. - Kiểm tra log server: Đây là phương pháp chẩn đoán hiệu quả nhất. Các file log của máy chủ web (như Apache
error_loghoặc Nginxerror.log) thường ghi lại thông tin chi tiết về lý do tại sao một yêu cầu bị từ chối. Nếu lỗi 406 là domod_security, log sẽ cho bạn biết chính xác quy tắc nào đã được kích hoạt. Thông tin này cực kỳ giá trị để xác định nguyên nhân gốc rễ và đưa ra giải pháp phù hợp. Nếu bạn muốn tìm hiểu sâu hơn về Nginx là gì hoặc IIS là gì, hãy tham khảo các bài viết liên quan để hiểu về các nền tảng server phổ biến này.
Cách xử lý và khắc phục lỗi 406 hiệu quả
Sau khi đã xác định được nguyên nhân, bước tiếp theo là áp dụng các giải pháp phù hợp. Việc khắc phục có thể được thực hiện ở cả phía client và phía server, tùy thuộc vào nguồn gốc của vấn đề.
Điều chỉnh header Accept trên client

Phương pháp này chủ yếu dành cho các nhà phát triển đang xây dựng một ứng dụng (client) giao tiếp với một API hoặc dịch vụ web. Nếu bạn đang kiểm soát mã nguồn của client, hãy đảm bảo rằng nó gửi đi header Accept tương thích với các định dạng mà server có thể cung cấp.
Ví dụ, nếu tài liệu của API chỉ rõ rằng nó chỉ trả về dữ liệu JSON, bạn phải chắc chắn rằng ứng dụng của mình gửi yêu cầu với header Accept: application/json. Sửa đổi này trong mã nguồn của client sẽ giải quyết ngay lập tức sự không tương thích và loại bỏ lỗi 406. Tuy nhiên, đối với người dùng cuối hoặc quản trị viên website, giải pháp thường nằm ở phía server.
Cấu hình lại server và mã nguồn
Đây là nơi hầu hết các quản trị viên website cần tập trung để sửa lỗi 406.
- Kiểm tra và sửa cấu hình web server:
- Đối với lỗi do mod_security: Đây là nguyên nhân phổ biến nhất. Sau khi xác định quy tắc gây ra lỗi từ log server, bạn có thể vô hiệu hóa nó. Bạn có thể làm điều này bằng cách thêm một đoạn mã vào file
.htaccesscủa mình, ví dụ:<IfModule mod_security.c> SecRuleRemoveById RULE_ID </IfModule>, trong đóRULE_IDlà mã nhận dạng của quy tắc. Nếu bạn không quen với việc này, hãy liên hệ với nhà cung cấp dịch vụ hosting của bạn, như AZWEB, để được hỗ trợ. - Kiểm tra file
.htaccess: Xem lại các quy tắcmod_rewritehoặc các chỉ thị khác trong file.htaccessđể đảm bảo chúng không can thiệp sai cách vào việc xử lý kiểu nội dung.
- Đối với lỗi do mod_security: Đây là nguyên nhân phổ biến nhất. Sau khi xác định quy tắc gây ra lỗi từ log server, bạn có thể vô hiệu hóa nó. Bạn có thể làm điều này bằng cách thêm một đoạn mã vào file
- Sửa lỗi trong ứng dụng web hoặc API: Nếu nguyên nhân nằm ở mã nguồn, nhà phát triển cần phải xem lại logic xử lý yêu cầu. Cần đảm bảo rằng ứng dụng có thể:
- Nhận diện và xử lý chính xác các header
Acceptkhác nhau. - Cung cấp một định dạng nội dung mặc định (fallback) như
text/htmlhoặcapplication/jsonnếu không có định dạng nào trong yêu cầu của client được hỗ trợ. - Đối với các hệ thống quản trị nội dung như WordPress, hãy thử tạm thời vô hiệu hóa các plugin bảo mật hoặc plugin caching để xem liệu chúng có phải là nguyên nhân gây ra xung đột hay không.
- Nhận diện và xử lý chính xác các header
Ảnh hưởng của lỗi 406 đến trải nghiệm người dùng và SEO
Lỗi 406 không chỉ là một vấn đề kỹ thuật. Nếu không được khắc phục kịp thời, nó có thể gây ra những hậu quả tiêu cực và lâu dài cho website của bạn, ảnh hưởng đến cả người dùng và thứ hạng trên các công cụ tìm kiếm.
Tác động tiêu cực đến trải nghiệm truy cập trang

Đối với người dùng, lỗi 406 là một bức tường chắn. Khi họ nhấp vào một liên kết và gặp phải trang lỗi này, họ không thể truy cập nội dung mà họ đang tìm kiếm. Điều này ngay lập tức tạo ra một trải nghiệm tồi tệ và gây thất vọng.
Kết quả là tỷ lệ thoát trang (bounce rate) sẽ tăng vọt, vì người dùng sẽ nhanh chóng rời đi để tìm kiếm thông tin ở một nơi khác. Sự thất vọng này có thể làm tổn hại đến uy tín thương hiệu của bạn, khiến khách truy cập ngần ngại quay lại trong tương lai. Một website hoạt động không ổn định sẽ làm mất lòng tin của người dùng, ảnh hưởng trực tiếp đến tỷ lệ chuyển đổi và các mục tiêu kinh doanh.
Ảnh hưởng đến thứ hạng SEO và index trang
Các công cụ tìm kiếm như Google sử dụng các chương trình tự động gọi là “bọ tìm kiếm” (crawlers) để thu thập dữ liệu và lập chỉ mục (index) cho các trang web. Các con bọ này hoạt động tương tự như một trình duyệt, chúng gửi yêu cầu để truy cập nội dung trang.
Khi bọ của Google liên tục gặp phải lỗi 406 khi cố gắng truy cập một trang, nó sẽ không thể đọc được nội dung của trang đó. Nếu tình trạng này kéo dài, Google sẽ coi trang đó là không truy cập được và có thể xóa nó khỏi chỉ mục tìm kiếm. Việc này đồng nghĩa với việc trang của bạn sẽ biến mất khỏi kết quả tìm kiếm, làm mất đi toàn bộ lưu lượng truy cập không phải trả tiền (organic traffic). Lỗi HTTP là một tín hiệu tiêu cực cho thấy website không được bảo trì tốt, điều này có thể ảnh hưởng xấu đến thứ hạng tổng thể của toàn bộ trang web.
Các lưu ý quan trọng khi cấu hình header Accept trên server
Việc cấu hình server để xử lý header Accept một cách linh hoạt và thông minh là chìa khóa để tránh lỗi 406 và đảm bảo khả năng tương thích cao. Dưới đây là những lưu ý quan trọng bạn cần ghi nhớ.
Kiểm soát chặt chẽ các kiểu dữ liệu trả về

Mặc dù linh hoạt là quan trọng, bạn vẫn cần kiểm soát các loại nội dung mà server của mình cung cấp. Hãy đảm bảo rằng server chỉ trả về các định dạng (MIME types) mà ứng dụng của bạn thực sự hỗ trợ. Ví dụ, nếu website của bạn chỉ hiển thị nội dung HTML, hãy cấu hình server để ưu tiên và xử lý chính xác các yêu cầu text/html. Đối với API, hãy định nghĩa rõ ràng các kiểu dữ liệu được hỗ trợ, như application/json hoặc application/xml, và đảm bảo server tuân thủ các định nghĩa đó. Việc này giúp ngăn chặn các phản hồi không mong muốn và tăng cường tính bảo mật.
Hạn chế thiết lập quá nghiêm ngặt gây lỗi 406 không cần thiết
Một trong những sai lầm phổ biến là cấu hình server quá khắt khe. Nếu server chỉ chấp nhận một hoặc hai kiểu nội dung rất cụ thể, nó có thể từ chối các yêu cầu hợp lệ từ nhiều loại trình duyệt hoặc client khác nhau. Thay vì từ chối hoàn toàn, hãy xem xét việc triển khai một cơ chế dự phòng (fallback). Ví dụ, nếu server không thể cung cấp định dạng được yêu cầu, nó có thể mặc định trả về phiên bản HTML hoặc JSON của tài nguyên, thay vì trả về lỗi 406. Điều này giúp tăng khả năng tương thích và cải thiện trải nghiệm người dùng.
Đảm bảo header Accept được xử lý linh hoạt với đa dạng trình duyệt
Các trình duyệt và client khác nhau có thể gửi các header Accept với thứ tự ưu tiên và giá trị khác nhau. Server của bạn nên được lập trình để phân tích cú pháp header này một cách linh hoạt, tuân thủ các tiêu chuẩn HTTP về trọng số chất lượng (quality values, ví dụ q=0.9). Bằng cách này, server có thể đưa ra quyết định thông minh nhất về định dạng nào cần trả về, dựa trên sở thích của client và khả năng của chính nó. Việc xử lý linh hoạt giúp đảm bảo website của bạn hoạt động tốt trên nhiều nền tảng, từ máy tính để bàn đến thiết bị di động. Tìm hiểu thêm về các loại server và công nghệ phần cứng server như VPS là gì, RAM ECC, Chip Xeon là gì, và NVMe là gì để nâng cao hiệu suất và độ ổn định server.
Các vấn đề phổ biến và hướng xử lý
Trong quá trình khắc phục lỗi 406, bạn có thể gặp một số tình huống cụ thể. Dưới đây là hai vấn đề phổ biến và cách giải quyết chúng một cách hiệu quả.
Khi header Accept rất giới hạn khiến server không đáp ứng được

Tình huống này thường xảy ra khi một ứng dụng client tùy chỉnh (ví dụ: một ứng dụng di động hoặc một script tự động) gửi một yêu cầu với header Accept rất hẹp, chỉ chấp nhận một định dạng duy nhất mà server không hỗ trợ. Ví dụ, client yêu cầu application/vnd.custom-type nhưng server chỉ có thể cung cấp application/json.
Giải pháp:
- Phía Client: Nếu có thể, hãy sửa đổi ứng dụng client để nó gửi một header
Acceptlinh hoạt hơn, bao gồm các định dạng phổ biến nhưapplication/jsonhoặc*/*(chấp nhận mọi loại). - Phía Server: Nếu không thể thay đổi client, bạn cần cập nhật ứng dụng phía server để có thể tạo ra phản hồi theo định dạng được yêu cầu. Một giải pháp khác là cấu hình server để bỏ qua header
Accepttrong trường hợp này và trả về một định dạng mặc định. Tuy nhiên, cách làm này cần được cân nhắc kỹ lưỡng vì nó có thể vi phạm nguyên tắc của giao thức HTTP.
Lỗi do mod_security hoặc plugin bảo mật chặn response
Đây là nguyên nhân phổ biến nhất, đặc biệt trên các nền tảng hosting chia sẻ. Tường lửa ứng dụng web (WAF) như mod_security hoặc các plugin bảo mật của WordPress có thể xác định sai một yêu cầu hợp lệ là một cuộc tấn công và chặn nó, trả về lỗi 406.
Giải pháp:
- Xác nhận nguyên nhân: Kiểm tra file log lỗi của server. Nếu bạn thấy các mục ghi có chứa “ModSecurity”, bạn đã tìm ra thủ phạm. Log sẽ chỉ ra ID của quy tắc đã chặn yêu cầu.
- Vô hiệu hóa quy tắc cụ thể: Bạn có thể thêm chỉ thị vào file
.htaccessđể tắt quy tắc đang gây sự cố. Ví dụ:SecRuleRemoveById 942440. Hãy chỉ vô hiệu hóa quy tắc cụ thể gây ra vấn đề, thay vì tắt toàn bộmod_security, để không làm ảnh hưởng đến an ninh của website. - Liên hệ nhà cung cấp hosting: Nếu bạn không tự tin chỉnh sửa các file cấu hình, cách tốt nhất là tạo một yêu cầu hỗ trợ gửi đến nhà cung cấp hosting của bạn. Cung cấp cho họ URL gây lỗi và thời gian xảy ra lỗi. Đội ngũ kỹ thuật của họ, như tại AZWEB, có thể nhanh chóng kiểm tra log và xử lý vấn đề giúp bạn.
Những lưu ý và thực hành tốt trong xử lý lỗi 406
Để quản lý và ngăn ngừa lỗi 406 một cách hiệu quả, việc tuân thủ các thực hành tốt nhất là rất quan trọng. Điều này không chỉ giúp bạn giải quyết các vấn đề hiện tại mà còn giúp xây dựng một website bền vững và ít lỗi hơn trong tương lai.

- Kiểm tra kỹ log và response header khi phát hiện lỗi: Luôn bắt đầu quá trình gỡ lỗi bằng cách xem xét log của máy chủ. Đây là nguồn thông tin đáng tin cậy nhất để xác định nguyên nhân gốc rễ, đặc biệt là các vấn đề liên quan đến
mod_security. Đồng thời, sử dụng công cụ Developer Tools để kiểm tra header phản hồi và yêu cầu. - Không loại bỏ header Accept nếu không cần thiết: Một số giải pháp tạm thời trên mạng đề nghị loại bỏ hoàn toàn header
Acceptkhỏi yêu cầu. Đây không phải là một cách làm tốt vì header này là một phần quan trọng của cơ chế đàm phán nội dung (content negotiation) trong HTTP. Thay vào đó, hãy tập trung vào việc cấu hình server để xử lý nó một cách chính xác. - Luôn thử nghiệm đa trình duyệt và đa thiết bị: Sau khi áp dụng một bản sửa lỗi, hãy kiểm tra lại website của bạn trên nhiều trình duyệt khác nhau (Chrome, Firefox, Safari) và trên các thiết bị khác nhau (máy tính, điện thoại, máy tính bảng). Điều này đảm bảo rằng giải pháp của bạn hoạt động ổn định cho tất cả người dùng.
- Ưu tiên cấu hình server linh hoạt, tương thích tốt với các client phổ biến: Thiết kế ứng dụng và cấu hình máy chủ của bạn với tư duy linh hoạt. Thay vì chỉ hỗ trợ một định dạng duy nhất, hãy cố gắng cung cấp các định dạng phổ biến và có một cơ chế dự phòng thông minh để xử lý các yêu cầu không mong muốn một cách nhẹ nhàng thay vì trả về lỗi.
Kết luận
Lỗi 406 Not Acceptable, dù ban đầu có vẻ phức tạp, thực chất là một vấn đề có thể giải quyết được khi bạn hiểu rõ bản chất của nó. Đây là một lỗi phát sinh từ sự không tương thích giữa yêu cầu định dạng nội dung của trình duyệt (thông qua header Accept) và khả năng đáp ứng của máy chủ. Nguyên nhân thường xuất phát từ cấu hình sai trên server, đặc biệt là các quy tắc bảo mật như mod_security, hoặc do mã nguồn ứng dụng xử lý yêu cầu không linh hoạt. Lỗi này ảnh hưởng nghiêm trọng đến trải nghiệm người dùng bằng cách chặn truy cập nội dung và tác động tiêu cực đến SEO khi ngăn cản các công cụ tìm kiếm lập chỉ mục trang web.
Để xử lý triệt để, chúng tôi khuyến nghị bạn nên bắt đầu bằng việc kiểm tra kỹ lưỡng log server và các header HTTP. Sau đó, hãy điều chỉnh cấu hình server hoặc mã nguồn ứng dụng để đảm bảo chúng có thể xử lý các yêu cầu một cách linh hoạt. Đừng ngần ngại vô hiệu hóa các quy tắc bảo mật cụ thể nếu chúng được xác định là nguyên nhân gây ra lỗi.
Hãy thực hiện các bước kiểm tra và sửa lỗi được nêu trong bài viết ngay khi phát hiện vấn đề để đảm bảo website của bạn luôn hoạt động ổn định. Một trang web không có lỗi không chỉ thân thiện hơn với người dùng mà còn được các công cụ tìm kiếm đánh giá cao. Nếu bạn cảm thấy quá trình này phức tạp, các dịch vụ Hosting chất lượng cao và hỗ trợ kỹ thuật chuyên nghiệp từ AZWEB luôn sẵn sàng giúp bạn giải quyết mọi vấn đề.