头痛IE
IE 后端返回的好好的json ,就变成了要下载的文件;
病因:
响应头里 content-type:application/json;
原理:
先贴链接 :https://msdn.microsoft.com/en-us/library/ms775147(v=vs.85).aspx
什么意思呢?
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
Content-Type,内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些Asp网页点击的结果却是下载到的一个文件或一张图片的原因。
所以,当响应头返回的类型,浏览器没有对应的的方式处理,它就让你下载了 =。=;
方法一:
msdn说,操作系统里将appliaction/json,text/json两张content-type开启调成与gif/png/html一致,改为直接用浏览器打开。
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOTMIMEDatabaseContent Typeapplication/json] "CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
"Encoding"=dword:00080000 [HKEY_CLASSES_ROOTMIMEDatabaseContent Type ext/json] "CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
"encoding"=dword:00080000
这样呢,导入上面的注册表以后,再使用IE当然不会下载json文件了;
but 这么搞,一定不行;
方法二:
响应头 中类型 设为浏览器可以直接浏览的,比如
response.setContentType("text/html"); response.setCharacterEncoding("UTF-8");
然后前端再转成json,恩,这样就解决了下载为文件的问题了。
思考:
1,为啥只有这一个接口返回的json不行,所有的接口的返回类型都是application/json;
为啥我其他接口可以呢。我没找到原因,为啥可以呢?
2 ,为啥只有IE不行,不能识别为啥就他不行;
微软说:
https://connect.microsoft.com/IE/feedback/details/793307/text-json-mimetype
恩 ,是的,他们就是没支持这个,他们说,他们会修复;