Mã Trạng Thái 416 Range Not Satisfiable Là Gì? Lỗi Vượt Quá Phạm Vi

INEZA Felin-Michel

INEZA Felin-Michel

15 tháng 10 2025

Mã Trạng Thái 416 Range Not Satisfiable Là Gì? Lỗi Vượt Quá Phạm Vi

Apidog cho doanh nghiệp

Triển khai tại chỗ

SSO & RBAC

Tuân thủ SOC 2

Khám phá Apidog Enterprise

Bạn đang cố gắng tiếp tục tải xuống một tệp lớn bị gián đoạn. Trình quản lý tải xuống của bạn biết rằng nó đã có 50 megabyte đầu tiên và khéo léo yêu cầu máy chủ "mọi thứ từ byte 50.000.000 trở đi." Nhưng thay vì nhận được dữ liệu còn lại, bạn lại gặp lỗi. Máy chủ đang báo, "Tôi không thể thực hiện yêu cầu đó vì những gì bạn đang yêu cầu nằm ngoài giới hạn của tôi."

Tình huống cụ thể này được xử lý bởi một trong những mã lỗi chính xác hơn của HTTP: 416 Range Not Satisfiable.

Mã trạng thái này là đối tác ít nổi tiếng hơn của phản hồi thành công 206 Partial Content. Trong khi 206 nói "Đây là phần bạn yêu cầu," thì 416 nói "Tôi không thể cung cấp cho bạn phần bạn yêu cầu vì phép tính của bạn sai."

Đây là điều tương đương trong thế giới kỹ thuật số với việc yêu cầu một thủ thư "trang 500-600" của một cuốn sách 400 trang. Yêu cầu hoàn toàn dễ hiểu, nhưng nó đang yêu cầu một thứ không tồn tại.

Nếu bạn làm việc với việc tải xuống tệp, phát trực tuyến video hoặc API xử lý truyền dữ liệu lớn, việc hiểu mã trạng thái 416 là chìa khóa để xây dựng các ứng dụng mạnh mẽ.

Trong bài đăng blog toàn diện này, chúng ta sẽ khám phá ý nghĩa của mã trạng thái 416 Range Not Satisfiable, các kịch bản phổ biến mà nó xuất hiện, tại sao nó quan trọng và cách cả nhà phát triển lẫn người dùng có thể xử lý hoặc ngăn chặn nó. Chúng ta cũng sẽ thảo luận về cách sử dụng các công cụ như Apidog để kiểm tra và gỡ lỗi các phản hồi HTTP liên quan đến 416 và làm cho API của bạn mạnh mẽ hơn.

💡
Nếu bạn đang xây dựng hoặc thử nghiệm các API xử lý yêu cầu nội dung một phần, bạn cần một công cụ có thể giúp bạn tạo và gỡ lỗi các yêu cầu phạm vi này. Tải xuống Apidog miễn phí; đây là một nền tảng API tất cả trong một giúp dễ dàng kiểm tra các tiêu đề Range và xác minh máy chủ của bạn xử lý cả phản hồi 206416 một cách chính xác.

button

Bây giờ, hãy cùng khám phá thế giới của các dải byte và mã trạng thái HTTP 416 Range Not Satisfiable.

Nền tảng: Yêu cầu Phạm vi HTTP

Để hiểu 416, trước tiên chúng ta cần hiểu tính năng mà nó hỗ trợ: yêu cầu phạm vi HTTP.

Yêu cầu phạm vi là một tối ưu hóa hiệu suất cho phép máy khách chỉ yêu cầu các phần cụ thể của một tài nguyên. Điều này cực kỳ hữu ích cho:

  1. Tiếp tục tải xuống: Nếu quá trình tải xuống bị gián đoạn, máy khách có thể chỉ yêu cầu các phần bị thiếu thay vì bắt đầu lại từ đầu.
  2. Phát trực tuyến video: Trình phát video có thể chuyển đến bất kỳ điểm nào trong video bằng cách yêu cầu dải byte tương ứng.
  3. Tải xuống song song: Trình quản lý tải xuống có thể chia một tệp thành các đoạn và tải xuống đồng thời.
  4. Truyền dữ liệu hiệu quả: Khi bạn chỉ cần một phần của tệp hoặc tập dữ liệu lớn.

Máy khách khởi tạo yêu cầu phạm vi bằng cách bao gồm tiêu đề Range trong yêu cầu của họ. Ví dụ:

GET /large-file.zip HTTP/1.1Host: example.comRange: bytes=50000000-

Yêu cầu này có nghĩa là, "Vui lòng gửi cho tôi tất cả các byte bắt đầu từ vị trí 50.000.000 đến cuối tệp."

