关于MIME类型强制检查不通过,javascript被浏览器阻止无法加载的问题

随风所欲 发布于 2015/09/07 09:54
阅读 876
收藏 0

项目中用了快逸报表,页面利用报表的TAGLIB标签生成了很多东西。其中有这么两句代码:

<script language=javascript src="http://localhost:80/reportServlet?action=10&file=%2Fcom%2Frunqian%2Freport4%2Finput%2Finput4ns.js" charset="UTF-8">
</script>
<script language=javascript src="http://localhost:80/reportServlet?action=10&file=%2Fcom%2Frunqian%2Freport4%2Fview%2Fhtml%2Frqdialog.js" charset="UTF-8">
</script>
在去请求src里面的的js 时,我反编译了源码发现它将 respponse里的content-type设定死了为text/html,如图:然后我谷歌和IE都会报错,

谷歌:

IE:

后面我去仔细看了 response 响应头 发现了一句 X-Content-Type-Options:nosniff,这句话会告诉浏览器强制检查MIME类型,我们需要返回的是application/javascript,但报表源码设定的content-type为text/html,我没办法去最这个做出改变。最终导致火狐浏览器可以通过加载出相关JS,谷歌和IE都不行。请教各位大神这个问题可有好的方式或者思路来解决?

以下是问题补充:

@随风所欲:问题终于解决了,原来是我的spring-secrity安全框架默认在header里面加入了 X-Content-Type-Options:nosniff 这个MIME强制类型检测,关掉就好了。 (2015/09/07 15:09)
加载中
0
huan
huan
加个filter 转一下呗。
0
随风所欲
随风所欲

引用来自“huan”的评论

加个filter 转一下呗。

我尝试在代码里加入了 filter,但是过滤后的结果是没有响应内容。

在没有加filter的时候MIME检查不通过的时候,response其实是有内容的。

前后的response响应头对比:

我查看了源码,发现它是用PrintWriter的print方法输出的JS文件,但经过我的filter以后 内容就没有了。

请问这是什么原因?

0
huan
huan

引用来自“huan”的评论

加个filter 转一下呗。

引用来自“随风所欲”的评论

我尝试在代码里加入了 filter,但是过滤后的结果是没有响应内容。

在没有加filter的时候MIME检查不通过的时候,response其实是有内容的。

前后的response响应头对比:

我查看了源码,发现它是用PrintWriter的print方法输出的JS文件,但经过我的filter以后 内容就没有了。

请问这是什么原因?

你确定你的filter写对了么? 

1 应该是在response有内容的时候再加入contenttype 

2 我记得filter执行的最后要交给chain中下一个filter执行的。否则会中断执行链。

你最好检查一下filter执行完后servlet是否执行了。

随风所欲
随风所欲
这些全都是报表的一个TAGLIB标签生成的一段script代码然后请求它自己的 servlet然后返回的。我都是反编译进去看的,没办法去断点啊改变源码那些。我就仅仅想在它 response 响应返回的时候 重新改一下它的content-type.不过现在问题已经解决了,还是谢谢你你提供的思路
返回顶部
顶部