Bạn đang tải xuống một tệp lớn – một bộ phim độ phân giải cao, một bản cập nhật phần mềm hoặc một tập dữ liệu. Kết nối internet của bạn bị giật trong giây lát và quá trình tải xuống thất bại. Ngày xưa, bạn sẽ thở dài thất vọng và bắt đầu lại toàn bộ quá trình tải xuống từ đầu, mất hết mọi tiến độ.
Nhưng ngày nay, bạn nhấp vào "Tiếp tục" (Resume), và một điều kỳ diệu xảy ra. Quá trình tải xuống tiếp tục ngay tại điểm dừng trước đó. Không lãng phí thời gian, không lãng phí băng thông.
Phép màu của mạng hiện đại này được thực hiện nhờ một trong những mã trạng thái mạnh mẽ nhưng ít được nhắc đến nhất của HTTP: 206 Partial Content
.
Mã trạng thái này có thể không được thảo luận phổ biến như 200 OK
hay 404 Not Found
, nhưng nó đóng một vai trò quan trọng trong hiệu suất web hiện đại và trải nghiệm người dùng. Thực tế, nếu không có nó, các dịch vụ phát trực tuyến yêu thích của bạn, các bản tải xuống phần mềm và các API tệp lớn sẽ trở nên kém hiệu quả một cách đáng tiếc.
Mã này là nền tảng của các bản tải xuống có thể tiếp tục, phát trực tuyến video hiệu quả và truyền tệp nhanh chóng, song song. Đó là cách giao thức chia một tài nguyên lớn thành các phần nhỏ dễ quản lý, cho phép máy khách yêu cầu chính xác những gì họ cần, không hơn không kém.
Nếu bạn từng tự hỏi làm thế nào Netflix bắt đầu phát phim ngay lập tức hoặc Chrome tải xuống tệp hiệu quả đến vậy, thì 206
là một phần quan trọng của câu trả lời.
Trong bài đăng blog này, chúng ta sẽ khám phá mã trạng thái 206, giải thích cách nó hoạt động, chia sẻ các trường hợp sử dụng thực tế và thảo luận về các phương pháp hay nhất khi làm việc với nó. Nếu bạn muốn tăng cường kiểm thử và tài liệu API của mình, đừng quên tải xuống Apidog miễn phí. Đây là một công cụ mạnh mẽ giúp bạn kiểm thử và hiểu các phản hồi như 206 Partial Content, giúp quản lý API của bạn mượt mà và minh bạch hơn.
Bây giờ, hãy cùng khám phá cách HTTP 206 Partial Content biến các bản tải xuống nguyên khối thành một trải nghiệm hiệu quả, hiện đại và cách bạn có thể sử dụng nó một cách hiệu quả trong các API, bản tải xuống và ứng dụng.
Vấn đề: Tải xuống nguyên khối
Để hiểu tại sao 206
lại quan trọng đến vậy, trước tiên chúng ta phải đánh giá cao vấn đề mà nó giải quyết.
Cách tải xuống tệp truyền thống, đơn giản sử dụng một yêu cầu GET
và phản hồi 200 OK
:
- Máy khách:
GET /big-video.mp4
- Máy chủ:
200 OK
+ toàn bộ tệp video 2GB - Máy khách: Chờ toàn bộ tệp tải xuống trước khi có thể sử dụng.
Cách tiếp cận này có một số nhược điểm nghiêm trọng:
- Không có khả năng phục hồi: Bất kỳ sự gián đoạn mạng nào cũng làm hỏng toàn bộ quá trình tải xuống.
- Không hiệu quả: Nếu bạn đã có nửa đầu của tệp, bạn không có cách nào để chỉ yêu cầu nửa sau.
- Không có tiến độ: Máy khách không thể dễ dàng truy cập các phần của tệp cho đến khi quá trình truyền hoàn tất 100%.
- Lãng phí băng thông: Nếu người dùng hủy tải xuống khi đã được 90%, 90% dữ liệu đã truyền thường bị lãng phí.
Mã trạng thái 206 Partial Content
, được sử dụng với một tập hợp các tiêu đề HTTP cụ thể, giải quyết tất cả các vấn đề này bằng cách cho phép yêu cầu theo phạm vi (range requests).
HTTP 206 Partial Content thực sự có nghĩa là gì?
Mã trạng thái 206 Partial Content thuộc danh mục thành công 2xx. Nhưng không giống như 200 OK
, vốn cho biết một phản hồi thành công đầy đủ, 206 đặc biệt có nghĩa là:
Máy chủ đang trả về thành công chỉ một phần của tài nguyên được yêu cầu.
Điều này xảy ra khi máy khách (như trình duyệt, trình phát media hoặc trình tải xuống) thực hiện một yêu cầu một phần (partial request) bằng cách sử dụng tiêu đề Range
.
Ví dụ, nếu một tệp video 100 MB được lưu trữ trên máy chủ, máy khách có thể chỉ yêu cầu 10 MB đầu tiên để bắt đầu phát ngay lập tức. Máy chủ phản hồi với 206 Partial Content
và cung cấp chính xác những gì đã được yêu cầu.
Nói một cách đơn giản, đó là máy chủ nói: "Được rồi, bạn không muốn toàn bộ. Đây là phần bạn đã yêu cầu."
Một phản hồi 206
điển hình trông như thế này:
HTTP/1.1 206 Partial ContentContent-Type: video/mp4Content-Range: bytes 1000-1999/5000Content-Length: 1000
[...1000 bytes of video data...]
Hãy cùng phân tích tiêu đề mới quan trọng này:
Content-Range: bytes 1000-1999/5000
: Đây là trọng tâm của phản hồi206
. Nó cho máy khách biết:bytes
: Đơn vị đang được sử dụng (byte là phổ biến nhất).1000-1999
: Phạm vi byte đang được gửi trong phản hồi cụ thể này.5000
: Tổng kích thước của toàn bộ tài nguyên. Đây là thông tin cực kỳ hữu ích cho máy khách.
Nói một cách đơn giản, mã trạng thái HTTP 206 Partial Content cho biết máy chủ đang thực hiện thành công yêu cầu của máy khách về chỉ một phần của tài nguyên, thay vì toàn bộ. Điều này khác với mã trạng thái 200 OK quen thuộc hơn, vốn trả về toàn bộ nội dung.
Việc phân phối một phần này rất cần thiết khi xử lý các tệp lớn, phát trực tuyến media hoặc các yêu cầu muốn tiếp tục tải xuống bị gián đoạn mà không cần bắt đầu lại.
Tại sao chúng ta cần Partial Content?
Hãy đối mặt với sự thật: không phải mọi máy khách đều cần toàn bộ tệp cùng một lúc. Phát trực tuyến, tải xuống hoặc tiếp tục các lần truyền bị gián đoạn sẽ kém hiệu quả hơn nhiều nếu không có các yêu cầu một phần.
Đây là lý do tại sao chúng ta cần 206
:
- Hiệu quả phát trực tuyến: Netflix, YouTube và Spotify sử dụng nội dung một phần để tải đủ các đoạn media cho việc phát lại mượt mà.
- Tải xuống có thể tiếp tục: Nếu internet của bạn bị ngắt kết nối khi tệp 5 GB đã tải được 90%, bạn sẽ không muốn bắt đầu lại. Với 206, trình tải xuống của bạn có thể tiếp tục từ điểm dừng trước đó.
- Tối ưu hóa băng thông: Máy khách có thể yêu cầu các phần nhỏ hơn của tài nguyên thay vì tải toàn bộ một cách không cần thiết.
Tóm lại, 206 làm cho web hiện đại nhanh chóng, hiệu quả và thân thiện với người dùng.
Tại sao 206 Partial Content lại quan trọng?
Mã trạng thái 206 mạnh mẽ vì nó cho phép:
- 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 phần còn thiếu mà không cần bắt đầu lại.
- Phát trực tuyến hiệu quả: Máy khách có thể đệm media theo các đoạn nhỏ thay vì tải toàn bộ tệp ngay lập tức.
- Tiết kiệm băng thông: Máy chủ chỉ có thể gửi những gì máy khách cần, giảm truyền dữ liệu dư thừa.
- Cải thiện trải nghiệm người dùng: Tải nhanh, phản hồi tốt các nội dung lớn như video, PDF hoặc cập nhật phần mềm.
Nếu không có 206 Partial Content, người dùng sẽ phải đối mặt với trải nghiệm tải xuống và phát trực tuyến chậm hơn, dễ bị gián đoạn hơn.
Các trường hợp sử dụng chính của 206 Partial Content
Đây là những nơi 206 phát huy tác dụng:
- Phát trực tuyến video và âm thanh (Netflix, YouTube, Spotify).
- Tải xuống tệp có thể tiếp tục (ví dụ: trình quản lý tải xuống của Chrome).
- Phản hồi API lớn (phân trang hoặc tải xuống tệp theo khối).
- Xem trước nội dung (chỉ lấy phần đầu của tệp).
206 Partial Content hoạt động như thế nào?
Để hiểu cách 206 Partial Content hoạt động, bạn cần biết về tiêu đề HTTP Range. Khi máy khách muốn yêu cầu chỉ một phân đoạn hoặc phạm vi cụ thể của một tài nguyên, nó sẽ gửi một yêu cầu HTTP với tiêu đề Range chỉ định (các) byte mong muốn.
Ví dụ:
textRange: bytes=0-999
Điều này có nghĩa là, “Hãy cung cấp cho tôi 1000 byte đầu tiên của tài nguyên.”
Nếu máy chủ hỗ trợ chức năng này, nó sẽ phản hồi bằng mã trạng thái 206 Partial Content, cùng với tiêu đề Content-Range chỉ định các byte đang được trả về:
textContent-Range: bytes 0-999/5000
Điều này cho máy khách biết máy chủ đang gửi các byte từ 0 đến 999 trong tổng số 5000 byte.
Chìa khóa kỳ diệu: Tiêu đề Range
Phản hồi 206
không tự xảy ra. Nó luôn là câu trả lời cho yêu cầu của máy khách có chứa tiêu đề Range
.
Máy khách sử dụng tiêu đề Range
để chỉ định phần (các phần) của tệp mà nó muốn.
Ví dụ 1: Yêu cầu một đoạn cụ thể
GET /big-video.mp4 HTTP/1.1Host: example.comRange: bytes=1000-1999
Yêu cầu này nói, "Vui lòng gửi cho tôi chỉ các byte từ 1000 đến 1999 (bao gồm) của tệp."
Ví dụ 2: Tiếp tục tải xuống (Nút "Resume")
Giả sử một bản tải xuống 5000 byte bị lỗi sau khi 2000 byte đã được nhận. Máy khách có thể tiếp tục bằng cách yêu cầu phần còn lại:
GET /big-video.mp4 HTTP/1.1Host: example.comRange: bytes=2000-
Yêu cầu này nói, "Vui lòng gửi cho tôi mọi thứ từ byte 2000 đến cuối tệp."
Ví dụ 3: Lấy phần cuối của tệp
Một số định dạng tệp (như MP4) có siêu dữ liệu ở cuối. Trình phát video có thể yêu cầu phần cuối trước để xác định thời lượng và codec của video.
GET /big-video.mp4 HTTP/1.1Host: example.comRange: bytes=-500
Yêu cầu này nói, "Vui lòng gửi cho tôi 500 byte cuối cùng của tệp."
Cách điều này cho phép các tính năng hiện đại
1. Tải xuống có thể tiếp tục
Đây là ứng dụng đơn giản nhất. Máy khách theo dõi số byte đã nhận thành công. Nếu kết nối bị ngắt, nó chỉ cần gửi một yêu cầu mới với Range: bytes=<received_so_far>-
và tiếp tục liền mạch từ điểm dừng trước đó.
2. Phát trực tuyến video và âm thanh
Đây là nơi 206
thực sự tỏa sáng. Khi bạn nhấn phát một video:
- Trình phát không chờ toàn bộ tệp tải xuống.
- Nó ngay lập tức yêu cầu vài giây đầu tiên của video (
Range: bytes=0-1000000
). - Khi bạn xem, nó liên tục yêu cầu các đoạn tiếp theo trong nền.
- Nếu bạn tua nhanh đến giữa video, trình phát sẽ tính toán phạm vi byte tương ứng và yêu cầu trực tiếp (
Range: bytes=25000000-26000000
). Đây là lý do tại sao bạn có thể nhảy đến cuối video YouTube gần như ngay lập tức—bạn không chờ toàn bộ tệp tải, mà chỉ là đoạn cụ thể bạn đã yêu cầu.
3. Tải xuống song song (Tải xuống đa luồng)
Các trình quản lý tải xuống và trình duyệt hiện đại sử dụng điều này để tăng tốc độ tải xuống. Chúng mở nhiều kết nối đến cùng một tệp và yêu cầu các phạm vi khác nhau đồng thời.
Connection 1: Range: bytes=0-999999
Connection 2: Range: bytes=1000000-1999999
Connection 3: Range: bytes=2000000-2999999
Connection 4: Range: bytes=3000000-
Khi tất cả các đoạn được tải xuống, máy khách sẽ ghép chúng lại thành tệp hoàn chỉnh. Điều này có thể giảm đáng kể tổng thời gian tải xuống.
Nhiệm vụ của máy chủ: Hỗ trợ và Tiêu đề
Để điều này hoạt động, máy chủ phải thông báo rằng nó hỗ trợ các yêu cầu theo phạm vi. Nó thực hiện điều này bằng cách bao gồm tiêu đề Accept-Ranges
trong các phản hồi của nó đối với các yêu cầu GET
thông thường.
HTTP/1.1 200 OKAccept-Ranges: bytesContent-Length: 5000
...
Điều này cho máy khách biết, "Tôi hiểu tiêu đề Range
, và tôi có thể phục vụ bạn các phần của tệp này theo đơn vị byte."
Nếu máy chủ không hỗ trợ các phạm vi, nó sẽ bỏ qua tiêu đề Range
và trả về toàn bộ tệp với trạng thái 200 OK
.
Cách triển khai và kiểm thử 206 Partial Content
Đối với các nhà phát triển, việc bật phân phối nội dung một phần có nghĩa là đảm bảo máy chủ của bạn hỗ trợ tiêu đề Range và xử lý nó đúng cách. Hầu hết các máy chủ web hiện đại như Apache, Nginx và IIS đều hỗ trợ điều này theo mặc định.
Nếu bạn đang xây dựng một API hoặc hệ thống phân phối nội dung, bạn nên:
- Xác thực tiêu đề Range trong các yêu cầu đến.
- Phản hồi bằng 206 Partial Content cho các phạm vi hợp lệ.
- Bao gồm tiêu đề Content-Range trong phản hồi.
- Xử lý các phạm vi không hợp lệ hoặc không thể đáp ứng bằng 416 Range Not Satisfiable.
- Gửi các tiêu đề Content-Type và Content-Length phù hợp.
Để kiểm thử cách API hoặc máy chủ của bạn xử lý các phản hồi 206, Apidog là một công cụ tuyệt vời. Bạn có thể mô phỏng các yêu cầu với tiêu đề Range và kiểm tra cách máy chủ phản hồi, đảm bảo các yêu cầu nội dung một phần hoạt động như mong đợi. Tải xuống Apidog miễn phí ngay hôm nay để bắt đầu!
Cách máy khách nên xử lý các phản hồi 206
Khi nhận được phản hồi 206 Partial Content, máy khách nên:
- Phân tích tiêu đề Content-Range để hiểu phần nào của dữ liệu đang được gửi.
- Nối nội dung một phần với các đoạn đã nhận trước đó để tái tạo tài nguyên đầy đủ.
- Xử lý các trường hợp đặc biệt như phạm vi chồng chéo hoặc thiếu một cách khéo léo.
- Tôn trọng các hướng dẫn của máy chủ về kích thước đoạn và ranh giới nội dung.
Các triển khai máy khách tốt cải thiện độ bền tải xuống và chất lượng phát trực tuyến.
Cách trình duyệt xử lý 206
Các trình duyệt hiện đại:
- Tự động gửi tiêu đề Range cho các phần tử media (
<video>
,<audio>
). - Hỗ trợ tải xuống có thể tiếp tục.
- Tuân thủ các tiêu đề
Content-Range
khi xử lý phản hồi.
Đây là lý do tại sao bạn có thể tua nhanh video YouTube hoặc tiếp tục tải xuống bị lỗi mà không gặp vấn đề gì.
Ví dụ thực tế: Phát trực tuyến video
Hãy tưởng tượng bạn đang xem một video trực tuyến. Trình phát không tải xuống toàn bộ tệp cùng một lúc; thay vào đó, nó yêu cầu các phần theo từng đoạn. Mỗi yêu cầu đoạn bao gồm một tiêu đề Range chỉ định phạm vi byte mà nó muốn. Máy chủ trả lời bằng 206 Partial Content và phân đoạn tương ứng.
Khi bạn tìm kiếm các điểm khác nhau trong video, các yêu cầu Range mới sẽ lấy các phân đoạn byte khác nhau. Tương tác này cho phép phát lại video mượt mà, liên tục mà không có thời gian đệm dài.
Kiểm thử yêu cầu Range với Apidog

