Refused to execute script from '' because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled.
CMS/프레임워크 | Rhymix 2.0 |
---|---|
개발 언어 | PHP 7.2 |
3개의 사이트에 동일한 구글 태그매니저 연동작업을 했습니다. (스크립트 실행)
그런데 1개 서버에서
Refused to execute script from '' because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled.
위와 같이 해당 스크립트의 요청이 거부가 됩니다.
구글링을 해보면 nginx 설정에
add_header 'Access-Control-Allow-Origin' '*';
를 추가하라고 하는 글들이 보이는데요.
문제가 없는 서버쪽에 위 내용을 찾아봐도 없는데 잘 되는거 같아 제가 못찾는건지 아니면 다른 문제인지 판단이 잘 안서네요.
add_header 'Access-Control-Allow-Origin' '*';
를 설정에 추가해도 문제 안될까요??
댓글 14
저건 Access-Control-Allow-Origin 헤더의 문제가 아니고, Content-Type 헤더의 문제입니다. 자바스크립트를 요청했는데 Content-Type: text/html 이라는 헤더가 따라오면 실행이 되지 않습니다.
요즘 절대 다수의 서버는 .js 확장자가 붙은 파일을 요청하면 Content-Type: text/javascript 또는 application/javascript 라고 제대로 헤더를 붙여 줍니다. text/html이 붙었다면 확장자가 .js인 파일을 직접 요청한 것이 아니라, PHP나 라이믹스를 통해서 스크립트를 반환하도록 해놓으셨을 가능성이 높아 보입니다. 이런 경우에 헤더를 제대로 출력해 주는 것은 해당 자료의 책임입니다.
동일한 파일을 3개의 사이트에 업로드해서 요청을 동일하게 했습니다.
1개의 사이트(다른서버)에서만 위와 같이 차단이 되서요.
add_header 'Access-Control-Allow-Origin' '*';
를 nginx 쪽에 넣고 해결은 되었습니다.
올바르지 않다면 어떻게 처리해야 하나요?
업로드한 파일에 Content-Type: text/html 로 되어있긴 합니다.
application/javascript 로 바꿨을때도 동일한 문제가 발생했거든요.
<?php
header('Content-Type: text/html; charset=UTF-8');
현재 이렇게 되어있고
<?php
header('Content-Type: application/javascript; charset=UTF-8');
이렇게 시도는 해봤습니다.
둘 다 적용해 보세요.
둘다 라면 어떤 거 말씀 이죠?
현재 Access-Control-Allowed-Origin 제거 하고
PHP 헤더 코드에 text/javascript 로 하니까 에러 없이 잘 됩니다.
근데 다른 서버(직접 세팅해주신)는 처음부터 문제가 없었어요.
세팅해주신 서버는
Content-Type도 지금 제대로 된게 아니고 Access-Control-Allowed-Origin 설정을 한것도 아닌것 같은데(해주셨나요??) 잘 되는데...
문제가 되었던 서버는
Access-Control-Allowed-Origin 의 설정을 해주거나
혹은 Content-Type을 잘 맞춰주니까 잘 되네요.
이 두 서버의 차이가 궁금해져서요.
일단 나머지 서버에 업로드한 PHP 파일도
text/javascript 로 교체하긴 했습니다.
사이트 도메인이나 SSL 적용 여부 등에 따라서도 다를 수 있고요.
text/javascript 로 바꿔주니까 에러 안뜨고 잘되네요.
나머지 서버에서는 왜 잘되는건지 희안하네요.
네. php 파일만 그렇게 바꿔주세요. 저는 라이믹스 꿀팁 안되는거 콘솔 에러 못봐서 몰랐습니다. 오늘 아날리틱스 에서 ip 수집 안된거 보고 브라우저 콘솔 봤더니 에러 뜨고 있었더라구요.