HTTP 416 Range Not Satisfiable Thực sự có nghĩa là gì?

Mã trạng thái 416 Range Not Satisfiable cho biết máy chủ không thể phục vụ các phạm vi được yêu cầu. Điều này xảy ra khi phạm vi hoặc các phạm vi được chỉ định trong trường tiêu đề Range của yêu cầu không trùng lặp với phạm vi hiện tại của tài nguyên được chọn.

Nói một cách đơn giản hơn: "Bạn đã yêu cầu một phần của tệp không tồn tại."

Một phản hồi 416 phù hợp nên bao gồm tiêu đề Content-Range cho biết kích thước thực tế của tài nguyên được chọn. Điều này giúp máy khách hiểu những phạm vi nào thực sự có sẵn.

Một phản hồi 416 tiêu chuẩn trông như thế này:

HTTP/1.1 416 Range Not SatisfiableContent-Range: bytes */50000000Content-Type: text/htmlContent-Length: 147
<html><head><title>416 Range Not Satisfiable</title></head><body><center><h1>416 Range Not Satisfiable</h1></center></body></html>

Phần quan trọng là tiêu đề Content-Range: bytes */50000000. Điều này cho máy khách biết:

Nói cách khác:

Máy khách nói, "Hãy cho tôi các byte X đến Y", nhưng các byte đó không tồn tại trong tài nguyên.

Điều này phổ biến khi máy khách cố gắng tiếp tục tải xuống từ các vị trí không chính xác hoặc yêu cầu các dải byte không khớp với độ dài thực tế của tài nguyên.

Tại sao việc hiểu 416 lại quan trọng

Bạn có thể nghĩ "416 có vẻ hiếm; tôi có thực sự cần quan tâm không?" Câu trả lời là có, đặc biệt trong các hệ thống mạnh mẽ có khả năng phục hồi, phát trực tuyến hoặc hỗ trợ tiếp tục. Đây là lý do:

Tóm lại, để xây dựng các hệ thống mạnh mẽ xử lý các trường hợp ngoại lệ, việc hiểu HTTP 416 là điều cần thiết.

Tại sao yêu cầu phạm vi được sử dụng?

Yêu cầu phạm vi cho phép máy khách yêu cầu các phần cụ thể của một tài nguyên thay vì toàn bộ tệp. Điều này hữu ích vì một số lý do:

Các yêu cầu một phần này dựa vào tiêu đề HTTP Range chỉ định các dải byte.

Lỗi 416 Range Not Satisfiable xảy ra như thế nào?

Lỗi 416 xảy ra khi:

Trong những trường hợp như vậy, máy chủ phản hồi bằng mã 416, cho máy khách biết rằng phạm vi được yêu cầu không thể được phục vụ.

Các tình huống phổ biến gây ra lỗi 416

Hãy cùng xem xét các tình huống phổ biến nhất mà bạn có thể gặp phải phản hồi 416.

Kịch bản 1: Yêu cầu byte vượt quá kích thước tệp

Đây là trường hợp đơn giản nhất. Máy khách yêu cầu một phạm vi vượt quá kích thước tệp thực tế.

Yêu cầu:

GET /document.pdf HTTP/1.1Host: example.comRange: bytes=5000000-6000000

Vấn đề: Tệp document.pdf chỉ có tổng cộng 4.000.000 byte (khoảng 4MB).

Phản hồi 416 của máy chủ:

HTTP/1.1 416 Range Not SatisfiableContent-Range: bytes */4000000

Máy chủ đang nói, "Bạn đã yêu cầu các byte từ 5.000.000 đến 6.000.000, nhưng tệp chỉ có tổng cộng 4.000.000 byte. Yêu cầu của bạn không có ý nghĩa."

Kịch bản 2: Kích thước tệp đã thay đổi

Điều này thường xảy ra khi tiếp tục tải xuống. Hãy tưởng tượng bạn bắt đầu tải xuống một tệp 100MB, nhưng nó bị gián đoạn ở 50MB. Trong khi đó, tệp trên máy chủ được cập nhật và giờ chỉ còn tổng cộng 80MB.

Yêu cầu tiếp tục của máy khách:

GET /software-update.zip HTTP/1.1Host: example.comRange: bytes=50000000-

Vấn đề: Tệp hiện chỉ có 80.000.000 byte, nhưng bạn đang yêu cầu mọi thứ từ byte 50.000.000 trở đi, điều này sẽ mở rộng đến 80.000.000+.

Phản hồi 416 của máy chủ:

