基础 - 响应的ContentType ¶
作者:KK
发表日期:2017.11.30
介绍 ¶
响应报头中也有一个Content-Type
,这个相信略有一两年开发经验的同学最熟知了,它当然就是表达了响应报文是什么格式的内容咯。
原则上来说,客户端应该要先判断这个报头是什么值,然后再决定如何解析响应报文,但规则是死的,人是活的,如果和个移动应用明知道/api/data
接口会返回{"data":"dataValue"}
这样的 JSON 数据,那完全可以直接解析 JSON 字符串而不需要if(contentType === 'application/json')
再确定是否解析。
通常来说这个Content-Type
影响的是一些通用型插件/软件的工作逻辑,因为这些东西是按照标准原则来设计的,例如浏览器。
当一个浏览器得到一段 HTML,然后又从中找到一个 link 标签指向了 css 资源,如果服务端响应的报头不是text/css
而是text/plain
,那么某些浏览器得到这段CSS代码后并不会进行页面的渲染,其实也看具体的浏览器了,现在大部分浏览器会判断请求地址带 css 结尾就强制执行样式渲染,JS 什么的也是这样智能判断。
然后剩下会被影响的就是插件类,特别是广为人知的jQuery
下面的 ajax 请求代码如果得到了text/html
的响应头将无法解析 JSON:
$.get('/dataUrl', function(result){
console.log(result);
});
但是如果这样写就可以无视服务端的返回类型,强制解析 JSON:
$.ajax({
url : '/dataUrl',
dataType : 'json',
success : function(result){
console.log(result);
}
});
PHP设置Content-Type ¶
header('Content-Type:application/json');
echo json_encode(['a' => 11]);
Node.Js设置Content-Type ¶
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify({a:11}))
Java Servlet设置Content-Type ¶
response.setHeader('Content-Type', 'application/json');
response.getWriter().println('{"a":11}');