1. 程式人生 > 實用技巧 >http請求頭Content-Disposition欄位

http請求頭Content-Disposition欄位

在常規的 HTTP 應答中,Content-Disposition 響應頭指示回覆的內容該以何種形式展示,是以內聯的形式(即網頁或者頁面的一部分),還是以附件的形式下載並儲存到本地。
在 multipart/form-data 型別的應答訊息體中,Content-Disposition 訊息頭可以被用在 multipart 訊息體的子部分中,用來給出其對應欄位的相關資訊。各個子部分由在Content-Type 中定義的分隔符分隔。用在訊息體自身則無實際意義。

Content-Disposition 訊息頭最初是在 MIME 標準中定義的,HTTP 表單及 POST 請求只用到了其所有引數的一個子集。只有 form-data 以及可選的 name 和 filename 三個引數可以應用在HTTP場景中。

作為訊息主體中的訊息頭

在 HTTP 場景中,第一個引數或者是 inline(預設值,表示回覆中的訊息體會以頁面的一部分或者整個頁面的形式展示),或者是 attachment(意味著訊息體應該被下載到本地;大多數瀏覽器會呈現一個“儲存為”的對話方塊,將 filename 的值預填為下載後的檔名,假如它存在的話)
Content-Disposition: inline
Content-Disposition: attachment
Content-Disposition: attachment; filename="filename.jpg"

作為multipart body中的訊息頭

在 HTTP 場景中。第一個引數總是固定不變的 form-data;附加的引數不區分大小寫,並且擁有引數值,引數名與引數值用等號('=')連線,引數值用雙引號括起來。引數之間用分號(';')分隔。
Content-Disposition: form-data
Content-Disposition: form-data; name="fieldName"
Content-Disposition: form-data; name="fieldName"; filename="filename.jpg"

指令

name
後面是一個表單欄位名的字串,每一個欄位名會對應一個子部分。在同一個欄位名對應多個檔案的情況下(例如,帶有 multiple 屬性的 <input type=file > 元素),則多個子部分共用同一個欄位名。如果 name 引數的值為 'charset' ,意味著這個子部分表示的不是一個 HTML 欄位,而是在未明確指定字符集資訊的情況下各部分使用的預設字符集。
filename
後面是要傳送的檔案的初始名稱的字串。這個引數總是可選的,而且不能盲目使用:路徑資訊必須舍掉,同時要進行一定的轉換以符合伺服器檔案系統規則。這個引數主要用來提供展示性資訊。當與 Content-Disposition: attachment 一同使用的時候,它被用作"儲存為"對話方塊中呈現給使用者的預設檔名。
filename*
"filename" 和 "filename" 兩個引數的唯一區別在於,"filename

" 採用了 RFC 5987 中規定的編碼方式。當 "filename" 和 "filename" 同時出現的時候,應該優先採用 "filename",假如二者都支援的話。

示例

以下是一則可以觸發"儲存為"對話方塊的伺服器應答:

200 OK
Content-Type: text/html; charset=utf-8
Content-Disposition: attachment; filename="cool.html"
Content-Length: 22

<HTML>Save me!</HTML>