一.什么是Content-Type
Content-Type表示内容类型和字符编码。内容类型也叫做MIME类型。是Internet Media Type,互联网媒体类型。在互联网上传输的数据有不同的数据类型,HTTP在传输数据对象时会为他们打上称为MIME的数据格式标签,用于区分数据类型。
请求头中的content-type,就是 B端发给S端的数据类型描述 。即告诉服务器端,我给你传的数据是某种类型的,服务器端针对不同类型的数据,采取不同的处理方式。
响应头中的content-type,就是 S端发给B端的数据类型描述 。即告诉浏览器端,我给你发的是什么样格式的数据,那么浏览器端针对不同类型的数据,采取不同的处理方式。
二.语法格式:
1、类型格式
type/subtype(;parameter)? type
参数 | 说明 |
---|---|
type | 主类型,任意的字符串,如text,如果是*号代表所有 |
subtype | 子类型,任意的字符串,如html,如果是*号代表所有; |
parameter | 可选,一些参数,如Accept请求头的q参数, Content-Type的 charset参数 |
2、常见的媒体格式类型
类型 | 说明 |
---|---|
text/html | HTML格式 |
ext/plain | 纯文本格式 |
text/xml | XML格式 |
image/gif | gif图片格式 |
image/jpeg | jpg图片格式 |
image/png | png图片格式 |
application/xhtml+xml | XHTML格式 |
application/xml | XML数据格式 |
application/atom+xml | Atom XML聚合格式 |
application/json | JSON数据格式 |
application/pdf | pdf格式 |
application/msword | Word文档格式 |
application/octet-stream | 二进制流数据(如常见的文件下载) |
application/x-www-form-urlencoded | form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式) |
multipart/form-data | 在表单中进行文件上传时 |
3、Content-Type 和 Accept 区别
Http报头:通用报头,请求报头,响应报头和实体报头。
请求方的http报头结构:通用报头,请求报头,实体报头
响应方的http报头结构:通用报头,响应报头,实体报头
参考链接:HTTP中的Content-Type和Accept
- 区别:
Accept | Content-Type |
---|---|
请求头 | 实体头 |
发送端(客户端)希望接受的数据类型 | 发送端(客户端|服务器)发送的实体数据的数据类型 |
- 示例:
Accept:text/xml; ——》代表客户端希望接受的数据类型是xml
Content-Type:text/html; ——》代表发送端发送的数据格式是html
三、Content-Type用法
1.要把文件响应给浏览器,就是把文件通过response返回给浏览器.然后浏览器解析并完成下载.
下面这种是通用方法.
已验证成功
//1.设置文件ContentType类型,这样设置,会自动判断下载文件类型
response.setContentType("multipart/form-data");
//2.设置文件头:最后一个参数是设置下载文件名(注意是带后缀的)
String name = new String(fileName.getBytes("gb2312"), "ISO8859-1");
response.setHeader("Content-Disposition", "attachment;fileName="+name);
2.用HttpURLConnection调别人的第三方接口,要设置request.
1)第三方接口需要传json格式参数
已验证
//设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive"); //维持长链接
conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
2)第三方接口需要传文件
未验证
String Boundary = UUID.randomUUID().toString(); // 文件边界
// 1.开启Http连接
HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
conn.setConnectTimeout(10*1000);
conn.setDoOutput(true); // 允许输出
// 2.Http请求行/头
conn.setRequestMethod("POST");
conn.setRequestProperty("Charset", "utf-8");
conn.setRequestProperty("Content-Type", "multipart/form-data; boundary="+Boundary);
// 3.Http请求体
DataOutputStream out = new DataOutputStream(conn.getOutputStream());
out.writeUTF("--"+Boundary+"\r\n"
+"Content-Disposition: form-data; name=\"file\"; filename=\"filename\"\r\n"
+"Content-Type: application/octet-stream; charset=utf-8"+"\r\n\r\n");
InputStream in = new FileInputStream(file);
byte[] b = new byte[1024];
int l = 0;
while((l = in.read(b)) != -1) out.write(b,0,l); // 写入文件
out.writeUTF("\r\n--"+Boundary+"--\r\n");
out.flush();
out.close();
in.close();
// 4.Http响应
BufferedReader bf = new BufferedReader(new InputStreamReader(conn.getInputStream(),"utf-8"));
String line = null;
while ((line=bf.readLine())!=null) {
System.out.println(line);
}
3)第三方接口需要传文件+其他参数
有点复杂,自己百度,或者我后面遇到再总结
content type的研究到此为止吧!!!!!! 后面项目遇到了自己百度
————————————————
原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43453386/article/details/83512451