nosniff导致img src无法正常工作

时间:2016-09-16 17:41:41

标签: angularjs node.js express helmet.js

我有一个Angular 1.5客户端,由Node 4,Express 4服务器发布。我在IE Edge中进行了99%的手动测试。 (剩下的就是Mocha,Karma,在交付之前,我点击了Firefox。)

我们最近使用helmet

将此行添加到我们的http服务器
//Prevent Mime type sniffing/infering
app.use(helmet.noSniff());

问题:nosniff选项打破了我的所有缩略图。

在我的一个其他Angular模块中,它是一个控制器和视图组件,我有这一行:

...
<img ng-src="/api/thumbnail/{{title}}"/>
...

在我的Node / Express服务器上,我的/api/thumbnail/:title/路由如下所示:

router.get('/api/thumbnail/:title/',function(req,res){
    ... get file to read from 'title'

    fs.readFile(fileName,function(err,data){
       if ( err ) { ... do error handling ... }
       else { resp.send(data); }
    });
})

1 个答案:

答案 0 :(得分:0)

使用IE的网络调试器,我注意到发送到服务器的请求具有'application / octet stream'作为'Content-Type'。也许是因为我要寄回'image / jpeg',所以,我问自己这是不是导致nosniff杀死响应的原因?

在我的服务器代码中,我有一个“DEFAULT_THUMBNAIL”,如果'title'没有为我生成可行的缩略图,我会将其发回。所以,在我做resp.send(data)之前,我做了这个:

const mime = require('mime');
...
resp.setHeader('Content-type',mime.lookup(DEFAULT_THUMBNAIL));

这似乎解决了 nosniff 问题。