Content-Disposition 頭
HTTP Content-Disposition 頭指示內容是應該在瀏覽器中
在 multipart body(多部分主體)中,此頭必須用於每個子部分,以提供有關其對應欄位的資訊。子部分由 Content-Type 頭中定義的Content-Disposition 沒有效果。
Content-Disposition 頭是在 MIME 訊息(用於電子郵件)的更大上下文中定義的,但只有一部分可能的引數適用於 HTTP 表單和 POST 請求。在 HTTP 上下文中,只能使用值 form-data,以及可選指令 name 和 filename。
語法
作為主要主體的響應頭
HTTP 上下文中的第一個引數是 inline(預設值,表示可以在網頁內顯示,或作為網頁顯示)或 attachment(表示應該下載;大多數瀏覽器會顯示“另存為”對話方塊,如果存在 filename 引數的值,則會預填充)。
Content-Disposition: inline
Content-Disposition: attachment
Content-Disposition: attachment; filename="file name.jpg"
Content-Disposition: attachment; filename*=UTF-8''file%20name.jpg
檔名周圍的引號是可選的,但如果檔名中包含特殊字元(例如空格),則必須使用引號。
引數 filename 和 filename* 的唯一區別在於 filename* 使用 RFC 5987 第 3.2 節中定義的編碼。當在單個頭欄位值中同時存在 filename 和 filename* 時,如果兩者都可理解,則優先使用 filename*。建議兩者都包含以實現最大相容性,你可以透過將非 ASCII 字元替換為 ASCII 等效字元(例如將 é 轉換為 e)將 filename* 轉換為 filename。你可能希望避免在 filename 中使用百分號轉義序列,因為它們在瀏覽器中的處理方式不一致。(Firefox 和 Chrome 會解碼它們,而 Safari 不會。)
瀏覽器可能會應用轉換以符合檔案系統要求,例如將路徑分隔符(/ 和 \)轉換為下劃線(_)。
作為多部分主體的頭
multipart/form-data 主體需要一個 Content-Disposition 頭來提供有關表單每個子部分的資訊(例如,對於每個表單欄位和作為欄位資料一部分的任何檔案)。第一個指令始終是 form-data,並且頭還必須包含一個 name 引數來標識相關欄位。附加指令不區分大小寫,並且其引數在 = 符號後使用帶引號的字串語法。多個引數用分號 (;) 分隔。
Content-Disposition: form-data; name="fieldName"
Content-Disposition: form-data; name="fieldName"; filename="filename.jpg"
指令
name-
後跟一個字串,其中包含此子部分內容所引用的表單中 HTML 欄位的名稱。當處理同一欄位中的多個檔案時(例如,
<input type="file">元素的multiple屬性),可能存在多個具有相同名稱的子部分。值為
'_charset_'的name表示該部分不是 HTML 欄位,而是用於沒有明確字元集資訊的部分的預設字元集。 檔名-
後跟一個字串,其中包含傳輸檔案的原始名稱。此引數主要提供指示性資訊。RFC2183 中的建議適用。
- 儘可能優先使用 ASCII 字元(客戶端可以進行百分比編碼,只要伺服器實現能夠解碼)。
- 應剝離任何路徑資訊,例如將
/替換為_。 - 寫入磁碟時,不應覆蓋現有檔案。
- 避免建立具有安全隱患的特殊檔案,例如在命令搜尋路徑上建立檔案。
- 滿足其他檔案系統要求,例如受限字元和長度限制。
請注意,請求頭沒有 filename* 引數,也不允許 RFC 5987 編碼。
示例
觸發資源下載提示
以下響應在瀏覽器中觸發“另存為”對話方塊
200 OK
Content-Type: text/html; charset=utf-8
Content-Disposition: attachment; filename="cool.html"
Content-Length: 21
<HTML>Save me!</HTML>
HTML 檔案將被下載而不是在瀏覽器中顯示。大多數瀏覽器將提示使用者預設使用 cool.html 檔名儲存它(如 filename 指令中指定)。
HTML 釋出 multipart/form-data 內容型別
以下示例顯示了一個使用 multipart/form-data 並使用 Content-Disposition 頭髮送的 HTML 表單。實際上,邊界值 delimiter123 將是一個瀏覽器生成的字串,例如 ----8721656041911415653955004498
POST /test.html HTTP/1.1
Host: example.org
Content-Type: multipart/form-data;boundary="delimiter123"
--delimiter123
Content-Disposition: form-data; name="field1"
value1
--delimiter123
Content-Disposition: form-data; name="field2"; filename="example.txt"
value2
--delimiter123--
規範
| 規範 |
|---|
| 在超文字傳輸協議 (HTTP) 中使用 Content-Disposition 頭欄位 # 頭.欄位.定義 |
| 從表單返回值:multipart/form-data # 第 4.2 節 |
瀏覽器相容性
載入中…
另見
- HTML 表單
Content-Type定義了多部分主體的邊界。FormData介面用於準備表單資料,以便在fetch()或XMLHttpRequestAPI 中使用。