http header中的Content-disposition

Access-Control-Expose-Headers

響應首部 Access-Control-Expose-Headers 列出了哪些首部可以作爲響應的一部分暴露給外部。
默認情況下,只有六種 simple response headers (簡單響應首部)可以暴露給外部:

  • Cache-Control
  • Content-Language
  • Content-Type
  • Expires
  • Last-Modified
  • Pragma
    如果想要讓客戶端可以訪問到其他的首部信息,可以將它們在 Access-Control-Expose-Headers 裏面列出來。如下圖所示:

在這裏插入圖片描述

Content-disposition概念

Content-disposition 是 MIME(電子郵件) 協議的擴展,MIME 協議指示 MIME 用戶代理如何顯示附加的文件。當 Internet Explorer 接收到頭時,它會激活文件下載對話框,它的文件名框自動填充了頭中指定的文件名。(請注意,這是設計導致的;無法使用此功能將文檔保存到用戶的計算機上,而不向用戶詢問保存位置。)
服務端向客戶端遊覽器發送文件時,如果是瀏覽器支持的文件類型,一般會默認使用瀏覽器打開,比如txt、jpg等,會直接在瀏覽器中顯示,如果需要提示用戶保存,就要利用Content-Disposition進行一下處理,關鍵在於一定要加上attachment:

Response.AppendHeader(“Content-Disposition”,“attachment;filename=FileName.txt”);

備註:這樣瀏覽器會提示保存還是打開,即使選擇打開,也會使用相關聯的程序比如記事本打開,而不是IE直接打開了。

作爲消息主體中的消息頭

Content-Disposition 屬性是作爲對下載文件的一個標識字段,Content-Disposition屬性有兩種類型:inline 和 attachment 。

  • inline (默認值):將文件內容直接顯示在頁面;
  • attachment:彈出對話框讓用戶下載。下面上代碼:
  1. 在頁面內打開代碼:
response.setHeader("Content-Type","text/plain");
response.addHeader("Content-Disposition","inline;
	filename="+new String(filename.getBytes(),"utf-8"));
	
response.addHeader("Content-Length",""+file.length());
  1. 彈出保存框代碼:
response.setHeader("Content-Type","text/plain");
response.addHeader("Content-Disposition","attachment;
	filename="+new String(filename.getBytes(),"utf-8"));

response.addHeader("Content-Length",""+file.length());

作爲multipart body中的消息頭

Content-Type: multipart/form-data;boundary="boundary"

Content-Disposition: form-data; name="field2"; filename="example.txt"

相關指令

name

後面是一個表單字段名的字符串,每一個字段名會對應一個子部分。在同一個字段名對應多個文件的情況下(例如,帶有multiple 屬性的元素),則多個子部分共用同一個字段名。如果name參數的值爲 ‘charset’ ,意味着這個子部分表示的不是一個HTML字段,而是在未明確指定字符集信息的情況下各部分使用的默認字符集。

filename

後面是要傳送的文件的初始名稱的字符串。這個參數總是可選的,而且不能盲目使用:路徑信息必須舍掉,同時要進行一定的轉換以符合服務器文件系統規則。這個參數主要用來提供展示性信息。當與 Content-Disposition: attachment 一同使用的時候,它被用作"保存爲"對話框中呈現給用戶的默認文件名。

filename*

“filename” 和 “filename*” 兩個參數的唯一區別在於,“filename*“採用了 RFC 5987 中規定的編碼方式。當"filename” 和 “filename*” 同時出現的時候,應該優先採用"filename*”,假如二者都支持的話。

詳細見:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Disposition

使用注意事項:

1.當代碼裏面使用Content-Disposition來確保瀏覽器彈出下載對話框的時候。 response.addHeader(“Content-Disposition”,“attachment”);一定要確保沒有做過關於禁止瀏覽器緩存的操作。
代碼如下:
response.setHeader(“Pragma”, “No-cache”);
response.setHeader(“Cache-Control”, “No-cache”);
response.setDateHeader(“Expires”, 0);
不然會發現下載功能在opera和firefox裏面好好的沒問題,在IE下面就是不行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章