[譯]Tus 協議


原文地址:https://tus.io/protocols/resumable-upload.html

摘要

    該協議提供一種基於 HTTP/1.1 和 HTTP/2 機制用於文件斷點續傳。

核心協議

    核心協議描述如何繼續中斷的上傳。這里假定你已經有一個用於上傳的 RUL ,這個 URL 通常是由擴展協議 Creation創建。

    所有客戶端和服務端必須實現核心協議。

    協議沒有描述 RUL 的結構,而是留給協議的實現來決定。本文中所有展示的 URL 僅用於舉例。

    此外,認證和授權的實現也留給服務端來決定。

示例

    用一個請求頭指明應當從什么地方開始續傳上傳。

    以下示例展示中斷位置由70變為100

請求

HEAD /files/24e533e02ec3bc40c387f1a0e460e216 HTTP/1.1

Host: tus.example.org

Tus-Resumable: 1.0.0

響應

HTTP/1.1 200 OK

Upload-Offset: 70

Tus-Resumable: 1.0.0

 

    對於給定的中斷位置,客戶端使用 PATCH 方法來續傳。

請求

PATCH /files/24e533e02ec3bc40c387f1a0e460e216 HTTP/1.1

Host: tus.example.org

Content-Type: application/offset+octet-stream

Content-Length: 30

Upload-Offset: 70

Tus-Resumable: 1.0.0

 

[remaining 30 bytes]

響應

HTTP/1.1 204 No Content

Tus-Resumable: 1.0.0

Upload-Offset: 100

 

報文頭

Upload-Offset【上傳偏移位置】

    請求和響應中的上傳便宜位置表明資源的字節偏移量。該值必須是一個非負整數。

Upload-Length【上傳長度】

    請求和響應中的上傳長度表明資源的字節數【不是一次請求上傳的字節數】,該值必須是非負整數。

Tus-Version【協議版本】

    響應頭中的協議版本值必須是由逗號分隔的服務器支持的協議列表,列表中的第一個必須是服務器最希望的版本。

Tus-Resumable

    Tus-Resumable 頭除了 OPTIONS 請求外,每次請求和響應必須指明。Tus-Resumable

 值必須是客戶端和服務器正在使用的協議版本。【更具體的說就是當前請求和響應使用的協議版本】

    如果服務端不支持客戶端發過來的協議版本,服務端必須響應 412 Precondition Failed 狀態,並且響應頭中必須包括 Tus-Resumable,另外,服務端必須不處理這個請求。

Tus-Extension【擴展協議】

    響應頭中的 Tus-Extension 值必須是有逗號分隔服務端支持的擴展協議的列表。如果服務端不支持擴展協議,則這個頭應當去掉。

Tus-Max-Size

    協議頭中的 Tus-Max-Size 值必須是非負整數用以表明整個上傳最大允許的字節數【原文字面理解是上傳資源的最大限制字節數,不是一次請求的最大限制字節數】,服務端如果有硬性限制應當在這個頭中表明。

X-HTTP-Method-Override

    如果這個請求頭有值,則服務端必須使用這個值當做請求方法【Method】,而當前請求的實際請求方法必須忽略。客戶端應當在其不支持 PATCH 或 DELETE 方法時使用該請求頭。【這個頭不是tus 創建的,http 原本就有,舉個例子:客戶端不能發生 PATCH 請求,於是發送一個 Get 請求,在 X-HTTP-Method-Override 頭中設置值為 PATCH ,這個服務端就知道客戶端想發的是 PATCH 請求】

請求

HEAD

    服務端在接收到 HEAD 請求后,其必須總是在響應頭中包含 Upload-Offset 表明上傳偏移位置,即便偏移位置是 0,或上傳已經完成。如果知道上傳資源的長度,服務端必須在 Upload-Length 指明長度。如果服務端沒有找到上傳的資源,服務端應當返回 404 Not Found、410 Gone 或 403 Forbidden,且沒有 Upload-Offset 頭。

    服務端必須在響應頭中包含 Cache-Control: no-store 來阻止客戶端或客戶端代理從緩存中獲取響應。

PATCH

    服務端應當接受任何 PATCH 上傳請求,並且將請求體中的內容放在 Upload-Offse 頭指示的位置后。使用 PATCH 請求必須使用 Content-Type: application/offset+octet-stream 請求頭,否則服務端應當響應 415 Unsupported Media Type 狀態。

    Upload-Offset 報文頭的值必須與資源的偏移量相等。出於並行上傳考慮,可以使用 Concatenation 擴展協議。如果上傳偏移量與資源實際偏移不相同,服務端應當返回 409 Conflict 狀態,且不修改資源。

    如果 PATCH 請求沒有包含 Content-Length 頭,或者 Content-Length 值不是非負整數,服務端應當返回 400 Bad Request 狀態。

    客戶端應當在一個 PATCH 請求中發送所有未發送的字節,但是可能存在發送多個較小的請求的場景。一個這樣的示例是使用了 Checksum 擴展協議。

    服務端必須響應 204 No Content 狀態來表明成功處理 PATCH 請求。響應必須包含 Upload-Offset 報文頭,當然必須使用更新后的值。更新后的值必須是上一個請求偏移量和接收內容的和。

    如果服務端接收到一個不存在資源的 PATCH 請求,應當返回 404 Not Found 狀態。

    客戶端和服務器應當嘗試檢測和處理可預見的網絡錯誤,比如讀寫 socket 錯誤和讀寫超時,當連接超時應當關閉底層連接。

    服務端應當總是嘗試存儲盡可能多接收數據。

OPTIONS

    一個 OPTIONS 請求可能被用於收集服務端當前的配置,一個成功的響應應當返回 204 No Content 或 200 OK 狀態,並且必須包含 Tus-Version 響應頭,它可能包含 Tus-Extension 和 Tus-Max-Size 頭。

示例

請求

OPTIONS /files HTTP/1.1

Host: tus.example.org

響應

HTTP/1.1 204 No Content

Tus-Resumable: 1.0.0

Tus-Version: 1.0.0,0.2.2,0.2.1

Tus-Max-Size: 1073741824

Tus-Extension: creation,expiration

擴展協議

待補充

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM