在實作檔案下載功能時,常需確認伺服器是否支援 Range 標頭,以實現斷點續傳或多執行緒下載。單純取得 Content-Length 並不足以判斷。
Range: bytes=start-end,否則伺服器預設會回傳 Accept-Ranges: bytes 即使實際不支援。Accept-Ranges 欄位是否為 bytes,且狀態碼為 206 Partial Content。URL downloadUrl = new URL(fileUrl);
URLConnection conn = downloadUrl.openConnection();
// 關鍵:必須設定 Range 標頭
conn.setRequestProperty("Range", "bytes=0-1023");
String acceptRanges = conn.getHeaderField("Accept-Ranges");
int responseCode = ((HttpURLConnection) conn).getResponseCode();
if (responseCode == 206 && "bytes".equalsIgnoreCase(acceptRanges)) {
System.out.println("伺服器支援斷點續傳");
} else {
System.out.println("伺服器不支援斷點續傳");
}
若未設定 Range 標頭直接請求,許多伺服器仍會回傳 Accept-Ranges: bytes,導致誤判。務必在請求中包含具體的位元組範圍才能得到真實的支援狀態。