Kiểm thử các phản hồi 206
thủ công có thể phức tạp. Bạn cần tạo các yêu cầu với tiêu đề Range
cụ thể và diễn giải các tiêu đề Content-Range
thu được. Đây là lúc Apidog trở thành một công cụ không thể thiếu.
Với Apidog, bạn có thể:
- Tạo yêu cầu chính xác: Dễ dàng thêm tiêu đề
Range
vào bất kỳ yêu cầuGET
nào với phạm vi byte chính xác mà bạn muốn kiểm thử. - Kiểm tra phản hồi: Apidog sẽ hiển thị rõ ràng trạng thái
206 Partial Content
, tiêu đềContent-Range
và nội dung thực tế (thường là nhị phân) của phản hồi. Bạn có thể xác minh độ dài của phần thân phản hồi khớp với phạm vi bạn đã yêu cầu. - Kiểm thử hỗ trợ máy chủ: Gửi một yêu cầu
GET
thông thường và kiểm tra tiêu đềAccept-Ranges
trong phản hồi để xem máy chủ có hỗ trợ tính năng này hay không. - Mô phỏng tiếp tục tải xuống: Tạo một chuỗi yêu cầu trong đó yêu cầu thứ hai sử dụng tiêu đề
Range
để mô phỏng một bản tải xuống đã tiếp tục.
Mức độ kiểm soát và khả năng hiển thị này rất quan trọng đối với các nhà phát triển làm việc trên các ứng dụng xử lý truyền tệp lớn. Không giống như Swagger hay Postman, Apidog không chỉ về các yêu cầu và phản hồi mà còn về thiết kế và tài liệu quy trình làm việc. Đối với 206, điều đó tạo ra sự khác biệt lớn.
Lợi ích của việc sử dụng 206 đúng cách
- Cải thiện UX: Người dùng không cần chờ tải xuống hoàn tất.
- Tiết kiệm băng thông: Chỉ các phần cần thiết được truyền.
- Hỗ trợ các phiên có thể tiếp tục: Không còn phải bắt đầu lại từ đầu.
- Tối ưu hóa hiệu suất: Hoàn hảo cho các tài nguyên lớn.
Những cạm bẫy tiềm ẩn và các phương pháp hay nhất
- Hỗ trợ của máy chủ là chìa khóa: Luôn kiểm tra tiêu đề
Accept-Ranges
trước khi cố gắng thực hiện các yêu cầu theo phạm vi. Máy khách của bạn phải có khả năng quay lại tải xuống200
đầy đủ nếu các yêu cầu theo phạm vi không được hỗ trợ. - Đơn vị phạm vi: Mặc dù
bytes
là đơn vị duy nhất được sử dụng và hỗ trợ rộng rãi, nhưng đặc tả cho phép các đơn vị khác (ví dụ:pages
cho máy in). Trong thực tế, bạn sẽ gần như chỉ làm việc với byte. - Nhiều phạm vi: Đặc tả cho phép máy khách yêu cầu nhiều phạm vi không liền kề trong một yêu cầu duy nhất (ví dụ:
Range: bytes=0-99, 500-599
). Máy chủ sau đó sẽ phản hồi với loại nội dungmultipart/byteranges
. Tuy nhiên, điều này phức tạp và hiếm khi được sử dụng trong thực tế; thường hiệu quả hơn khi thực hiện nhiều yêu cầu. - Phạm vi không hợp lệ: Nếu máy khách yêu cầu một phạm vi không thể đáp ứng (ví dụ:
Range: bytes=10000-
trên một tệp 5000 byte), máy chủ nên phản hồi bằng mã trạng thái416 Range Not Satisfiable
và bao gồm tiêu đềContent-Range: bytes */5000
để thông báo cho máy khách về phạm vi hợp lệ.
206 so với: 204, 205 và 304
- 204 No Content → Thành công, nhưng không có phần thân.
- 205 Reset Content → Thành công, nhưng đặt lại giao diện người dùng.
- 206 Partial Content → Thành công, nhưng chỉ một phần của phần thân được trả về.
- 304 Not Modified → Không có dữ liệu mới, sử dụng phiên bản đã lưu trong bộ nhớ cache.
Mỗi mã có vị trí riêng của nó nhưng 206 hoàn toàn về việc phân phối một phần.
206 Partial Content đóng vai trò như thế nào trong các API RESTful
Trong thiết kế API RESTful, 206 có thể có giá trị để xử lý các bản tải xuống tài nguyên lớn hoặc xuất dữ liệu theo khối. Ví dụ, một điểm cuối API cung cấp các tệp CSV hoặc JSON lớn có thể chấp nhận các yêu cầu Range, cho phép máy khách lấy dữ liệu từng phần.
Kết luận: Tại sao bạn nên quan tâm đến 206 Partial Content
Mã trạng thái HTTP 206 Partial Content
là một kiệt tác của thiết kế giao thức. Đó là một giải pháp đơn giản, thanh lịch mở ra một thế giới cải tiến về hiệu suất và trải nghiệm người dùng. Nó biến bản chất cứng nhắc, tất cả hoặc không có gì của HTTP ban đầu thành một hệ thống linh hoạt, hiệu quả và có khả năng phục hồi để truyền dữ liệu.
Mã trạng thái 206 Partial Content là một trong những công cụ mạnh mẽ nhất trong HTTP. Nó cho phép phát trực tuyến, tải xuống có thể tiếp tục, tối ưu hóa băng thông và trải nghiệm người dùng mượt mà hơn. Mã trạng thái HTTP 206 Partial Content là nền tảng của việc truyền dữ liệu hiệu quả trên web. Từ phát trực tuyến media đến tiếp tục tải xuống và truyền dữ liệu lớn, 206 cho phép giao tiếp thông minh, linh hoạt giữa máy khách và máy chủ.
Mặc dù nó không đơn giản như 200 OK
, việc học cách sử dụng và triển khai 206 đúng cách có thể làm cho các API và ứng dụng của bạn mạnh mẽ hơn nhiều. Từ nút "Tiếp tục" giúp bạn tiết kiệm sự kiên nhẫn đến việc tua nhanh tức thì trong video phát trực tuyến làm bạn thích thú, 206
đang hoạt động đằng sau hậu trường, làm cho web hiện đại cảm thấy nhanh chóng và phản hồi tốt.
Nếu bạn đang phát triển hoặc sử dụng API, việc nắm vững cách 206 hoạt động và kiểm thử các điểm cuối của bạn trong các điều kiện này là điều cần thiết. Mặc dù hầu hết các nhà phát triển sẽ không bao giờ tự tạo thủ công tiêu đề Range
trong công việc hàng ngày của họ, nhưng việc hiểu cách nó hoạt động là nền tảng để xây dựng các ứng dụng mạnh mẽ xử lý dữ liệu lớn một cách hiệu quả. Đó là lý do tại sao tải xuống Apidog miễn phí là một bước đi thông minh. Apidog cung cấp cho bạn một cách thực hành để kiểm thử các phản hồi nội dung một phần, đảm bảo các ứng dụng của bạn hoạt động hoàn hảo. Bạn có thể thiết kế, mô phỏng và tài liệu hóa các phản hồi một phần, giúp cuộc sống dễ dàng hơn cho các nhà phát triển, người kiểm thử và thậm chí cả các nhà quản lý sản phẩm.
Vì vậy, lần tới khi bạn tua nhanh video hoặc tiếp tục một bản tải xuống bị lỗi, hãy nhớ: đó là 206 Partial Content
đang hoạt động đằng sau hậu trường.