2016-09-16 4 views
0

노드 4, Express 4 서버에서 게시 한 Angular 1.5 클라이언트가 있습니다. IE Edge에서 수동 테스트의 99 %를 수행합니다. (나머지는 모카, 카르마이며, 배달 전에, 나는 파이어 폭스를 누르십시오.)nosniff가 img src가 작동하지 않게합니다.

우리는 최근에 우리의 HTTP 서버에이 줄을 추가

, helmet 사용 :

//Prevent Mime type sniffing/infering 
app.use(helmet.noSniff()); 

문제 다음 NOSNIFF 옵션은 파산 내 미리보기 이미지 모두. 컨트롤러와 뷰 구성 요소입니다 내 다른 각도 모듈 중 하나에서

, 나는이 라인이 : 내 노드/Express 서버에

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

을 내 /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); } 
    }); 
}) 

답변

0

IE의 네트워크 디버거를 사용하여 서버로 보내지는 요청에 'Content-Type'으로 'application/octet stream'이 있음을 확인했습니다. 어쩌면 내가 'image/jpeg'를 돌려 보내고 있기 때문에 그것이 nosniff가 응답을 죽이는 원인이되는지 스스로에게 물었다.

내 서버 코드에서 'title'이 (가) 실행 가능한 축소판 이미지를 생성하지 않은 경우 다시 보내는 "DEFAULT_THUMBNAIL"이 있습니다. 나는 resp.send(data)을하기 전에 그래서, 나는이 한 :

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

을 그리고 그것은 NOSNIFF 문제를 해결하는 것 같았다.

+1

헬멧 유지 관리자가 여기에 있습니다. 그게 제가 추천 한 것입니다. Edge가 (올바르게) MIME 형식을 JPEG로 스니핑 했으므로 제대로 작동했습니다. 하지만 서버에서 Mimetype을 존중하게 만들었을 때 (올바르지 않은'application/octet-stream'), 작동이 멈췄습니다. 올바른 콘텐츠 유형을 보내십시오. –