질문/조언질답게시판

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' '*';
를 설정에 추가해도 문제 안될까요??

 

 

  • profile

    저건 Access-Control-Allow-Origin 헤더의 문제가 아니고, Content-Type 헤더의 문제입니다. 자바스크립트를 요청했는데 Content-Type: text/html 이라는 헤더가 따라오면 실행이 되지 않습니다.

     

    요즘 절대 다수의 서버는 .js 확장자가 붙은 파일을 요청하면 Content-Type: text/javascript 또는 application/javascript 라고 제대로 헤더를 붙여 줍니다. text/html이 붙었다면 확장자가 .js인 파일을 직접 요청한 것이 아니라, PHP나 라이믹스를 통해서 스크립트를 반환하도록 해놓으셨을 가능성이 높아 보입니다. 이런 경우에 헤더를 제대로 출력해 주는 것은 해당 자료의 책임입니다.

  • profile profile

    동일한 파일을 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'); 

     

    이렇게 시도는 해봤습니다.

  • profile profile
    nignx 설정 원래대로 돌리고

    text/javascript 로 바꿔주니까 에러 안뜨고 잘되네요.

    나머지 서버에서는 왜 잘되는건지 희안하네요.
  • profile profile
    도메인이 다르다면 Access-Control-Allowed-Origin도 필요할 수 있습니다.
    둘 다 적용해 보세요.
  • profile profile
    지금 구글 태그 매니저 스크립트가 저희 사이트에서 실행되면서 그 안에 스크립트가 저희 서버로 요청하는 것 입니다.

    둘다 라면 어떤 거 말씀 이죠?
    현재 Access-Control-Allowed-Origin 제거 하고

    PHP 헤더 코드에 text/javascript 로 하니까 에러 없이 잘 됩니다.

    근데 다른 서버(직접 세팅해주신)는 처음부터 문제가 없었어요.
  • profile profile
    Access-Control-Allowed-Origin을 추가해놓은 상태에서 Content-Type도 자바스크립트에 맞는 것으로 해보시라는 의미였습니다. 이미 잘 작동한다면 그냥 두셔도 상관없습니다.
  • profile profile

    세팅해주신 서버는
    Content-Type도 지금 제대로 된게 아니고 Access-Control-Allowed-Origin 설정을 한것도 아닌것 같은데(해주셨나요??) 잘 되는데...

    문제가 되었던 서버는

    Access-Control-Allowed-Origin 의 설정을 해주거나
    혹은 Content-Type을 잘 맞춰주니까 잘 되네요.

    이 두 서버의 차이가 궁금해져서요.

     

     

    일단 나머지 서버에 업로드한 PHP 파일도 

    text/javascript 로 교체하긴 했습니다.

  • profile profile
    X-Content-Type-Options: nosniff 헤더를 추가하셨다면 거기에 영향을 받을 것입니다.
    사이트 도메인이나 SSL 적용 여부 등에 따라서도 다를 수 있고요.
  • ?
    도움주셨던 태그매니저 스크립트 어제 저는 성공한 줄 알았지만, 값을 가져오지 못해서 다시 복구 시켜놓았어요... 이 글도 참고해서 다시 확인해 봐야겠네요.
  • ? profile
    어.. 그럼 아마 Content-Type 때문에 에러가 뜨고 있었을지 모릅니다. 브라우저 콘솔창에 에러가 뜨면 수집 안되니까 일단 에러가 뜨면(뜨지 않아도) Content-Type 을 바꿔주세요.
  • profile ?
    넵 그렇게 적용해보겠습니다!
  • profile ?
    php 파일에 Content-Type를 text/javascript 바꿔주고 스크립트는 application/javascript 그대로 둬도 되나요? 둘다 바꿔줘야할까요
  • ? profile

    네. php 파일만 그렇게 바꿔주세요. 저는 라이믹스 꿀팁 안되는거 콘솔 에러 못봐서 몰랐습니다. 오늘 아날리틱스 에서 ip 수집 안된거 보고 브라우저 콘솔 봤더니 에러 뜨고 있었더라구요.

  • profile ?
    말씀대로 적용했더니 잘 되네요! 감사합니다 :-)