Orbited (Comet 서버) 의 클라이언트 측 JS 구성 요소 는 서버가 JS 자체에 대한 다른 도메인 또는 포트에서 실행중인 경우 다음을 실행해야합니다.
document.domain = document.domain;
다른 JS가로드되기 전에 ( 문서를 참조하십시오 .)
이것은 무엇을합니까? NOOP처럼 보입니다! (나는 확인했고 실제로 필요합니다.)
답변:
실제로이 코드를 작성했습니다.
교차 하위 도메인 / 포트 혜성을 시도 할 때 iframe document.domain
은 상위 프레임 과 동일한 값 을 가져야합니다 . 불행히도 브라우저는 원래 document.domain
값에 대해 내부적으로 도메인 이름과 포트를 저장합니다 . 그러나 javascript의 getter 및 setter는 포트에 대해 아무것도 모릅니다. 그래서 문제는 이것입니다. 만약 상단 프레임 document.domain
이 ('example.com', 80)
이고 하단 프레임이 ('comet.example.com', 80)
이면 하단 프레임 ('example.com', 80)
도 어떻게됩니까?
호스트 이름 부분을 변경하면 반드시 포트가로 설정 null
되므로 할 수 없습니다. 따라서 할 수있는 최선 ('example.com', null)
은 하단 프레임에있는 것입니다. 따라서 상단 프레임도 해당 값으로 설정해야 document.domain=document.domain
합니다. 그것은에서 브라우저의 내부 표현을 변경 ('example.com', 80)
을 ('example.com', null)
한 후 모든 것이 최대 일치 및 크로스 포트 / 하위 프레임 통신 작동합니다.
브라우저는 (a) 명시 적으로 설정되지 않은 경우 document.domain과 (b) 명시 적으로 설정된 경우 document.domain을 구분합니다. 동일한 값을 반환하더라도 ...
값을 명시 적으로 설정하면 다른 하위 도메인 (동일한 상위 도메인 아래)의 스크립트와 "협력"할 의도가 있음을 나타냅니다.
상위 페이지와 외부 스크립트 모두 document.domain을 동일한 값으로 명시 적으로 설정하면 동일 출처 정책 제한이 무시되고 각 스크립트는 서로의 컨텍스트의 모든 (그렇지 않으면 제한된) 개체 및 속성에 액세스 할 수 있습니다.
이 사이트에서 다음 정보를 찾았습니다 : devguru . 더 구체적으로 말하면 다음과 같습니다.
이 속성은 문서가 생성 된 서버의 도메인 이름을 설정하거나 반환합니다. 기본적으로 문서가 검색된 서버의 도메인 이름이 사용되지만이 이름의 접미사 (접미사 만)로 변경할 수 있습니다. 이를 통해 동일한 도메인 접미사를 공유하는 경우 서로 다른 서버에서 전달 된 문서간에 스크립트 속성을 공유하고 보안이 허용됩니다.
동일한 도메인에 대해 크로스 사이트 스크립팅을 허용하는 것 같습니다 (하위 도메인이 다른 경우에도).
document.domain을 건드리지 않으면 js 엔진은 동일한 도메인의 다른 자바 스크립트 만 허용한다고 가정합니다. 이 속성을 사용 하면 궤도 문서 상태와 같은 다른 하위 도메인 에 배포 할 수 있습니다 .
document.domain = document.domain
입니다 하지 아무것도 실행.
는 document.domain
명시 적으로 설정되지 않은 경우 실제 URL에서 기본값을 가져옵니다. 브라우저는 document.domain
URL이 기본값으로 설정되었는지 또는 명시 적으로 설정되었는지 기록합니다. 둘 다 동일한 도메인에 대한 기본값이거나 둘 다 명시 적으로 동일한 도메인으로 설정되어야 작동합니다. 하나가 기본값이고 하나가 명시 적으로 설정되어있는 경우, 둘 다 읽으면 일치하는 경우 두 페이지는 여전히 서로 대화 할 수 없습니다.
참조 : https://developer.mozilla.org/en-US/docs/DOM/document.domain