欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

http header中的Content-disposition

程序员文章站 2022-03-15 15:14:13
...

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 里面列出来。如下图所示:

http header中的Content-disposition

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下面就是不行。