HTTP/1.1 416 Range Not SatisfiableContent-Range: bytes */80000000

Máy chủ đang nói với bạn, "Tệp đã thay đổi. Hiện tại nó chỉ còn tổng cộng 80MB, vì vậy yêu cầu dữ liệu của bạn bắt đầu từ 50MB không còn phù hợp với thực tế nữa."

Kịch bản 3: Cú pháp phạm vi không hợp lệ

Mặc dù máy chủ có thể trả về 400 Bad Request cho các phạm vi có cú pháp không hợp lệ, một số có thể sử dụng 416 nếu các giá trị phạm vi không thể thực hiện được về mặt số học.

Yêu cầu:

GET /data.bin HTTP/1.1Host: example.comRange: bytes=1000-500

Vấn đề: Byte bắt đầu (1000) nằm sau byte kết thúc (500), điều này là không thể về mặt toán học.

Cách phát hiện 416 trong ứng dụng của bạn

Để xử lý hoặc tránh lỗi 416 một cách hiệu quả, bạn cần có khả năng phát hiện chúng theo chương trình hoặc trong quá trình gỡ lỗi. Dưới đây là các mẹo:

  1. Kiểm tra mã trạng thái HTTP: Nếu máy khách của bạn nhận được status === 416 (hoặc trong một thư viện, mã lỗi 416), hãy xử lý nó một cách đặc biệt.
  2. Kiểm tra tiêu đề: Hãy xem tiêu đề Content-Range. Nếu nó là bytes */N, bạn biết độ dài hợp lệ là N.
  3. Logic dự phòng: Nếu 416 xảy ra, có lẽ bạn cần tìm nạp lại toàn bộ tài nguyên (tức là không có Range). Hoặc điều chỉnh các offset của bạn.
  4. Thông tin ghi nhật ký / gỡ lỗi: Ghi lại phạm vi đã thử và các giới hạn hợp lệ được trả về để hiểu logic bị sai lệch đến mức nào.
  5. Sử dụng công cụ (Apidog!): Sử dụng công cụ kiểm tra REST/API như Apidog, bạn có thể tạo thủ công các yêu cầu với tiêu đề Range, xem phản hồi đầy đủ (tiêu đề + nội dung), và lặp lại cho đến khi bạn thực hiện đúng.

Ví dụ & Trường hợp sử dụng thực tế

Hãy cùng xem xét một vài ngữ cảnh thực tế mà 416 có thể xuất hiện.

Máy chủ truyền phát video & đa phương tiện

Trình phát video thường yêu cầu nội dung một phần, ví dụ: "bắt đầu phát từ phút thứ 10" bằng cách sử dụng các dải byte. Nếu tệp video ngắn hơn (hoặc một phân đoạn không có sẵn), máy khách có thể yêu cầu một dải vượt quá dữ liệu thực tế, gây ra lỗi 416.

Trong các thiết lập truyền phát như vậy, việc đảm bảo máy chủ đa phương tiện của bạn quảng cáo độ dài một cách chính xác và xử lý các dải không hợp lệ một cách linh hoạt là rất quan trọng.

Trình quản lý tải xuống có thể tiếp tục

Các trình quản lý tải xuống thường chia tệp thành các đoạn (ví dụ: 0–1 MB, sau đó 1 MB–2 MB, v.v.). Nếu phạm vi của đoạn cuối cùng nằm ngoài giới hạn (do làm tròn, thay đổi tệp, v.v.), yêu cầu đoạn đó có thể trả về 416.

Một trình quản lý tải xuống mạnh mẽ:

API trả về các dải dữ liệu

Một số API hỗ trợ truy xuất dữ liệu một phần theo dải, ví dụ: nhật ký, tệp văn bản lớn hoặc các khối nhị phân. Nếu máy khách yêu cầu Range: bytes=… vượt quá giới hạn, hoặc khi tài nguyên nhỏ hơn, bạn sẽ gặp lỗi 416.

Trong các API như vậy, tài liệu và máy khách phải phối hợp. API nên chỉ rõ cách truy xuất một phần hoạt động, và máy khách nên cẩn thận xác thực trước khi yêu cầu.

416 so với các lỗi máy khách khác: Biết sự khác biệt

Điều quan trọng là phải phân biệt 416 với các mã trạng thái 4xx khác.

1.  416 Range Not Satisfiable so với 400 Bad Request:

2.  416 Range Not Satisfiable so với 404 Not Found:

3.  416 Range Not Satisfiable so với 206 Partial Content:

Làm thế nào các nhà phát triển có thể ngăn chặn lỗi 416?

Các nhà phát triển và quản trị viên máy chủ có thể thực hiện các biện pháp như:

