2016-06-18 4 views
1

이다 나는이처럼 보이는 몇 가지 자바 스크립트가 : 나는 http://example.com에 iframe이로로드하여 https://secure.example.com에서 myVar에 액세스하기 위해 노력하고있어document.domain을 같은 그러나 아직도 받고 동일 출처 오류

// https://secure.example.com 
document.domain = "example.com"; 
window.myVar = "value"; 

// http://example.com 
document.domain = "example.com"; 
var iframe = document.body.appendChild(document.createElement("iframe")); 
iframe.onload = function() { 
    console.log(iframe.contentWindow.myVar); 
} 
iframe.src = "https://secure.example.com"; 

합니다. httphttps의 사용에 유의하십시오. 두 도메인 모두 http 또는 https을 사용할 때이 기능이 작동하지만 지금은 http을 사용하고 다른 하나는 https을 사용하고 싶습니다. document.domain이 올바르게 설정되었는지 확인하기 위해 코드를 밟았습니다. 왜 이런 일이 일어나는 걸까요? MDN의 페이지 How to fix a website with blocked mixed content을 바탕으로

+0

HTTP 및 HTTPS는 example.com:80가 같은 기원이 아닌 것처럼, 같은 기원되지 않음 example.com:8080으로 http와 https를 혼합 할 수없는 좋은 이유가 있습니다. – mplungjan

+0

분명히 그렇습니다. 그러나'document.domain' 설정이 프로토콜 검사에 영향을 미치지 않거나 영향을주지 않는 것에 대한 정보를 찾을 수 없습니다. – Max

+0

관련 없음 https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy – mplungjan

답변

2

문제가 도메인이나 호스트가 아닙니다. 귀하의 문제는

httphttps이 example.com:80가 example.com:8080와 같은 원점으로 인해 아닙니다처럼 인해 프로토콜에 동일한 기원하지 않는 당신은 프로토콜에 걸쳐 document.domain을 설정할 수 없습니다 프로토콜

입니다 포트.

가 읽어 보시기 바랍니다 아주 좋은 보안 HTTP를 혼합 할 수 없습니다하는 이유와 HTTPS

있습니다 https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy

0

:

가장 좋은 전략은 혼합 콘텐츠 차단을 방지하기 위해 HTTPS 대신 HTTP와 같은 모든 콘텐츠를 제공하는 것입니다.

자신의 도메인의 경우 모든 콘텐츠를 HTTPS로 제공하고 링크를 수정하십시오. 종종 HTTPS 버전의 콘텐츠가 이미 존재하며이 경우 은 링크 (http : //에서 https : //)에 "s"를 추가해야합니다.

다른 도메인의 경우 가능한 경우 사이트의 HTTPS 버전을 사용하십시오. HTTPS 을 사용할 수없는 경우 도메인에 문의하여 에 HTTPS를 통해 콘텐츠를 제공 할 수 있는지 묻는 메시지를 표시 할 수 있습니다.