여기에는 두 가지 유형의 상황이 있습니다.
1. 동일한 상위 도메인을 기반으로 하는 하위 도메인 간 페이지에 액세스하려면 다음 세 가지 도메인 도메인이 있어야 합니다. taobao.com, jipiao.taobao.com, Promotion.taobao.com; 동일 상위 도메인은 taobao.com입니다.
2. 서로 다른 상위 도메인을 기반으로 한 페이지 간 액세스: taobao.com, baidu.com, sina.com.cn의 세 가지 도메인 도메인이 서로 다릅니다.
그들 사이의 도메인 간 문제를 해결하기 위한 솔루션은 다음과 같습니다.
옵션 1: 서버 프록시
도메인 A의 페이지 JS가 링크에 액세스해야 합니다. 데이터를 얻기 위해 도메인 B에서 이 솔루션은 도메인 A의 서버 측에 프록시 프로그램을 설정합니다(ASP, 서블릿 등과 같은 서버 프로그램일 수 있음). 도메인 A의 페이지 JS는 이 아래에서 프록시 프로그램을 직접 호출합니다. 도메인 프록시 프로그램은 도메인 B. link에 요청을 보내고 데이터를 얻은 다음 마지막으로 프록시를 통해 사용할 수 있도록 데이터를 페이지 JS에 반환하는 역할을 합니다.
액세스 프로세스는 다음과 같습니다. 도메인 A의 JS --> 도메인 A의 프록시 -- > 도메인 B의 링크
예:
1단계:
도메인 A: http://Jipiao.taobao.com/test.htm
페이지의 javascript 스크립트:
2단계:
도메인 A 서버(여기서는 서블릿으로 가정)의 프록시 프로그램을 완료합니다. 의사 코드는 다음과 같습니다. :
공용 클래스 Proxy 확장….{
..doGet(…… ..){
HttpClient client=……;
GetMethod get=new GetMethod("www.baidu.com/xxxxx.do") //도메인 링크에 접속합니다. B
int statusCode = client.executeMethod(get);
if (statusCode != HttpStatus.SC_OK) {
byte[] responseBody = get.getResponseBody()
String res=new String( responseBody);
Httpresponse.getWriter ().write(res);//도메인 A로 데이터 반환
}
}
}
옵션 2: 스크립트를 통해 태그: 도메인 A의
페이지 헤드에 빈 스크립트 태그를 작성합니다. http://Jipiao.taobao.com/test.htm:
< !--
참고: 이 솔루션을 사용하려면 도메인 B가 반환되어야 합니다. 데이터는 합법적인 JSON 형식 또는 JS 파일 형식이어야 합니다. 예를 들어 도메인 B에서 반환되는 데이터 형식은 다음과 같습니다.
Var Remote={test; :'hello'};
Var f=[2,1];
옵션 3: iframe 숨기기 및 도메인 공유:
도메인 A 페이지 http://jipiao에 숨겨진 iframe 쓰기 .taobao.com/yyyy.htm:
코드 복사
id="remoteHtml" src="" style="diapay:none" style=" diapay:none"/>
참고: 이 방법이 작동하려면 http://promotion.taobao.com/xxxx.htm 페이지에서도 document.domain="taobao.com"을 설정해야 합니다.
이 iframe 방법이 서로 다른 상위 도메인 간의 도메인 간 적합하지 않은 이유는 document.domain 설정이 jiapiao.taobao com과 같은 다른 도메인이 아닌 자신의 상위 도메인에만 설정할 수 있기 때문입니다. document.domain="baidu.com"이 아닌 document.domain="taobao.com"만 설정하세요.
여기에 나열된 세 가지 솔루션에는 각각 장점과 단점이 있습니다.
프록시 솔루션의 장점은 거의 모든 도메인 간 접속에 사용되며, 한 도메인에서만 개발하면 되고, 다른 도메인에서는 어떤 형식의 데이터도 제공할 수 있습니다. 단점은 이 솔루션이 중간 Proxy를 거치기 때문에 지연이 조금 더 커질 수 있고, 로컬 서버의 부하도 늘어나 개발 작업량도 조금 더 커진다는 점입니다.
스크립트 태그 솔루션은 몇 줄의 코드 없이도 가능하다고 할 수 있습니다. 그러나 반환되는 데이터 형식에 대한 요구 사항은 Json 형식이어야 합니다. 다른 형식의 데이터라면 이 방법으로는 할 수 있는 일이 없습니다.
iframe을 숨기는 방법도 매우 간단합니다. 반환된 모든 데이터 형식을 처리할 수 있지만 동일한 상위 도메인 아래의 도메인 간 요청에만 적용 가능하며 개발 시 다른 도메인, 즉 문서가 협력해야 합니다. .domain을 설정해야 합니다.
원본 게시물 자세히 보기: http://blog.csdn.net/lovingprince/archive/2008/09/20/2954675.aspx
--------------- -- ------------------------------------------------ -- ---
------------------------------- --- ----------------------------------
JS 크로스 도메인 액세스의 의미와 관련하여 몇 가지 사항을 더 추가하고 싶습니다.
크로스 도메인 액세스는 간단히 말해서 웹사이트 A의 자바스크립트 코드가 웹사이트 B에 액세스를 시도하는 것을 의미합니다. 예를 들어 웹사이트 A의 페이지에 액세스하려는 경우, 웹사이트 B의 다른 페이지에서 JS 개체를 실행하거나 웹사이트 A의 페이지에서 JS를 사용하여 페이지의 dom 요소를 구문 분석하려는 경우 웹사이트 B 등; 이러한 종류의 도메인 간 액세스 문제가 발생하는 애플리케이션 시나리오는 일반적으로 iframe에서 다른 도메인에 페이지를 삽입하거나 Ajax 요청을 다른 도메인으로 보내는 등입니다.
보안상의 이유로 교차 -주요 브라우저에서는 기본적으로 도메인 액세스가 금지되어 있지만 브라우저는 파일의 다른 도메인에서 JS를 참조하는 것을 금지하지 않으며 가져온 JS 파일의 기능을 자유롭게 실행할 수 있다는 점이 개인적으로 매우 중요하다고 생각합니다.
크로스 도메인인지 판단하는 규칙은 도메인 이름, 프로토콜, 포트 세 가지를 비교하는 것입니다. 세 가지 중 하나가 다르면 우리가 자주 이야기하는 크로스 도메인 문제가 발생합니다. 일반적으로 다른 도메인 이름을 참조합니다. 이 시나리오는 발생할 가능성이 가장 높으며 앞서 언급한 taobao.com 도메인 아래의 2차 도메인 이름의 도메인 간 문제와 같은 몇 가지 해결 방법이 있기 때문입니다. 🎜> 기본 도메인이 다르거나 프로토콜이 다릅니다(예: https 및 http) 도메인 간 문제(예: *.taobao.com 도메인이 *.baidu.com 도메인의 콘텐츠에 액세스하려고 함) 웹 측에서는 해결할 수 없으며 서버 측 프록시 솔루션을 통해서만 해결할 수 있습니다.
다른 도메인 간의 공통 페이지 제어 DOM 요소는 다음과 같습니다.
window.location은 설정할 수 있지만 읽을 수 없습니다. 다른 위치 속성 및 메서드에 대한 액세스는 금지됩니다.
document.href는 설정할 수 있지만 읽을 수는 없습니다. 다른 문서 속성 및 메서드에 대한 액세스는 금지됩니다.