Kiểm tra yêu cầu phạm vi và phản hồi 416 với Apidog

Kiểm tra hành vi yêu cầu phạm vi là rất quan trọng đối với các ứng dụng xử lý truyền tệp. Apidog cung cấp các công cụ tuyệt vời cho mục đích này.

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

  1. Tạo các yêu cầu phạm vi chính xác: Dễ dàng thêm tiêu đề Range vào các yêu cầu của bạn với các dải byte cụ thể.
  2. Kiểm tra các phạm vi hợp lệ: Xác minh rằng các yêu cầu phạm vi hợp lệ trả về 206 Partial Content với tiêu đề Content-Range chính xác.
  3. Kiểm tra các trường hợp ngoại lệ: Cố ý gửi các yêu cầu phạm vi không hợp lệ để đảm bảo máy chủ của bạn trả về các phản hồi 416 phù hợp:

4.  Kiểm tra tiêu đề: Sử dụng chế độ xem phản hồi chi tiết của Apidog để xác minh rằng các phản hồi 416 bao gồm tiêu đề Content-Range: bytes */{total_length} bắt buộc.

5.  Tự động hóa kiểm thử: Tạo các bộ kiểm thử tự động xác minh việc xử lý yêu cầu phạm vi của máy chủ bạn trong các tình huống khác nhau.

Việc kiểm tra này đảm bảo rằng các trình quản lý tải xuống, trình phát video và các máy khách nhận biết phạm vi khác của bạn sẽ hoạt động chính xác khi chúng gặp các trường hợp ngoại lệ.

Bằng cách thực hiện điều này một cách tương tác, bạn có thể chẩn đoán chính xác nơi logic phạm vi của bạn thất bại. Giao diện của Apidog giúp bạn xem mọi thứ: tiêu đề, nội dung, thời gian, điều này giúp việc gỡ lỗi 416 dễ dàng hơn nhiều so với việc chỉ đoán thông qua mã.

button

Nếu bạn chưa từng sử dụng Apidog trước đây, bây giờ là thời điểm tuyệt vời để thử. Tải xuống miễn phí, tải điểm cuối API của bạn và bắt đầu kiểm tra với các kết hợp tiêu đề Range khác nhau. Bạn sẽ nhận được phản hồi ngay lập tức, đây chính xác là điều bạn muốn khi đối phó với các lỗi khó tái tạo như 416.

Cách máy khách nên xử lý phản hồi 416

Một máy khách hoạt động tốt nên biết cách khôi phục từ lỗi 416. Đây là những gì các ứng dụng thông minh làm:

  1. Phân tích tiêu đề Content-Range: Trích xuất tổng độ dài tài nguyên từ tiêu đề Content-Range: bytes */{total_length}.
  2. Đặt lại hiểu biết của họ: Loại bỏ bất kỳ nội dung đã tải xuống trước đó nếu tổng kích thước đã thay đổi.
  3. Khởi động lại quá trình tải xuống: Bắt đầu tải xuống mới từ đầu (Range: bytes=0-) hoặc tính toán lại các phạm vi hợp lệ dựa trên tổng kích thước mới.
  4. Thông báo cho người dùng: Nếu thích hợp, thông báo cho người dùng rằng tệp đã thay đổi và quá trình tải xuống cần khởi động lại.

Ví dụ về logic máy khách:

// Mã giả để xử lý phản hồi 416
if (response.status === 416) {
    // Trích xuất tổng kích thước tệp từ tiêu đề Content-Range
    const totalSize = extractTotalSize(response.headers['Content-Range']);

    // Nếu chúng ta nghĩ tệp có kích thước khác, chúng ta cần bắt đầu lại
    if (totalSize !== this.expectedFileSize) {
        this.downloadedBytes = 0;
        this.expectedFileSize = totalSize;
        this.restartDownload();
    }
}

Thực hành tốt nhất & Mẹo khi làm việc với yêu cầu phạm vi HTTP

