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:彈出對話框讓用戶下載。下面上代碼:
- 在頁面內打開代碼:
response.setHeader("Content-Type","text/plain");
response.addHeader("Content-Disposition","inline;
filename="+new String(filename.getBytes(),"utf-8"));
response.addHeader("Content-Length",""+file.length());
- 彈出保存框代碼:
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下面就是不行。