Dưới đây là danh sách các mẹo nhanh và thực hành tốt nhất để giúp bạn tránh hoặc xử lý lỗi 416 một cách linh hoạt hơn trong các hệ thống thực tế:

  1. Luôn tìm nạp tổng kích thước trước: Sử dụng HEAD hoặc một điểm cuối siêu dữ liệu để lấy Content-Length hoặc kích thước tệp.
  2. Tránh các phạm vi "mở" khi có thể: Thay vì bytes=1000-, hãy tính toán giới hạn cuối thực tế và sử dụng bytes=1000-<end>.
  3. Bảo vệ logic phân đoạn của bạn: Khi phân đoạn, đảm bảo phân đoạn cuối cùng không vượt quá giới hạn.
  4. Thực hiện dự phòng trên 416: Nếu bạn nhận được 416, hãy quay lại GET đầy đủ hoặc một phân đoạn nhỏ hơn an toàn.
  5. Hủy bỏ bộ nhớ đệm khi tài nguyên thay đổi: Để máy khách không sử dụng kích thước tổng lỗi thời.
  6. Trả về siêu dữ liệu lỗi hữu ích: Bao gồm Content-Range, thông báo lỗi, gợi ý trong nội dung cho máy khách.
  7. Giới hạn tốc độ hoặc từ chối các phạm vi vô lý sớm: Ở phía máy chủ, hãy kiểm tra tính hợp lệ (ví dụ: "bắt đầu phải < kết thúc", "kết thúc < tối đa"). Trả về 400 hoặc 416 sớm nếu không hợp lệ.
  8. Hỗ trợ tiêu đề "accept-ranges": Trong một GET thành công, bao gồm Accept-Ranges: bytes để báo hiệu hỗ trợ.
  9. Tài liệu hóa hành vi phạm vi của bạn: Trong tài liệu API của bạn, giải thích cách các yêu cầu phạm vi hoạt động, bao gồm giới hạn và hành vi dự phòng.
  10. Sử dụng công cụ để kiểm tra kỹ lưỡng: Thủ công hoặc thông qua các bài kiểm tra tự động, bao gồm các trường hợp ngoại lệ như phạm vi độ dài bằng 0, offset âm, v.v.

Ghi nhật ký lỗi phạm vi trong sản xuất: Để bạn có thể thấy các mẫu có thể nhiều máy khách đang gặp lỗi 416, tiết lộ một lỗi trong logic của họ.

Những hiểu lầm và cạm bẫy phổ biến

Rất dễ bị vướng vào những hiểu lầm nhỏ khi xử lý lỗi 416. Dưới đây là một vài điều cần lưu ý:

Bằng cách nhận thức được những điều này, bạn có thể tránh chẩn đoán sai.

Tại sao điều này quan trọng đối với hệ thống API & Tải xuống

Bằng cách coi lỗi 416 là một kịch bản hạng nhất, bạn xây dựng các hệ thống mạnh mẽ hơn. Một số lợi ích cụ thể:

Hãy nhớ rằng: trong các hệ thống mạng, các trường hợp ngoại lệ (tệp bị cắt ngắn, bộ nhớ đệm lỗi thời, thử lại một phần) là nơi nhiều lỗi tồn tại. Biết cách "nhảy múa an toàn" xung quanh 416 là một dấu hiệu của sự trưởng thành của API.

Kết luận: Người bảo vệ ranh giới byte

Mã trạng thái HTTP 416 Range Not Satisfiable đóng một vai trò quan trọng trong hệ sinh thái truyền tệp hiệu quả. Đây không phải là lỗi phổ biến đối với hầu hết người dùng, nhưng nó rất cần thiết cho hoạt động mạnh mẽ của các trình quản lý tải xuống, dịch vụ truyền phát video và các ứng dụng khác sử dụng yêu cầu nội dung một phần.

Việc hiểu 416 giúp các nhà phát triển xây dựng các ứng dụng mạnh mẽ hơn có thể xử lý các phức tạp trong thế giới thực của việc truyền mạng, thay đổi tệp và các hoạt động tiếp tục. Đây là cách giao thức duy trì tính toàn vẹn của dữ liệu và đảm bảo rằng các yêu cầu phạm vi không dẫn đến tải xuống bị hỏng hoặc máy khách bị nhầm lẫn.

Vì vậy, lần tới khi bạn xây dựng một ứng dụng xử lý các tệp lớn, hãy nhớ xử lý cả trường hợp thành công 206 và trường hợp lỗi 416 một cách linh hoạt. Và khi bạn cần kiểm tra các kịch bản này, một công cụ mạnh mẽ như Apidog sẽ cung cấp cho bạn độ chính xác và kiểm soát cần thiết để đảm bảo việc xử lý yêu cầu phạm vi của bạn là hoàn hảo.

Và một lần nữa đừng quên: tải xuống Apidog miễn phí, khởi động điểm cuối của bạn và thử một số yêu cầu Range. Xem cách máy chủ phản hồi và kiểm tra các trường hợp ngoại lệ mà chúng ta đã thảo luận. Đó là cách học thực hành củng cố kiến thức này.

Chúc bạn viết mã vui vẻ và các lần tìm nạp một phần của bạn luôn nằm trong giới hạn.

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